diff --git a/content/posts/server-side-analytics-with-caddyserver-and-goaccess.md b/content/posts/server-side-analytics-with-caddyserver-and-goaccess.md index abf3f7d..0d6b690 100644 --- a/content/posts/server-side-analytics-with-caddyserver-and-goaccess.md +++ b/content/posts/server-side-analytics-with-caddyserver-and-goaccess.md @@ -20,7 +20,7 @@ Goaccess is an **open-source**, **real-time** web log analyzer. In other words, ## The setup -To create a compelling analytics experience, we'll need to use Goaccess' `--real-time-html` option, that creates an HTML report, and an accompanying `WebSocket` server that will dispatch a request to update the page data every time goaccess parses updated logs. When we're done, the result will look similar to [stats.msfjarvis.dev](https://stats.msfjarvis.dev), which shows statistics for my blog. Here's a peek at Goaccess' terminal visualizer, to get an idea about the datasets you can expect from the web version. +To create a compelling analytics experience, we'll need to use Goaccess' `--real-time-html` option, that creates an HTML report, and an accompanying `WebSocket` server that will dispatch a request to update the page data every time goaccess parses updated logs. Here's a peek at Goaccess' terminal visualizer, to get an idea about the datasets you can expect from the web version. ![Goaccess in the terminal](/uploads/goaccess_terminal.webp) @@ -28,7 +28,7 @@ Goaccess supports most common webserver log formats, and [some more](https://goa ```bash goaccess --log-format=VCOMMON \ - --ws-url=wss://stats.msfjarvis.dev/ws \ + --ws-url=wss://stats.example.com/ws \ --output=${STATS_DIR}/index.html \ --log-file=/etc/logs/requests.log \ --no-query-string \ @@ -49,11 +49,11 @@ goaccess --log-format=VCOMMON \ The final step in this process is to expose the local WebSocket server to the `/ws` endpoint of your domain to allow real-time updates to work. Here's how I do it in Caddy. ```bash -https://stats.msfjarvis.dev/ws { +https://stats.example.com/ws { proxy / localhost:7890 { websocket } } ``` -And that's it! Your analytics page should be up at your specified URL, updating on every new request and visitor. \ No newline at end of file +And that's it! Your analytics page should be up at your specified URL, updating on every new request and visitor. diff --git a/content/posts/tools-for-effective-rust-development.md b/content/posts/tools-for-effective-rust-development.md index 5b00341..086b48d 100644 --- a/content/posts/tools-for-effective-rust-development.md +++ b/content/posts/tools-for-effective-rust-development.md @@ -21,7 +21,7 @@ I personally find `cargo-edit` useful in projects with a lot of dependencies as ## cargo-clippy -[cargo-clippy] is an advanced linter for Rust that brings together **331** ([at the time of writing](https://rust-lang.github.io/rust-clippy/list/index.html)) different lints in one package that's built and maintained by the Rust team. +[cargo-clippy] is an advanced linter for Rust that brings together **331** ([at the time of writing](https://rust-lang.github.io/rust-clippy/stable/index.html)) different lints in one package that's built and maintained by the Rust team. I've found it to be a great help alongside the official documentation and ["the book"](https://doc.rust-lang.org/book/) as a way of writing cleaner and more efficient Rust code. As a beginner Rustacean, I find it very helpful in breaking away from my patterns from other languages and using more "rust-y" constructs and expressions in my code. diff --git a/content/posts/why-upgrade-android.md b/content/posts/why-upgrade-android.md index b5eabc6..824d3d2 100644 --- a/content/posts/why-upgrade-android.md +++ b/content/posts/why-upgrade-android.md @@ -100,27 +100,27 @@ Apps no longer have [silent access to screen contents](https://developer.android ### Storage changes -- Apps targeting Android 11 are [no longer allowed to opt out of scoped storage](https://developer.android.com/preview/privacy/storage#scoped-storage). +- Apps targeting Android 11 are [no longer allowed to opt out of scoped storage](https://developer.android.com/about/versions/11/privacy/storage#scoped-storage). -- All encompassing access to a large set of directories and files is [completely disabled](https://developer.android.com/preview/privacy/storage#file-directory-restrictions), including the root of the internal storage, the `Download` folder, and the data and obb subdirectories of the `Android` folder. +- All encompassing access to a large set of directories and files is [completely disabled](https://developer.android.com/about/versions/11/privacy/storage#file-directory-restrictions), including the root of the internal storage, the `Download` folder, and the data and obb subdirectories of the `Android` folder. ### Permission changes -- Location, microphone and camera related permissions can now [be granted on a one-off basis](https://developer.android.com/preview/privacy/permissions#one-time), meaning they'll automatically get revoked when the app process exits. +- Location, microphone and camera related permissions can now [be granted on a one-off basis](https://developer.android.com/about/versions/11/privacy/permissions#one-time), meaning they'll automatically get revoked when the app process exits. -- Apps that are not used for a few months will [have their permissions automatically revoked](https://developer.android.com/preview/privacy/permissions#auto-reset). +- Apps that are not used for a few months will [have their permissions automatically revoked](https://developer.android.com/about/versions/11/privacy/permissions#auto-reset). -- A new `READ_PHONE_NUMBERS` permission [has been added](https://developer.android.com/preview/privacy/permissions#phone-numbers) to call certain APIs that expose phone numbers. +- A new `READ_PHONE_NUMBERS` permission [has been added](https://developer.android.com/about/versions/11/privacy/permissions#phone-numbers) to call certain APIs that expose phone numbers. ### Location changes -- [One time access](https://developer.android.com/preview/privacy/location#one-time-access) is now an option for location, allowing users to not grant persistent access when they don't wish to. +- [One time access](https://developer.android.com/about/versions/11/privacy/location#one-time-access) is now an option for location, allowing users to not grant persistent access when they don't wish to. -- Background location needs to [be requested separately now](https://developer.android.com/preview/privacy/location#background-location) and asking for it together with foreground location will throw an exception. +- Background location needs to [be requested separately now](https://developer.android.com/about/versions/11/privacy/location#background-location) and asking for it together with foreground location will throw an exception. ### Data access auditing -To allow apps to audit their own usage of user data, [a new callback is provided](https://developer.android.com/preview/privacy/data-access-auditing#log-access). Apps can implement it and then log all accesses to see if there's any unexpected data use that needs to be resolved. +To allow apps to audit their own usage of user data, [a new callback is provided](https://developer.android.com/about/versions/11/privacy/data-access-auditing#log-access). Apps can implement it and then log all accesses to see if there's any unexpected data use that needs to be resolved. ### Redacted MAC addresses