41554 blogs · [ { "id": "01a087a0-00d6-71c5-9e55-7eb0a49ae4e4", "title": "Getting OpenTelemetry Logging working in Python", "url": "https://markandruth.co.uk/2025/05/30/getting-opentelemetry-logging-working-in-python?utm_source=rss&utm_medium=rss&utm_campaign=getting-opentelemetry-logging-working-in-python", "published_at": "2025-05-30T08:26:18+00:00" }, { "id": "01a087a0-00d6-71c5-9e55-7eb0a514d23d", "title": "Running musescore from within a docker container", "url": "https://markandruth.co.uk/2024/09/08/running-musescore-from-within-a-docker-container?utm_source=rss&utm_medium=rss&utm_campaign=running-musescore-from-within-a-docker-container", "published_at": "2024-09-08T21:01:32+00:00" }, { "id": "01a087a0-00d6-71c5-9e55-7eb0a55b7840", "title": "Adding a primary key to a partitioned table in postgres with zero downtime or locks", "url": "https://markandruth.co.uk/2023/11/06/adding-a-primary-key-to-a-partitioned-table-in-postgres-with-zero-downtime-or-locks?utm_source=rss&utm_medium=rss&utm_campaign=adding-a-primary-key-to-a-partitioned-table-in-postgres-with-zero-downtime-or-locks", "published_at": "2023-11-06T18:25:36+00:00" }, { "id": "01a087a0-00d6-71c5-9e55-7eb0a5ffddb1", "title": "Easily running unison on different Ubuntu versions", "url": "https://markandruth.co.uk/2023/11/04/easily-running-unison-on-different-ubuntu-versions?utm_source=rss&utm_medium=rss&utm_campaign=easily-running-unison-on-different-ubuntu-versions", "published_at": "2023-11-04T17:37:38+00:00" }, { "id": "01a087a0-00d6-71c5-9e55-7eb0a6b5d8e4", "title": "Easily dumping all AWS SSM details", "url": "https://markandruth.co.uk/2023/08/21/easily-dumping-all-aws-ssm-details?utm_source=rss&utm_medium=rss&utm_campaign=easily-dumping-all-aws-ssm-details", "published_at": "2023-08-21T11:37:22+00:00" }, { "id": "01a087a0-00d6-71c5-9e55-7eb0a7abd875", "title": "Using Postgres NOTIFY with placeholders", "url": "https://markandruth.co.uk/2022/12/20/using-postgres-notify-with-placeholders?utm_source=rss&utm_medium=rss&utm_campaign=using-postgres-notify-with-placeholders", "published_at": "2022-12-20T17:36:37+00:00" }, { "id": "01a087a0-00d6-71c5-9e55-7eb0a7c57d9d", "title": "Hacking ElasticSearch python client to work with AWS OpenSearch", "url": "https://markandruth.co.uk/2022/11/14/hacking-elasticsearch-python-client-to-work-with-aws-opensearch?utm_source=rss&utm_medium=rss&utm_campaign=hacking-elasticsearch-python-client-to-work-with-aws-opensearch", "published_at": "2022-11-14T11:09:56+00:00" }, { "id": "01a087a0-00d6-71c5-9e55-7eb0a8b4b095", "title": "Screen corruption on KDE with Ubuntu 20.04", "url": "https://markandruth.co.uk/2022/03/18/screen-corruption-on-kde-with-ubuntu-20-04?utm_source=rss&utm_medium=rss&utm_campaign=screen-corruption-on-kde-with-ubuntu-20-04", "published_at": "2022-03-18T17:34:30+00:00" }, { "id": "01a087a0-00d6-71c5-9e55-7eb0a975912f", "title": "Best wordle starter words", "url": "https://markandruth.co.uk/2022/01/28/best-wordle-starter-words?utm_source=rss&utm_medium=rss&utm_campaign=best-wordle-starter-words", "published_at": "2022-01-28T11:25:18+00:00" }, { "id": "01a087a0-00d6-71c5-9e55-7eb0a9788c1f", "title": "Simple mitigation for the new DNS cache poisoning attack", "url": "https://markandruth.co.uk/2020/11/13/simple-mitigation-for-the-new-dns-cache-poisoning-attack?utm_source=rss&utm_medium=rss&utm_campaign=simple-mitigation-for-the-new-dns-cache-poisoning-attack", "published_at": "2020-11-13T11:37:02+00:00" }, { "id": "01a0bb52-6df6-70a0-9148-3803909f90df", "title": "Running systemd inside a Centos 8 Docker container", "url": "https://markandruth.co.uk/2020/10/10/running-systemd-inside-a-centos-8-docker-container?utm_source=rss&utm_medium=rss&utm_campaign=running-systemd-inside-a-centos-8-docker-container", "published_at": "2020-10-10T08:24:58+00:00" }, { "id": "01a0bb52-6df6-70a0-9148-380390c5aca1", "title": "Complex network setup on Centos/Redhat 8 via Network Manager", "url": "https://markandruth.co.uk/2020/05/11/complex-network-setup-on-centos-redhat-8-via-network-manager?utm_source=rss&utm_medium=rss&utm_campaign=complex-network-setup-on-centos-redhat-8-via-network-manager", "published_at": "2020-05-11T13:45:25+00:00" }, { "id": "01a0bb52-6df6-70a0-9148-38039124aeb0", "title": "Ripping unfinalized DVDs from Linux", "url": "https://markandruth.co.uk/2019/09/30/ripping-unfinalized-dvds-from-linux?utm_source=rss&utm_medium=rss&utm_campaign=ripping-unfinalized-dvds-from-linux", "published_at": "2019-09-30T15:21:07+00:00" }, { "id": "01a0bb52-6df6-70a0-9148-3803915694d0", "title": "Extracting all PHP code from a file", "url": "https://markandruth.co.uk/2019/08/24/extracting-all-php-code-from-a-file?utm_source=rss&utm_medium=rss&utm_campaign=extracting-all-php-code-from-a-file", "published_at": "2019-08-24T09:30:44+00:00" }, { "id": "01a0bb52-6df6-70a0-9148-3803921c9b67", "title": "Implementing correct modal navigation with react-router", "url": "https://markandruth.co.uk/2019/08/12/implementing-correct-modal-navigation-with-react-router?utm_source=rss&utm_medium=rss&utm_campaign=implementing-correct-modal-navigation-with-react-router", "published_at": "2019-08-12T15:51:06+00:00" }, { "id": "01a0bb52-6df6-70a0-9148-380392e5bf55", "title": "Dumping all remote mysql queries to a server", "url": "https://markandruth.co.uk/2019/06/06/dumping-all-remote-mysql-queries-to-a-server?utm_source=rss&utm_medium=rss&utm_campaign=dumping-all-remote-mysql-queries-to-a-server", "published_at": "2019-06-06T10:36:09+00:00" }, { "id": "01a0bb52-6df6-70a0-9148-3803933ffaab", "title": "How to generate good-looking geographical heatmaps", "url": "https://markandruth.co.uk/2019/05/02/how-to-generate-good-looking-geographical-heatmaps?utm_source=rss&utm_medium=rss&utm_campaign=how-to-generate-good-looking-geographical-heatmaps", "published_at": "2019-05-02T14:45:45+00:00" }, { "id": "01a0bb52-6df6-70a0-9148-380393c5ed5e", "title": "The hardest task to do well in every frontend/backend system – paging", "url": "https://markandruth.co.uk/2019/04/15/the-hardest-task-to-do-well-in-every-frontend-backend-system-paging?utm_source=rss&utm_medium=rss&utm_campaign=the-hardest-task-to-do-well-in-every-frontend-backend-system-paging", "published_at": "2019-04-15T15:28:06+00:00" }, { "id": "01a0bb52-6df6-70a0-9148-380394a8dd72", "title": "Creating flexible highlight rules in Ace that change according to editor mode", "url": "https://markandruth.co.uk/2019/04/13/creating-flexible-highlight-rules-in-ace-that-change-according-to-editor-mode?utm_source=rss&utm_medium=rss&utm_campaign=creating-flexible-highlight-rules-in-ace-that-change-according-to-editor-mode", "published_at": "2019-04-13T13:13:25+00:00" }, { "id": "01a0bb52-6df6-70a0-9148-3803951e3252", "title": "Recovering from unmountable btrfs filesystem issues", "url": "https://markandruth.co.uk/2019/03/16/recovering-from-unmountable-btrfs-filesystem-issues?utm_source=rss&utm_medium=rss&utm_campaign=recovering-from-unmountable-btrfs-filesystem-issues", "published_at": "2019-03-16T10:15:43+00:00" }, { "id": "01a0bb59-d596-7281-ac34-763ec8f1b80f", "title": "Diagnosing faulty memory in Linux…", "url": "https://markandruth.co.uk/2019/03/08/diagnosing-faulty-memory-in-linux?utm_source=rss&utm_medium=rss&utm_campaign=diagnosing-faulty-memory-in-linux", "published_at": "2019-03-08T17:06:13+00:00" }, { "id": "01a0bb59-d596-7281-ac34-763ec998ac6a", "title": "ESP8266 minimal setup", "url": "https://markandruth.co.uk/2018/12/29/esp8266-minimal-setup?utm_source=rss&utm_medium=rss&utm_campaign=esp8266-minimal-setup", "published_at": "2018-12-29T11:34:40+00:00" }, { "id": "01a0bb59-d596-7281-ac34-763ec99eedbc", "title": "Whatsapp upgraded, crashes on start", "url": "https://markandruth.co.uk/2018/02/27/whatsapp-upgraded-crashes-on-start?utm_source=rss&utm_medium=rss&utm_campaign=whatsapp-upgraded-crashes-on-start", "published_at": "2018-02-27T12:21:49+00:00" }, { "id": "01a0bb59-d596-7281-ac34-763ec9a89f5f", "title": "Talk from my dads funeral", "url": "https://markandruth.co.uk/2017/12/03/talk-from-my-dads-funeral?utm_source=rss&utm_medium=rss&utm_campaign=talk-from-my-dads-funeral", "published_at": "2017-12-03T16:33:24+00:00" }, { "id": "01a0bb59-d596-7281-ac34-763ec9c94f80", "title": "Styled cross-platform number input (in Angular but applicable to any HTML/CSS app)", "url": "https://markandruth.co.uk/2017/11/02/styled-cross-platform-number-input-in-angular-but-applicable-to-any-htmlcss-app?utm_source=rss&utm_medium=rss&utm_campaign=styled-cross-platform-number-input-in-angular-but-applicable-to-any-htmlcss-app", "published_at": "2017-11-02T07:42:57+00:00" }, { "id": "01a0bb59-d596-7281-ac34-763ec9ded3c1", "title": "Transparently serving WebP images from Apache", "url": "https://markandruth.co.uk/2017/10/30/transparently-serving-webp-images-from-apache?utm_source=rss&utm_medium=rss&utm_campaign=transparently-serving-webp-images-from-apache", "published_at": "2017-10-30T10:24:19+00:00" }, { "id": "01a0bb59-d596-7281-ac34-763eca3b7025", "title": "Using wildcards in ssh configuration to create per-client setups", "url": "https://markandruth.co.uk/2017/10/26/using-wildcards-in-ssh-configuration-to-create-per-client-setups?utm_source=rss&utm_medium=rss&utm_campaign=using-wildcards-in-ssh-configuration-to-create-per-client-setups", "published_at": "2017-10-26T10:02:36+00:00" }, { "id": "01a0bb59-d596-7281-ac34-763ecaaab74b", "title": "Using Letsencrypt with Wowza Media Server", "url": "https://markandruth.co.uk/2017/10/23/using-letsencrypt-with-wowza-media-server?utm_source=rss&utm_medium=rss&utm_campaign=using-letsencrypt-with-wowza-media-server", "published_at": "2017-10-23T10:44:02+00:00" }, { "id": "01a0bb59-d596-7281-ac34-763ecb245285", "title": "Easily setup a secure FTP server with vsftpd and letsencrypt", "url": "https://markandruth.co.uk/2017/10/20/easily-setup-a-secure-ftp-server-with-vsftpd-and-letsencrypt?utm_source=rss&utm_medium=rss&utm_campaign=easily-setup-a-secure-ftp-server-with-vsftpd-and-letsencrypt", "published_at": "2017-10-20T10:21:24+00:00" }, { "id": "01a0bb59-d596-7281-ac34-763ecb40088d", "title": "Fixing Ubuntu massive internal microphone distortion", "url": "https://markandruth.co.uk/2017/10/18/fixing-ubuntu-16-04-massive-internal-microphone-distortion?utm_source=rss&utm_medium=rss&utm_campaign=fixing-ubuntu-16-04-massive-internal-microphone-distortion", "published_at": "2017-10-18T10:32:32+00:00" }, { "id": "01a0bb61-ec6a-7032-95f4-832ae727db4e", "title": "Awesome Angular 4 form validator routine", "url": "https://markandruth.co.uk/2017/10/16/awesome-angular-4-form-validator-routine?utm_source=rss&utm_medium=rss&utm_campaign=awesome-angular-4-form-validator-routine", "published_at": "2017-10-16T10:28:20+00:00" }, { "id": "01a0bb61-ec6a-7032-95f4-832ae72bef04", "title": "Fan/Light remote control teardown and documentation", "url": "https://markandruth.co.uk/2017/10/12/fanlight-remote-control-teardown-and-documentation?utm_source=rss&utm_medium=rss&utm_campaign=fanlight-remote-control-teardown-and-documentation", "published_at": "2017-10-12T10:08:19+00:00" }, { "id": "01a0bb61-ec6a-7032-95f4-832ae7c7d895", "title": "Uploading videos to YouTube with perl", "url": "https://markandruth.co.uk/2017/10/09/uploading-videos-to-youtube-with-perl?utm_source=rss&utm_medium=rss&utm_campaign=uploading-videos-to-youtube-with-perl", "published_at": "2017-10-09T09:57:12+00:00" }, { "id": "01a0bb61-ec6a-7032-95f4-832ae81c73f0", "title": "Element scrolling within Angular (1) pages", "url": "https://markandruth.co.uk/2017/10/06/element-scrolling-within-angular-1-pages?utm_source=rss&utm_medium=rss&utm_campaign=element-scrolling-within-angular-1-pages", "published_at": "2017-10-06T09:47:15+00:00" }, { "id": "01a0bb61-ec6a-7032-95f4-832ae8b33c79", "title": "Ionic 3 – Allowing back button action to be specified on a page-by-page basis", "url": "https://markandruth.co.uk/2017/10/03/ionic-3-allowing-back-button-action-to-be-specified-on-a-page-by-page-basis?utm_source=rss&utm_medium=rss&utm_campaign=ionic-3-allowing-back-button-action-to-be-specified-on-a-page-by-page-basis", "published_at": "2017-10-03T09:35:57+00:00" }, { "id": "01a0bb61-ec6a-7032-95f4-832ae911406c", "title": "Remove Windows Phone CSS in Ionic 2/3 to save space", "url": "https://markandruth.co.uk/2017/09/28/remove-windows-phone-css-in-ionic-23-to-save-space?utm_source=rss&utm_medium=rss&utm_campaign=remove-windows-phone-css-in-ionic-23-to-save-space", "published_at": "2017-09-28T10:35:08+00:00" }, { "id": "01a0bb61-ec6a-7032-95f4-832ae936baac", "title": "CKEditor Plugin Validation for Multiple Requirements", "url": "https://markandruth.co.uk/2017/09/25/ckeditor-plugin-validation-for-multiple-requirements?utm_source=rss&utm_medium=rss&utm_campaign=ckeditor-plugin-validation-for-multiple-requirements", "published_at": "2017-09-25T10:12:23+00:00" }, { "id": "01a0bb61-ec6a-7032-95f4-832ae9735874", "title": "Ionic 3 Page Overlay", "url": "https://markandruth.co.uk/2017/09/22/ionic-3-page-overlay?utm_source=rss&utm_medium=rss&utm_campaign=ionic-3-page-overlay", "published_at": "2017-09-22T12:52:07+00:00" }, { "id": "01a0bb61-ec6a-7032-95f4-832aea5c32ce", "title": "Successfully downloading big files from Dropbox via Linux command-line", "url": "https://markandruth.co.uk/2017/09/18/successfully-downloading-big-files-from-dropbox-via-linux-command-line?utm_source=rss&utm_medium=rss&utm_campaign=successfully-downloading-big-files-from-dropbox-via-linux-command-line", "published_at": "2017-09-18T10:06:40+00:00" }, { "id": "01a0bb61-ec6a-7032-95f4-832aead4881e", "title": "Apache configuration for WkWebView API service (CORS)", "url": "https://markandruth.co.uk/2017/09/16/apache-configuration-for-wkwebview-api-service-cors?utm_source=rss&utm_medium=rss&utm_campaign=apache-configuration-for-wkwebview-api-service-cors", "published_at": "2017-09-16T10:35:04+00:00" }, { "id": "01a0bb68-2468-718a-acb4-36b18a83d460", "title": "Using Ionic’s WKWebView Engine with standard cordova/phonegap projects", "url": "https://markandruth.co.uk/2017/09/15/using-ionics-wkwebview-engine-with-standard-cordovaphonegap-projects?utm_source=rss&utm_medium=rss&utm_campaign=using-ionics-wkwebview-engine-with-standard-cordovaphonegap-projects", "published_at": "2017-09-15T09:51:05+00:00" }, { "id": "01a0bb68-2468-718a-acb4-36b18b69f62b", "title": "Tracking down Lua JSON decoding issues", "url": "https://markandruth.co.uk/2017/09/13/tracking-down-lua-json-decoding-issues?utm_source=rss&utm_medium=rss&utm_campaign=tracking-down-lua-json-decoding-issues", "published_at": "2017-09-13T09:49:38+00:00" }, { "id": "01a0bb68-2468-718a-acb4-36b18c37c856", "title": "Angular 4 API service with automatic retries and Ionic 3 integration", "url": "https://markandruth.co.uk/2017/09/11/angular-4-api-service-with-automatic-retries-and-ionic-3-integration?utm_source=rss&utm_medium=rss&utm_campaign=angular-4-api-service-with-automatic-retries-and-ionic-3-integration", "published_at": "2017-09-11T09:34:01+00:00" }, { "id": "01a0bb68-2468-718a-acb4-36b18d20d005", "title": "Programming ESP8266 from the CHIP", "url": "https://markandruth.co.uk/2017/09/08/programming-esp8266-from-the-chip?utm_source=rss&utm_medium=rss&utm_campaign=programming-esp8266-from-the-chip", "published_at": "2017-09-08T07:32:16+00:00" }, { "id": "01a0bb68-2468-718a-acb4-36b18e19efe3", "title": "433MHz wireless on the C.H.I.P", "url": "https://markandruth.co.uk/2017/06/08/433mhz-wireless-on-the-c-h-i-p?utm_source=rss&utm_medium=rss&utm_campaign=433mhz-wireless-on-the-c-h-i-p", "published_at": "2017-06-08T15:41:16+00:00" }, { "id": "01a0bb68-2468-718a-acb4-36b18eb467cd", "title": "Percent signs in crontab", "url": "https://markandruth.co.uk/2017/05/15/percent-signs-in-crontab?utm_source=rss&utm_medium=rss&utm_campaign=percent-signs-in-crontab", "published_at": "2017-05-15T11:09:37+00:00" }, { "id": "01a0bb68-2468-718a-acb4-36b18f25a90a", "title": "Making a BTRFS read-only snapshot writable", "url": "https://markandruth.co.uk/2016/12/29/making-a-btrfs-read-only-snapshot-writable?utm_source=rss&utm_medium=rss&utm_campaign=making-a-btrfs-read-only-snapshot-writable", "published_at": "2016-12-29T10:02:09+00:00" }, { "id": "01a0bb68-2468-718a-acb4-36b18ff7fe48", "title": "Protecting an Open DNS Resolver", "url": "https://markandruth.co.uk/2016/12/22/protecting-an-open-dns-resolver?utm_source=rss&utm_medium=rss&utm_campaign=protecting-an-open-dns-resolver", "published_at": "2016-12-22T17:18:26+00:00" }, { "id": "01a0bb68-2468-718a-acb4-36b1901140bf", "title": "Easily extending Cordova’s WebView in your Android app", "url": "https://markandruth.co.uk/2016/12/21/easily-extending-cordovas-webview-in-your-android-app?utm_source=rss&utm_medium=rss&utm_campaign=easily-extending-cordovas-webview-in-your-android-app", "published_at": "2016-12-21T10:39:31+00:00" }, { "id": "01a0bb68-2468-718a-acb4-36b190b6c573", "title": "Prompt before opening an external link in AngularJS", "url": "https://markandruth.co.uk/2016/12/19/prompt-before-opening-an-external-link-in-angularjs?utm_source=rss&utm_medium=rss&utm_campaign=prompt-before-opening-an-external-link-in-angularjs", "published_at": "2016-12-19T10:39:30+00:00" }, { "id": "01a0bb6c-463d-710a-adb6-d00ac67a6ce5", "title": "Using ImageMagick to manipulate PNGs stably", "url": "https://markandruth.co.uk/2016/12/16/using-imagemagick-to-manipulate-pngs-stably?utm_source=rss&utm_medium=rss&utm_campaign=using-imagemagick-to-manipulate-pngs-stably", "published_at": "2016-12-16T10:34:28+00:00" }, { "id": "01a0bb6c-463d-710a-adb6-d00ac73c1424", "title": "Easily switch between KVM and VirtualBox virtual machines", "url": "https://markandruth.co.uk/2016/12/14/easily-switch-between-kvm-and-virtualbox-virtual-machines?utm_source=rss&utm_medium=rss&utm_campaign=easily-switch-between-kvm-and-virtualbox-virtual-machines", "published_at": "2016-12-14T10:27:44+00:00" }, { "id": "01a0bb6c-463d-710a-adb6-d00ac811f75c", "title": "KUbuntu double login screen", "url": "https://markandruth.co.uk/2016/12/12/kubuntu-double-login-screen?utm_source=rss&utm_medium=rss&utm_campaign=kubuntu-double-login-screen", "published_at": "2016-12-12T14:26:46+00:00" }, { "id": "01a0bb6c-463d-710a-adb6-d00ac840fa43", "title": "Testing the Performance of the Linux Firewall", "url": "https://markandruth.co.uk/2016/08/08/testing-the-performance-of-the-linux-firewall?utm_source=rss&utm_medium=rss&utm_campaign=testing-the-performance-of-the-linux-firewall", "published_at": "2016-08-08T18:36:14+00:00" }, { "id": "01a0bb6c-463d-710a-adb6-d00ac8c8b856", "title": "Linux Stateless Firewalling for High Performance", "url": "https://markandruth.co.uk/2016/07/14/linux-stateless-firewalling-for-high-performance?utm_source=rss&utm_medium=rss&utm_campaign=linux-stateless-firewalling-for-high-performance", "published_at": "2016-07-14T19:08:05+00:00" }, { "id": "01a0bb6c-463d-710a-adb6-d00ac956ac64", "title": "Manually changing ASUS wireless router firmware versions", "url": "https://markandruth.co.uk/2016/06/25/manually-changing-asus-wireless-router-firmware-versions?utm_source=rss&utm_medium=rss&utm_campaign=manually-changing-asus-wireless-router-firmware-versions", "published_at": "2016-06-25T11:16:35+00:00" }, { "id": "01a0bb6c-463d-710a-adb6-d00ac9d67bb3", "title": "Maximizing rsync throughput in 2 easy commands", "url": "https://markandruth.co.uk/2016/05/27/maximizing-rsync-throughput-in-2-easy-commands?utm_source=rss&utm_medium=rss&utm_campaign=maximizing-rsync-throughput-in-2-easy-commands", "published_at": "2016-05-27T10:05:10+00:00" }, { "id": "01a0bb6c-463d-710a-adb6-d00aca60186f", "title": "Running lots of postgres commands in parallel", "url": "https://markandruth.co.uk/2016/05/26/running-lots-of-postgres-commands-in-parallel?utm_source=rss&utm_medium=rss&utm_campaign=running-lots-of-postgres-commands-in-parallel", "published_at": "2016-05-26T10:59:06+00:00" }, { "id": "01a0bb6c-463d-710a-adb6-d00acaa877d3", "title": "Finding the amount of space wasted in postgres tables", "url": "https://markandruth.co.uk/2016/05/25/finding-the-amount-of-space-wasted-in-postgres-tables?utm_source=rss&utm_medium=rss&utm_campaign=finding-the-amount-of-space-wasted-in-postgres-tables", "published_at": "2016-05-25T15:43:11+00:00" }, { "id": "01a0bb6c-463d-710a-adb6-d00acb7d52ab", "title": "A note on the e-ikamet system for foreigners", "url": "https://markandruth.co.uk/2016/03/10/a-note-on-the-e-ikamet-system-for-foreigners?utm_source=rss&utm_medium=rss&utm_campaign=a-note-on-the-e-ikamet-system-for-foreigners", "published_at": "2016-03-10T12:46:10+00:00" }, { "id": "01a0bb70-35ed-7087-8f7c-d4959ef15227", "title": "row_to_json() equivalent for jsonb types", "url": "https://markandruth.co.uk/2016/03/06/row_to_json-equivalent-for-jsonb-types?utm_source=rss&utm_medium=rss&utm_campaign=row_to_json-equivalent-for-jsonb-types", "published_at": "2016-03-06T16:26:27+00:00" }, { "id": "01a0bb70-35ed-7087-8f7c-d4959f988590", "title": "How we improved database performance 1000% with just one command", "url": "https://markandruth.co.uk/2016/02/19/how-we-improved-database-performance-1000-with-just-one-command?utm_source=rss&utm_medium=rss&utm_campaign=how-we-improved-database-performance-1000-with-just-one-command", "published_at": "2016-02-19T10:22:24+00:00" }, { "id": "01a0bb70-35ed-7087-8f7c-d4959fd5aeb5", "title": "Getting value/count grouping in a single row with postgres", "url": "https://markandruth.co.uk/2016/02/09/getting-valuecount-grouping-in-a-single-row-with-postgres?utm_source=rss&utm_medium=rss&utm_campaign=getting-valuecount-grouping-in-a-single-row-with-postgres", "published_at": "2016-02-09T10:18:10+00:00" }, { "id": "01a0bb70-35ed-7087-8f7c-d495a0a12e4c", "title": "How we tweaked Postgres upsert performance to be 2-3* faster than MongoDB", "url": "https://markandruth.co.uk/2016/01/08/how-we-tweaked-postgres-upsert-performance-to-be-2-3-faster-than-mongodb?utm_source=rss&utm_medium=rss&utm_campaign=how-we-tweaked-postgres-upsert-performance-to-be-2-3-faster-than-mongodb", "published_at": "2016-01-08T14:50:19+00:00" }, { "id": "01a0bb70-35ed-7087-8f7c-d495a0a702aa", "title": "Scrolling back in kde console history with shift plus page-up via the number pad", "url": "https://markandruth.co.uk/2015/12/29/scrolling-back-in-kde-console-history-with-shift-plus-page-up-via-the-number-pad?utm_source=rss&utm_medium=rss&utm_campaign=scrolling-back-in-kde-console-history-with-shift-plus-page-up-via-the-number-pad", "published_at": "2015-12-29T19:36:26+00:00" }, { "id": "01a0bb70-35ed-7087-8f7c-d495a1685872", "title": "Debugging perl memory leaks", "url": "https://markandruth.co.uk/2015/12/17/debugging-perl-memory-leaks?utm_source=rss&utm_medium=rss&utm_campaign=debugging-perl-memory-leaks", "published_at": "2015-12-17T19:29:54+00:00" }, { "id": "01a0bb70-35ed-7087-8f7c-d495a1c29716", "title": "Hiding the list of sites on your server", "url": "https://markandruth.co.uk/2015/12/10/hiding-the-list-of-sites-on-your-server?utm_source=rss&utm_medium=rss&utm_campaign=hiding-the-list-of-sites-on-your-server", "published_at": "2015-12-10T10:13:03+00:00" }, { "id": "01a0bb70-35ed-7087-8f7c-d495a1d62d3c", "title": "A source of random perl crashes", "url": "https://markandruth.co.uk/2015/12/09/a-source-of-random-perl-crashes?utm_source=rss&utm_medium=rss&utm_campaign=a-source-of-random-perl-crashes", "published_at": "2015-12-09T13:37:15+00:00" }, { "id": "01a0bb70-35ed-7087-8f7c-d495a2881fbe", "title": "Mongo DB Pain", "url": "https://markandruth.co.uk/2015/12/08/mongo-db-pain?utm_source=rss&utm_medium=rss&utm_campaign=mongo-db-pain", "published_at": "2015-12-08T14:13:48+00:00" }, { "id": "01a0bb70-35ed-7087-8f7c-d495a339e687", "title": "Easy guide to free SSL with Lets Encrypt", "url": "https://markandruth.co.uk/2015/12/07/easy-guide-to-free-ssl-with-lets-encrypt?utm_source=rss&utm_medium=rss&utm_campaign=easy-guide-to-free-ssl-with-lets-encrypt", "published_at": "2015-12-07T10:47:38+00:00" }, { "id": "01a0bb73-b5de-72a4-a8e2-5506c07a1c50", "title": "Blacklisting domains using PowerDNS Recursor", "url": "https://markandruth.co.uk/2015/12/04/blacklisting-domains-using-powerdns-recursor?utm_source=rss&utm_medium=rss&utm_campaign=blacklisting-domains-using-powerdns-recursor", "published_at": "2015-12-04T21:29:45+00:00" }, { "id": "01a0bb73-b5de-72a4-a8e2-5506c0c1cfcf", "title": "Grep over HEAD of all branches in git", "url": "https://markandruth.co.uk/2015/08/16/grep-over-head-of-all-branches-in-git?utm_source=rss&utm_medium=rss&utm_campaign=grep-over-head-of-all-branches-in-git", "published_at": "2015-08-16T17:49:48+00:00" }, { "id": "01a0bb73-b5de-72a4-a8e2-5506c119a866", "title": "How (not) to use PostgreSQL functional indexes", "url": "https://markandruth.co.uk/2015/08/02/how-not-to-use-postgresql-functional-indexes?utm_source=rss&utm_medium=rss&utm_campaign=how-not-to-use-postgresql-functional-indexes", "published_at": "2015-08-02T19:53:04+00:00" }, { "id": "01a0bb73-b5de-72a4-a8e2-5506c149d6c7", "title": "Easily dumping sample data from any database", "url": "https://markandruth.co.uk/2015/07/31/easily-dumping-sample-data-from-any-database?utm_source=rss&utm_medium=rss&utm_campaign=easily-dumping-sample-data-from-any-database", "published_at": "2015-07-31T07:12:16+00:00" }, { "id": "01a0bb73-b5de-72a4-a8e2-5506c22748db", "title": "Perl’s killer feature – DBIx::Class::Schema::Loader", "url": "https://markandruth.co.uk/2015/07/11/perls-killer-feature-dbixclassschemaloader?utm_source=rss&utm_medium=rss&utm_campaign=perls-killer-feature-dbixclassschemaloader", "published_at": "2015-07-11T08:11:50+00:00" }, { "id": "01a0bb73-b5de-72a4-a8e2-5506c299925b", "title": "Angular Smart Table and drop-down select", "url": "https://markandruth.co.uk/2015/07/08/angular-smart-table-and-drop-down-select?utm_source=rss&utm_medium=rss&utm_campaign=angular-smart-table-and-drop-down-select", "published_at": "2015-07-08T08:47:40+00:00" }, { "id": "01a0bb73-b5de-72a4-a8e2-5506c2c9fe8c", "title": null, "url": "https://markandruth.co.uk/2015/07/08/select-element-problem-in-angularjs?utm_source=rss&utm_medium=rss&utm_campaign=select-element-problem-in-angularjs", "published_at": "2015-07-08T07:49:12+00:00" }, { "id": "01a0bb73-b5de-72a4-a8e2-5506c3297d6c", "title": "Switching to specific KDE activites using shortcut keys", "url": "https://markandruth.co.uk/2015/07/01/switching-to-specific-kde-activites-using-shortcut-keys?utm_source=rss&utm_medium=rss&utm_campaign=switching-to-specific-kde-activites-using-shortcut-keys", "published_at": "2015-07-01T10:13:58+00:00" }, { "id": "01a0bb73-b5de-72a4-a8e2-5506c357e30e", "title": "Recovering from strange mysql crash", "url": "https://markandruth.co.uk/2015/06/30/recovering-from-strange-mysql-crash?utm_source=rss&utm_medium=rss&utm_campaign=recovering-from-strange-mysql-crash", "published_at": "2015-06-30T10:36:25+00:00" }, { "id": "01a0bb73-b5de-72a4-a8e2-5506c406476e", "title": "Getting HP p1005 and associated LaserJet printers working with Raspberry Pi", "url": "https://markandruth.co.uk/2015/06/29/getting-hp-p1005-and-associated-laserjet-printers-working-with-raspberry-pi?utm_source=rss&utm_medium=rss&utm_campaign=getting-hp-p1005-and-associated-laserjet-printers-working-with-raspberry-pi", "published_at": "2015-06-29T10:04:05+00:00" }, { "id": "01a0bb76-f0a2-71c5-be68-ce5419034ac4", "title": "A Facebook Share component for AngularJS", "url": "https://markandruth.co.uk/2015/06/27/a-facebook-share-component-for-angularjs?utm_source=rss&utm_medium=rss&utm_campaign=a-facebook-share-component-for-angularjs", "published_at": "2015-06-27T09:33:32+00:00" }, { "id": "01a0bb76-f0a2-71c5-be68-ce5419961286", "title": "Convert emf files to png/jpg format on Linux", "url": "https://markandruth.co.uk/2015/06/26/convert-emf-files-to-pngjpg-format-on-linux?utm_source=rss&utm_medium=rss&utm_campaign=convert-emf-files-to-pngjpg-format-on-linux", "published_at": "2015-06-26T10:42:24+00:00" }, { "id": "01a0bb76-f0a2-71c5-be68-ce541a6c2d38", "title": "Drupal: Importing commerce products with Feeds Import 3", "url": "https://markandruth.co.uk/2015/06/25/drupal-importing-commerce-products-with-feeds-import-3?utm_source=rss&utm_medium=rss&utm_campaign=drupal-importing-commerce-products-with-feeds-import-3", "published_at": "2015-06-25T19:37:46+00:00" }, { "id": "01a0bb76-f0a2-71c5-be68-ce541adeeb17", "title": "Solved: Problems with connecting ath9k to 802.11n network", "url": "https://markandruth.co.uk/2015/06/04/solved-problems-with-connecting-ath9k-to-802-11n-network?utm_source=rss&utm_medium=rss&utm_campaign=solved-problems-with-connecting-ath9k-to-802-11n-network", "published_at": "2015-06-04T15:10:23+00:00" }, { "id": "01a0bb76-f0a2-71c5-be68-ce541b5ae00e", "title": "Background Slideshow with AngularJS and Bootstrap", "url": "https://markandruth.co.uk/2015/05/11/background-slideshow-with-angularjs-and-bootstrap?utm_source=rss&utm_medium=rss&utm_campaign=background-slideshow-with-angularjs-and-bootstrap", "published_at": "2015-05-11T10:07:56+00:00" }, { "id": "01a0bb76-f0a2-71c5-be68-ce541b8c7bcb", "title": "Multi-line commands with comments in bash", "url": "https://markandruth.co.uk/2015/05/07/multi-line-commands-with-comments-in-bash?utm_source=rss&utm_medium=rss&utm_campaign=multi-line-commands-with-comments-in-bash", "published_at": "2015-05-07T10:30:37+00:00" }, { "id": "01a0bb76-f0a2-71c5-be68-ce541c0cbbe2", "title": "Automatically creating videos from pictures, music and subtitles", "url": "https://markandruth.co.uk/2015/05/06/automatically-creating-videos-from-pictures-music-and-subtitles?utm_source=rss&utm_medium=rss&utm_campaign=automatically-creating-videos-from-pictures-music-and-subtitles", "published_at": "2015-05-06T12:29:58+00:00" }, { "id": "01a0bb76-f0a2-71c5-be68-ce541c4cb029", "title": "Easy ticks and crosses using FontAwesome", "url": "https://markandruth.co.uk/2015/04/28/easy-ticks-and-crosses-using-fontawesome?utm_source=rss&utm_medium=rss&utm_campaign=easy-ticks-and-crosses-using-fontawesome", "published_at": "2015-04-28T10:03:25+00:00" }, { "id": "01a0bb76-f0a2-71c5-be68-ce541ccae5c4", "title": "Per-component loading spinner for AngularJS", "url": "https://markandruth.co.uk/2015/04/27/per-component-loading-spinner-for-angularjs?utm_source=rss&utm_medium=rss&utm_campaign=per-component-loading-spinner-for-angularjs", "published_at": "2015-04-27T12:36:32+00:00" }, { "id": "01a0bb76-f0a2-71c5-be68-ce541d375c6e", "title": "rsync with remote filenames with spaces in from bash", "url": "https://markandruth.co.uk/2015/04/25/rsync-with-remote-filenames-with-spaces-in-from-bash?utm_source=rss&utm_medium=rss&utm_campaign=rsync-with-remote-filenames-with-spaces-in-from-bash", "published_at": "2015-04-25T11:26:09+00:00" }, { "id": "01a0bb7a-2ea6-73aa-9613-2089665f3d61", "title": "Stop Grunt minifying libraries all the time", "url": "https://markandruth.co.uk/2015/03/05/stop-grunt-minifying-libraries-all-the-time?utm_source=rss&utm_medium=rss&utm_campaign=stop-grunt-minifying-libraries-all-the-time", "published_at": "2015-03-05T08:29:46+00:00" }, { "id": "01a0bb7a-2ea6-73aa-9613-208967237fe8", "title": "Automounting swap on local SSD’s on Amazon EC2", "url": "https://markandruth.co.uk/2015/02/23/automounting-swap-on-local-ssds-on-amazon-ec2?utm_source=rss&utm_medium=rss&utm_campaign=automounting-swap-on-local-ssds-on-amazon-ec2", "published_at": "2015-02-23T10:22:38+00:00" }, { "id": "01a0bb7a-2ea6-73aa-9613-208967d37961", "title": "Better Database Search Functionality in 4 Simple Steps", "url": "https://markandruth.co.uk/2015/02/17/better-database-search-functionality-in-4-simple-steps?utm_source=rss&utm_medium=rss&utm_campaign=better-database-search-functionality-in-4-simple-steps", "published_at": "2015-02-17T09:52:21+00:00" }, { "id": "01a0bb7a-2ea6-73aa-9613-208968557325", "title": "How to use mitmproxy to capture https connections", "url": "https://markandruth.co.uk/2015/02/16/how-to-use-mitmproxy-to-capture-https-connections?utm_source=rss&utm_medium=rss&utm_campaign=how-to-use-mitmproxy-to-capture-https-connections", "published_at": "2015-02-16T10:10:45+00:00" }, { "id": "01a0bb7a-2ea6-73aa-9613-20896899dca8", "title": "Slow http requests with chrome webview", "url": "https://markandruth.co.uk/2015/02/14/slow-http-requests-with-chrome-webview?utm_source=rss&utm_medium=rss&utm_campaign=slow-http-requests-with-chrome-webview", "published_at": "2015-02-14T13:03:07+00:00" }, { "id": "01a0bb7a-2ea6-73aa-9613-208968db3a4a", "title": "Android launch intents from commandline", "url": "https://markandruth.co.uk/2015/02/13/android-launch-intents-from-commandline?utm_source=rss&utm_medium=rss&utm_campaign=android-launch-intents-from-commandline", "published_at": "2015-02-13T08:16:01+00:00" }, { "id": "01a0bb7a-2ea6-73aa-9613-208969acd93c", "title": "Etohum BuradanOraya", "url": "https://markandruth.co.uk/2015/02/06/etohum-buradanoraya?utm_source=rss&utm_medium=rss&utm_campaign=etohum-buradanoraya", "published_at": "2015-02-06T21:18:41+00:00" }, { "id": "01a0bb7a-2ea6-73aa-9613-208969fe8b51", "title": "Massive battery drain on Android 5 with gmail", "url": "https://markandruth.co.uk/2015/02/05/massive-battery-drain-on-android-5-with-gmail?utm_source=rss&utm_medium=rss&utm_campaign=massive-battery-drain-on-android-5-with-gmail", "published_at": "2015-02-05T12:56:59+00:00" }, { "id": "01a0bb7a-2ea6-73aa-9613-20896a225df9", "title": "Some observations of the GoogleBot", "url": "https://markandruth.co.uk/2015/02/04/some-observations-of-the-googlebot?utm_source=rss&utm_medium=rss&utm_campaign=some-observations-of-the-googlebot", "published_at": "2015-02-04T09:31:36+00:00" }, { "id": "01a0bb7a-2ea6-73aa-9613-20896a87b8af", "title": "Getting WordPress posting to Twitter with hashtags", "url": "https://markandruth.co.uk/2015/02/03/getting-wordpress-posting-to-twitter-with-hashtags?utm_source=rss&utm_medium=rss&utm_campaign=getting-wordpress-posting-to-twitter-with-hashtags", "published_at": "2015-02-03T08:11:09+00:00" } ] posts Claim your blog
Back to markandruth.co.uk
Blog · corpus.blog/blogs/markandruth.co.uk/posts

markandruth.co.uk

markandruth.co.uk

2025

2024

2023

2022

2020

2019

2018

2017

2016

2015