{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":562508458,"defaultBranch":"master","name":"helog","ownerLogin":"ianparkinson","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2022-11-06T15:23:36.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/2920669?v=4","public":true,"private":false,"isOrgOwned":false},"refInfo":{"name":"","listCacheKey":"v0:1681577612.0","currentOid":""},"activityList":{"items":[{"before":"d61afd4d733e8c0afa70da40011129f0cf68868c","after":"bf5b0659e93483057493e41bbb0acf8488d91ed4","ref":"refs/heads/master","pushedAt":"2023-04-15T16:52:06.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"ianparkinson","name":null,"path":"/ianparkinson","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2920669?s=80&v=4"},"commit":{"message":"Update README to reflect the removal of null handling in CSV output.","shortMessageHtmlLink":"Update README to reflect the removal of null handling in CSV output."}},{"before":"bf5b0659e93483057493e41bbb0acf8488d91ed4","after":null,"ref":"refs/heads/csv","pushedAt":"2023-04-15T16:52:01.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"ianparkinson","name":null,"path":"/ianparkinson","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2920669?s=80&v=4"}},{"before":"17df6557327fe417a4aeef79a172ab6304090ac7","after":"bf5b0659e93483057493e41bbb0acf8488d91ed4","ref":"refs/heads/csv","pushedAt":"2023-04-15T16:49:13.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"ianparkinson","name":null,"path":"/ianparkinson","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2920669?s=80&v=4"},"commit":{"message":"Update README to reflect the removal of null handling in CSV output.","shortMessageHtmlLink":"Update README to reflect the removal of null handling in CSV output."}},{"before":null,"after":"17df6557327fe417a4aeef79a172ab6304090ac7","ref":"refs/heads/csv","pushedAt":"2023-04-15T16:07:29.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"ianparkinson","name":null,"path":"/ianparkinson","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2920669?s=80&v=4"},"commit":{"message":"Output literal `null` in CSV output where supplied by the Hubitat\n\nBrings the CSV output closer to the actual data supplied by the Hubitat. Where string data is absent, the Hubitat can provide the string literal `null`. Until this change, helog would render that as an empty field in CSV.\n\nThis also makes the behaviour consistent with the handling of absent numeric fields - the Hubitat supplies `0`, which helog writes to CSV output unchanged.","shortMessageHtmlLink":"Output literal null in CSV output where supplied by the Hubitat"}},{"before":"7dd237df9ce27adc03b293dfacc179c2b80b6e86","after":"d61afd4d733e8c0afa70da40011129f0cf68868c","ref":"refs/heads/master","pushedAt":"2023-04-15T15:18:19.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"ianparkinson","name":null,"path":"/ianparkinson","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2920669?s=80&v=4"},"commit":{"message":"Break out emptyIfNullOrZero for consistency and improved testing","shortMessageHtmlLink":"Break out emptyIfNullOrZero for consistency and improved testing"}},{"before":"d61afd4d733e8c0afa70da40011129f0cf68868c","after":null,"ref":"refs/heads/pass","pushedAt":"2023-04-15T15:18:14.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"ianparkinson","name":null,"path":"/ianparkinson","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2920669?s=80&v=4"}},{"before":"cb2ad41f96e6ca13d2e7011aae9b6dddcd542be1","after":"d61afd4d733e8c0afa70da40011129f0cf68868c","ref":"refs/heads/pass","pushedAt":"2023-04-15T15:15:41.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"ianparkinson","name":null,"path":"/ianparkinson","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2920669?s=80&v=4"},"commit":{"message":"Break out emptyIfNullOrZero for consistency and improved testing","shortMessageHtmlLink":"Break out emptyIfNullOrZero for consistency and improved testing"}},{"before":null,"after":"cb2ad41f96e6ca13d2e7011aae9b6dddcd542be1","ref":"refs/heads/pass","pushedAt":"2023-04-15T15:03:20.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"ianparkinson","name":null,"path":"/ianparkinson","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2920669?s=80&v=4"},"commit":{"message":"Consistency pass\n\nClasses should be normally be final, tests need not be public.","shortMessageHtmlLink":"Consistency pass"}},{"before":"72c36a3b50f93a5640b68bacec87041ba08e19b6","after":"7dd237df9ce27adc03b293dfacc179c2b80b6e86","ref":"refs/heads/master","pushedAt":"2023-04-10T10:48:55.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"ianparkinson","name":null,"path":"/ianparkinson","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2920669?s=80&v=4"},"commit":{"message":"Simplify CSV escaping","shortMessageHtmlLink":"Simplify CSV escaping"}},{"before":"3463df5eb4d1d1675d9ec2c515195fbff1d32248","after":"72c36a3b50f93a5640b68bacec87041ba08e19b6","ref":"refs/heads/master","pushedAt":"2023-04-10T10:39:14.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"ianparkinson","name":null,"path":"/ianparkinson","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2920669?s=80&v=4"},"commit":{"message":"Fix to README","shortMessageHtmlLink":"Fix to README"}},{"before":"0b163258c3c9eb054527c4a82ec3ef8e38a33ccd","after":"3463df5eb4d1d1675d9ec2c515195fbff1d32248","ref":"refs/heads/master","pushedAt":"2023-04-10T09:52:52.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"ianparkinson","name":null,"path":"/ianparkinson","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2920669?s=80&v=4"},"commit":{"message":"Bump year in NOTICE","shortMessageHtmlLink":"Bump year in NOTICE"}},{"before":"3f27c1b51b7229f227e17dbdf40c775a61114a17","after":"0b163258c3c9eb054527c4a82ec3ef8e38a33ccd","ref":"refs/heads/master","pushedAt":"2023-04-08T19:50:24.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"ianparkinson","name":null,"path":"/ianparkinson","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2920669?s=80&v=4"},"commit":{"message":"Colourize message on server error","shortMessageHtmlLink":"Colourize message on server error"}},{"before":"d8fcd80352d22fe08384a44883407472846449bc","after":"3f27c1b51b7229f227e17dbdf40c775a61114a17","ref":"refs/heads/master","pushedAt":"2023-04-08T19:33:06.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"ianparkinson","name":null,"path":"/ianparkinson","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2920669?s=80&v=4"},"commit":{"message":"Replace kofi link with a link to the home page at github","shortMessageHtmlLink":"Replace kofi link with a link to the home page at github"}},{"before":"ade515ca2adf47ab9b6e8a312f018f13f3faae4a","after":"d8fcd80352d22fe08384a44883407472846449bc","ref":"refs/heads/master","pushedAt":"2023-04-08T19:13:40.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"ianparkinson","name":null,"path":"/ianparkinson","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2920669?s=80&v=4"},"commit":{"message":"Include JVM and OS in --version","shortMessageHtmlLink":"Include JVM and OS in --version"}},{"before":"107750b72bf74a8ff22090c9a7f58ccf5ad1674a","after":"ade515ca2adf47ab9b6e8a312f018f13f3faae4a","ref":"refs/heads/master","pushedAt":"2023-04-08T18:56:50.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"ianparkinson","name":null,"path":"/ianparkinson","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2920669?s=80&v=4"},"commit":{"message":"Merge remote-tracking branch 'origin/master'","shortMessageHtmlLink":"Merge remote-tracking branch 'origin/master'"}},{"before":"71bebdf0a864997e30d42776d99120be78ddd3d0","after":null,"ref":"refs/heads/update","pushedAt":"2023-04-08T18:56:18.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"ianparkinson","name":null,"path":"/ianparkinson","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2920669?s=80&v=4"}},{"before":null,"after":"71bebdf0a864997e30d42776d99120be78ddd3d0","ref":"refs/heads/update","pushedAt":"2023-04-08T18:53:21.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"ianparkinson","name":null,"path":"/ianparkinson","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2920669?s=80&v=4"},"commit":{"message":"Update all dependencies","shortMessageHtmlLink":"Update all dependencies"}},{"before":"e9fef77272c86d88cf77b6fd04b0475d00fac641","after":"107750b72bf74a8ff22090c9a7f58ccf5ad1674a","ref":"refs/heads/master","pushedAt":"2023-04-08T14:51:05.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"ianparkinson","name":null,"path":"/ianparkinson","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2920669?s=80&v=4"},"commit":{"message":"Tweak readme for consistency","shortMessageHtmlLink":"Tweak readme for consistency"}},{"before":"e9fef77272c86d88cf77b6fd04b0475d00fac641","after":null,"ref":"refs/heads/docs-toc","pushedAt":"2023-04-08T13:45:58.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"ianparkinson","name":null,"path":"/ianparkinson","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2920669?s=80&v=4"}},{"before":"ce70985ff8e828a45758b15675f70c1a51d9d104","after":null,"ref":"refs/heads/docs","pushedAt":"2023-04-08T13:45:52.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"ianparkinson","name":null,"path":"/ianparkinson","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2920669?s=80&v=4"}},{"before":"0b0799ee7162d0cb1a39564f87ee1f86c8a074fb","after":"e9fef77272c86d88cf77b6fd04b0475d00fac641","ref":"refs/heads/master","pushedAt":"2023-04-08T13:45:29.000Z","pushType":"push","commitsCount":3,"pusher":{"login":"ianparkinson","name":null,"path":"/ianparkinson","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2920669?s=80&v=4"},"commit":{"message":"Fix examples in readme","shortMessageHtmlLink":"Fix examples in readme"}},{"before":"60f62930643e168380773eeb40d66a007a26fe12","after":"e9fef77272c86d88cf77b6fd04b0475d00fac641","ref":"refs/heads/docs-toc","pushedAt":"2023-04-08T13:45:15.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"ianparkinson","name":null,"path":"/ianparkinson","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2920669?s=80&v=4"},"commit":{"message":"Fix examples in readme","shortMessageHtmlLink":"Fix examples in readme"}},{"before":null,"after":"60f62930643e168380773eeb40d66a007a26fe12","ref":"refs/heads/docs-toc","pushedAt":"2023-04-08T13:43:48.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"ianparkinson","name":null,"path":"/ianparkinson","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2920669?s=80&v=4"},"commit":{"message":"Add TOC","shortMessageHtmlLink":"Add TOC"}},{"before":null,"after":"ce70985ff8e828a45758b15675f70c1a51d9d104","ref":"refs/heads/docs","pushedAt":"2023-04-08T13:37:12.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"ianparkinson","name":null,"path":"/ianparkinson","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2920669?s=80&v=4"},"commit":{"message":"Lots more usage information in README.md","shortMessageHtmlLink":"Lots more usage information in README.md"}},{"before":"69718bf6bd0b7450307e10292e07eae32bbbfcff","after":null,"ref":"refs/heads/pipeBroken","pushedAt":"2023-04-08T13:02:16.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"ianparkinson","name":null,"path":"/ianparkinson","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2920669?s=80&v=4"}},{"before":"925e9a8e72d5709fea8e32c8ddc916da9e96b374","after":"0b0799ee7162d0cb1a39564f87ee1f86c8a074fb","ref":"refs/heads/master","pushedAt":"2023-04-08T11:33:23.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"ianparkinson","name":null,"path":"/ianparkinson","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2920669?s=80&v=4"},"commit":{"message":"Combine partial events using the `last` flag supplied to WebSocketListener\n\n...instead of passing data through a PipedWriter/PipedReader pair and parsing it using GSON's streaming mode.\n\nA significant simplification to Helog's internal architecture.\n\nWith this change, `--raw` output writes each JSON object on a new line.\n\nAlso, Helog will now tolerate malformed JSON - it will write an error message and the malformed payload to stderr, and then continue.\n\nFixes #1, as Helog now tolerates the WebSocket event thread changing, but it's possible that Helog will appear to hang in the (currently unknown) situation that causes #1.","shortMessageHtmlLink":"Combine partial events using the last flag supplied to WebSocketLis…"}},{"before":"0b0799ee7162d0cb1a39564f87ee1f86c8a074fb","after":null,"ref":"refs/heads/simplify","pushedAt":"2023-04-08T11:33:14.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"ianparkinson","name":null,"path":"/ianparkinson","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2920669?s=80&v=4"}},{"before":null,"after":"0b0799ee7162d0cb1a39564f87ee1f86c8a074fb","ref":"refs/heads/simplify","pushedAt":"2023-04-02T20:33:37.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"ianparkinson","name":null,"path":"/ianparkinson","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2920669?s=80&v=4"},"commit":{"message":"Combine partial events using the `last` flag supplied to WebSocketListener\n\n...instead of passing data through a PipedWriter/PipedReader pair and parsing it using GSON's streaming mode.\n\nA significant simplification to Helog's internal architecture.\n\nWith this change, `--raw` output writes each JSON object on a new line.\n\nAlso, Helog will now tolerate malformed JSON - it will write an error message and the malformed payload to stderr, and then continue.\n\nFixes #1, as Helog now tolerates the WebSocket event thread changing, but it's possible that Helog will appear to hang in the (currently unknown) situation that causes #1.","shortMessageHtmlLink":"Combine partial events using the last flag supplied to WebSocketLis…"}},{"before":"5a037a4d42e3247952207cd8aaa113c2722b2d9e","after":"69718bf6bd0b7450307e10292e07eae32bbbfcff","ref":"refs/heads/pipeBroken","pushedAt":"2023-03-12T20:14:34.953Z","pushType":"push","commitsCount":1,"pusher":{"login":"ianparkinson","name":null,"path":"/ianparkinson","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2920669?s=80&v=4"},"commit":{"message":"Thread-safe pipe.\n\nUsed to ferry text from the WebSocket listener to a Reader passed to GSON. Unlike PipedReader/PipedWriter, this implementation tolerates the death of the thread used by WebSocket.\n\nFixes #1.","shortMessageHtmlLink":"Thread-safe pipe."}},{"before":"49574c852c1135ddf98e5b68ee352f800f4ca4a1","after":"5a037a4d42e3247952207cd8aaa113c2722b2d9e","ref":"refs/heads/pipeBroken","pushedAt":"2023-03-11T19:40:59.944Z","pushType":"push","commitsCount":1,"pusher":{"login":"ianparkinson","name":null,"path":"/ianparkinson","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2920669?s=80&v=4"},"commit":{"message":"No need to wrap JsonSyntaxException in RuntimeException - it is already unchecked.","shortMessageHtmlLink":"No need to wrap JsonSyntaxException in RuntimeException - it is alrea…"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"djE6ks8AAAADGW2dEAA","startCursor":null,"endCursor":null}},"title":"Activity · ianparkinson/helog"}