41554 blogs · [ { "id": "01a087d8-8c2b-70d7-832e-68dfc13a162d", "title": "How to Setup a Nagios Monitoring Server", "url": "https://ruan.dev/blog/2019/03/13/how-to-setup-a-nagios-monitoring-server", "published_at": "2019-03-13T21:53:42+00:00" }, { "id": "01a087d8-8c2b-70d7-832e-68dfc1a31ab7", "title": "Setup a Reverse Proxy on Nginx for your Backend Applications", "url": "https://ruan.dev/blog/2019/03/09/setup-a-reverse-proxy-on-nginx-for-your-backend-applications", "published_at": "2019-03-09T22:50:32+00:00" }, { "id": "01a087d8-8c2b-70d7-832e-68dfc1e192b3", "title": "Create Users Databases and Granting Access for Users on PostgreSQL", "url": "https://ruan.dev/blog/2019/03/06/create-users-databases-and-granting-access-for-users-on-postgresql", "published_at": "2019-03-06T21:28:25+00:00" }, { "id": "01a087d8-8c2b-70d7-832e-68dfc2386688", "title": "Setup a 3 Node Replicated Storage Volume with GlusterFS", "url": "https://ruan.dev/blog/2019/03/05/setup-a-3-node-replicated-storage-volume-with-glusterfs", "published_at": "2019-03-05T19:01:37+00:00" }, { "id": "01a087d8-8c2b-70d7-832e-68dfc2a4cec1", "title": "Container Persistent Storage for Docker Swarm using a GlusterFS Volume Plugin", "url": "https://ruan.dev/blog/2019/03/05/container-persistent-storage-for-docker-swarm-using-a-glusterfs-volume-plugin", "published_at": "2019-03-05T18:18:30+00:00" }, { "id": "01a087d8-8c2b-70d7-832e-68dfc2c33a5f", "title": "Setup a Distributed Storage Volume with GlusterFS", "url": "https://ruan.dev/blog/2019/03/04/setup-a-distributed-storage-volume-with-glusterfs", "published_at": "2019-03-04T20:32:53+00:00" }, { "id": "01a087d8-8c2b-70d7-832e-68dfc3a02c47", "title": "Use Swarm Managed Configs in Docker Swarm to store your Application Configs", "url": "https://ruan.dev/blog/2019/02/28/use-swarm-managed-configs-in-docker-swarm-to-store-your-application-configs", "published_at": "2019-02-28T14:48:28+00:00" }, { "id": "01a087d8-8c2b-70d7-832e-68dfc3e3398f", "title": "How to Validate Strings in Python with Regex", "url": "https://ruan.dev/blog/2019/02/27/how-to-validate-strings-in-python-with-regex", "published_at": "2019-02-27T11:47:53+00:00" }, { "id": "01a087d8-8c2b-70d7-832e-68dfc4378989", "title": "How to Tag all your AWS IAM Users with Python", "url": "https://ruan.dev/blog/2019/02/25/how-to-tag-all-your-aws-iam-users-with-python", "published_at": "2019-02-25T11:44:55+00:00" }, { "id": "01a087d8-8c2b-70d7-832e-68dfc4cdb0c2", "title": "Building Python Serverless Slack Apps on OpenFaas", "url": "https://ruan.dev/blog/2019/02/21/building-python-serverless-slack-apps-on-openfaas", "published_at": "2019-02-21T21:29:15+00:00" }, { "id": "01a087d8-8c2b-70d7-832e-68dfc4e56c08", "title": "Parallel Processing on AWS Lambda with Python using Multiprocessing", "url": "https://ruan.dev/blog/2019/02/19/parallel-processing-on-aws-lambda-with-python-using-multiprocessing", "published_at": "2019-02-19T14:39:47+00:00" }, { "id": "01a087d8-8c2b-70d7-832e-68dfc579754b", "title": "Sharing Global Variables in Python using Multiprocessing", "url": "https://ruan.dev/blog/2019/02/19/sharing-global-variables-in-python-using-multiprocessing", "published_at": "2019-02-19T14:02:43+00:00" }, { "id": "01a087d8-8c2b-70d7-832e-68dfc58dd1fc", "title": "Parallel Processing with Python and Multiprocessing using Queue", "url": "https://ruan.dev/blog/2019/02/19/parallel-processing-with-python-and-multiprocessing-using-queue", "published_at": "2019-02-19T13:05:47+00:00" }, { "id": "01a087d8-8c2b-70d7-832e-68dfc63e7567", "title": "Concourse Pipeline with Resources Tutorial", "url": "https://ruan.dev/blog/2019/02/14/concourse-pipeline-with-resources-tutorial", "published_at": "2019-02-14T20:58:10+00:00" }, { "id": "01a087d8-8c2b-70d7-832e-68dfc73711f3", "title": "How to Cache Data with Python Flask", "url": "https://ruan.dev/blog/2019/02/14/how-to-cache-data-with-python-flask", "published_at": "2019-02-14T11:37:30+00:00" }, { "id": "01a087d8-8c2b-70d7-832e-68dfc7b5a584", "title": "Concourse Tasks and Inputs Tutorial", "url": "https://ruan.dev/blog/2019/02/12/concourse-tasks-and-inputs-tutorial", "published_at": "2019-02-12T19:57:27+00:00" }, { "id": "01a087d8-8c2b-70d7-832e-68dfc7cb3873", "title": "Sysadmin Linux Troubleshooting Cheatsheet", "url": "https://ruan.dev/blog/2019/02/10/sysadmin-linux-troubleshooting-cheatsheet", "published_at": "2019-02-10T19:17:54+00:00" }, { "id": "01a087d8-8c2b-70d7-832e-68dfc8bd8ca6", "title": "Port Status Checker Script in C Language", "url": "https://ruan.dev/blog/2019/02/08/port-status-checker-script-in-c-language", "published_at": "2019-02-08T13:56:11+00:00" }, { "id": "01a087d8-8c2c-70b8-ba9d-725cfbb704ad", "title": "The AWS CLI Cheatsheet for Bash", "url": "https://ruan.dev/blog/2019/02/07/the-aws-cli-cheatsheet-for-bash", "published_at": "2019-02-07T08:24:12+00:00" }, { "id": "01a087d8-8c2c-70b8-ba9d-725cfbcffe5b", "title": "Python Multiprocessing Tutorial", "url": "https://ruan.dev/blog/2019/02/05/python-multiprocessing-tutorial", "published_at": "2019-02-05T15:05:49+00:00" }, { "id": "01a087d8-8c2c-70b8-ba9d-725cfbf4db95", "title": "Convert Float to Decimal Data Types for Boto3 DynamoDB using Python", "url": "https://ruan.dev/blog/2019/02/05/convert-float-to-decimal-data-types-for-boto3-dynamodb-using-python", "published_at": "2019-02-05T14:45:40+00:00" }, { "id": "01a087d8-8c2c-70b8-ba9d-725cfc004de6", "title": "Paginate through IAM Users on AWS using Python and Boto3", "url": "https://ruan.dev/blog/2019/01/29/paginate-through-iam-users-on-aws-using-python-and-boto3", "published_at": "2019-01-29T15:03:24+00:00" }, { "id": "01a087d8-8c2c-70b8-ba9d-725cfc8ac152", "title": "Setup a 3 Node Docker Swarm Cluster on Ubuntu 16.04", "url": "https://ruan.dev/blog/2019/01/10/setup-a-3-node-docker-swarm-cluster-on-ubuntu-16-dot-04", "published_at": "2019-01-10T14:52:07+00:00" }, { "id": "01a087d8-8c2c-70b8-ba9d-725cfcf510f5", "title": "Fix Mac High Sierra opendlrectoryd Too many corpses being created issue", "url": "https://ruan.dev/blog/2019/01/07/fix-mac-high-sierra-opendlrectoryd-too-many-corpses-being-created-issue", "published_at": "2019-01-07T11:57:56+00:00" }, { "id": "01a087d8-8c2c-70b8-ba9d-725cfd4e77d7", "title": "Tutorial on using Gitlab CI/CD Pipelines to Deploy your Python Flask Restful API with Postgres on Heroku", "url": "https://ruan.dev/blog/2019/01/05/tutorial-on-using-gitlab-cicd-pipelines-to-deploy-your-python-flask-restful-api-with-postgres-on-heroku", "published_at": "2019-01-05T15:27:31+00:00" }, { "id": "01a087d8-8c2c-70b8-ba9d-725cfdb21f8d", "title": "Setup a Gitlab Runner on your own Server to run your jobs that gets triggered from Gitlab CI", "url": "https://ruan.dev/blog/2018/12/20/setup-a-gitlab-runner-on-your-own-server-to-run-your-jobs-that-gets-triggered-from-gitlab-ci", "published_at": "2018-12-20T09:21:16+00:00" }, { "id": "01a087d8-8c2c-70b8-ba9d-725cfeb1b088", "title": "Local Dev Environment for Wordpress using Docker Compose", "url": "https://ruan.dev/blog/2018/12/19/local-dev-environment-for-wordpress-using-docker-compose", "published_at": "2018-12-19T13:33:44+00:00" }, { "id": "01a087d8-8c2c-70b8-ba9d-725cff82b5bb", "title": "Local Dev Environment for Mediawiki using Docker Compose", "url": "https://ruan.dev/blog/2018/12/19/local-dev-environment-for-mediawiki-using-docker-compose", "published_at": "2018-12-19T13:22:36+00:00" }, { "id": "01a087d8-8c2c-70b8-ba9d-725cff90a4e0", "title": "Setup a Basic CI Pipeline on Gitlab", "url": "https://ruan.dev/blog/2018/12/19/setup-a-basic-ci-pipeline-on-gitlab", "published_at": "2018-12-19T10:43:00+00:00" }, { "id": "01a087d8-8c2c-70b8-ba9d-725cffc2da25", "title": "Resizing Hetzner Cloud Block Storage Volumes on the Fly", "url": "https://ruan.dev/blog/2018/12/19/resizing-hetzner-cloud-block-storage-volumes-on-the-fly", "published_at": "2018-12-19T05:59:11+00:00" }, { "id": "01a087d8-8c2c-70b8-ba9d-725d00315afb", "title": "Creating a UI in Python Flask and Bootstrap for our Serverless URL Shortener", "url": "https://ruan.dev/blog/2018/12/18/creating-a-ui-in-python-flask-and-bootstrap-for-our-serverless-url-shortener", "published_at": "2018-12-18T14:35:53+00:00" }, { "id": "01a087d8-8c2c-70b8-ba9d-725d00f60bee", "title": "VULTR Cloud Servers Limited Signup Promotion", "url": "https://ruan.dev/blog/2018/12/12/vultr-cloud-servers-limited-singup-promotion", "published_at": "2018-12-12T06:00:32+00:00" }, { "id": "01a087d8-8c2c-70b8-ba9d-725d01ed0847", "title": "Python Flask Tutorial Series: Routing in Flask", "url": "https://ruan.dev/blog/2018/12/11/python-flask-tutorial-series-routing-in-flask-p3", "published_at": "2018-12-11T10:29:14+00:00" }, { "id": "01a087d8-8c2c-70b8-ba9d-725d02218ef3", "title": "Python Flask Tutorial Series: Setup a Python Virtual Environment", "url": "https://ruan.dev/blog/2018/12/09/python-flask-tutorial-series-setup-a-python-virtual-environment-p2", "published_at": "2018-12-09T22:19:24+00:00" }, { "id": "01a087d8-8c2c-70b8-ba9d-725d029a7084", "title": "How to Setup a Serverless URL Shortener with API Gateway Lambda and DynamoDB on AWS", "url": "https://ruan.dev/blog/2018/11/30/how-to-setup-a-serverless-url-shortener-with-api-gateway-lambda-and-dynamodb-on-aws", "published_at": "2018-11-30T07:51:24+00:00" }, { "id": "01a087d8-8c2c-70b8-ba9d-725d02d5f18d", "title": "Python Flask Tutorial Series: Create a Hello World App", "url": "https://ruan.dev/blog/2018/11/27/python-flask-tutorial-series-create-a-hello-world-app-p1", "published_at": "2018-11-27T13:36:20+00:00" }, { "id": "01a087d8-8c2c-70b8-ba9d-725d03c5843c", "title": "Introduction to Python Flask: Tutorial Series", "url": "https://ruan.dev/blog/2018/11/27/introduction-to-python-flask-tutorial-series", "published_at": "2018-11-27T13:28:33+00:00" }, { "id": "01a087d8-8c2c-70b8-ba9d-725d03c9736f", "title": "Setup a Relayhost with Postfix to Send Mail via Sendgrid", "url": "https://ruan.dev/blog/2018/11/23/setup-a-relayhost-with-postfix-to-send-mail-via-sendgrid", "published_at": "2018-11-23T12:40:49+00:00" }, { "id": "01a087d8-8c2c-70b8-ba9d-725d045a360f", "title": "Setup a Golang Environment on Ubuntu", "url": "https://ruan.dev/blog/2018/11/22/setup-a-golang-environment-on-ubuntu", "published_at": "2018-11-22T22:09:29+00:00" }, { "id": "01a087d8-8c2c-70b8-ba9d-725d04d9ac81", "title": "Golang: Building a Basic Web Server in Go", "url": "https://ruan.dev/blog/2018/11/21/golang-building-a-basic-web-server-in-go", "published_at": "2018-11-21T05:57:54+00:00" }, { "id": "01a087d8-8c2c-70b8-ba9d-725d052f0041", "title": "Create Read Only Users in MongoDB", "url": "https://ruan.dev/blog/2018/11/12/create-read-only-users-in-mongodb", "published_at": "2018-11-12T22:02:53+00:00" }, { "id": "01a087d8-8c2c-70b8-ba9d-725d055f0962", "title": "IAM Policy to Allow Team Wide and User Level Permissions on AWS Secrets Manager", "url": "https://ruan.dev/blog/2018/11/12/iam-policy-to-allow-team-wide-and-user-level-permissions-on-aws-secrets-manager", "published_at": "2018-11-12T21:32:24+00:00" }, { "id": "01a087d8-8c2c-70b8-ba9d-725d059abe46", "title": "Get Application Performance Metrics on Python Flask with Elastic APM on Kibana and Elasticsearch", "url": "https://ruan.dev/blog/2018/11/11/get-application-performance-metrics-on-python-flask-with-elastic-apm-on-kibana-and-elasticsearch", "published_at": "2018-11-11T18:09:18+00:00" }, { "id": "01a087d8-8c2c-70b8-ba9d-725d062b494f", "title": "Setup APM Server on Ubuntu for your Elastic Stack to get insights in your Application Performance Metrics", "url": "https://ruan.dev/blog/2018/11/11/setup-apm-server-on-ubuntu-for-your-elastic-stack-to-get-insights-in-your-application-performance-metrics", "published_at": "2018-11-11T17:31:43+00:00" }, { "id": "01a087d8-8c2c-70b8-ba9d-725d063b4de8", "title": "Benchmark Website Response Times with CURL", "url": "https://ruan.dev/blog/2018/10/31/benchmark-website-response-times-with-curl", "published_at": "2018-10-31T06:17:12+00:00" }, { "id": "01a087d8-8c2c-70b8-ba9d-725d06dfbb26", "title": "How to Bootstrap Nodes with Python using Ansible", "url": "https://ruan.dev/blog/2018/10/31/how-to-bootstrap-nodes-with-python-using-ansible", "published_at": "2018-10-31T05:48:15+00:00" }, { "id": "01a087d8-8c2c-70b8-ba9d-725d06e1db87", "title": "How to Install Packages on Remote Systems with Ansible", "url": "https://ruan.dev/blog/2018/10/31/how-to-install-packages-on-remote-systems-with-ansible", "published_at": "2018-10-31T05:28:18+00:00" }, { "id": "01a087d8-8c2c-70b8-ba9d-725d0797f0eb", "title": "Query 24 Hours worth of Data using BatchGet on Amazon DynamoDB using Scan and Filter without a GSI", "url": "https://ruan.dev/blog/2018/10/30/query-24-hours-worth-of-data-using-batchget-on-amazon-dynamodb-using-scan-and-filter-without-a-gsi", "published_at": "2018-10-30T18:53:43+00:00" }, { "id": "01a087d8-8c2c-70b8-ba9d-725d079f6005", "title": "Using Python Flask and JavaScript for Client Side Filtering through Returned Data", "url": "https://ruan.dev/blog/2018/10/24/using-python-flask-and-javascript-for-client-side-filtering-through-returned-data", "published_at": "2018-10-24T09:39:33+00:00" }, { "id": "01a087d8-8c2c-70b8-ba9d-725d07bc07bc", "title": "Building Ghost Version 2 Blog for the RaspberryPi", "url": "https://ruan.dev/blog/2018/10/23/building-ghost-version-2-blog-for-the-raspberrypi", "published_at": "2018-10-23T21:37:49+00:00" }, { "id": "01a087d8-8c2c-70b8-ba9d-725d085ff973", "title": "Build a Traefik Proxy Image for your Raspberry Pi on Docker Swarm", "url": "https://ruan.dev/blog/2018/10/23/build-a-traefik-proxy-image-for-your-raspberry-pi-on-docker-swarm", "published_at": "2018-10-23T21:31:02+00:00" }, { "id": "01a087d8-8c2c-70b8-ba9d-725d095ae669", "title": "Building a Raspberry Pi Nginx Image with Caching on Alpine for Docker Swarm", "url": "https://ruan.dev/blog/2018/10/23/building-a-raspberry-pi-nginx-image-with-caching-on-alpine-for-docker-swarm", "published_at": "2018-10-23T21:00:02+00:00" }, { "id": "01a087d8-8c2c-70b8-ba9d-725d0a57932b", "title": "Nginx Caching Performance for Static Content on Docker Swarm with RaspberryPi", "url": "https://ruan.dev/blog/2018/10/23/nginx-caching-performance-for-static-content-on-docker-swarm-with-raspberrypi", "published_at": "2018-10-23T20:41:41+00:00" }, { "id": "01a087d8-8c2c-70b8-ba9d-725d0b232716", "title": "Setting up a Docker Swarm Cluster on 3 RaspberryPi Nodes", "url": "https://ruan.dev/blog/2018/10/23/setting-up-a-docker-swarm-cluster-on-3-raspberrypi-nodes", "published_at": "2018-10-23T20:24:00+00:00" }, { "id": "01a087d8-8c2c-70b8-ba9d-725d0bc24f84", "title": "My PiStack Blog Proudly hosted on my RaspberryPi Swarm Cluster", "url": "https://ruan.dev/blog/2018/10/23/my-pistack-blog-proudly-hosted-on-my-raspberrypi-swarm-cluster", "published_at": "2018-10-23T20:11:19+00:00" }, { "id": "01a087d8-8c2c-70b8-ba9d-725d0cbd174e", "title": "Capturing 54 Million Passwords with a Docker SSH Honeypot", "url": "https://ruan.dev/blog/2018/10/11/capturing-54-million-passwords-with-a-docker-ssh-honeypot", "published_at": "2018-10-11T20:38:52+00:00" }, { "id": "01a087d8-8c2c-70b8-ba9d-725d0ceffd3c", "title": "Splitting Query String Parameters from a URL in Python", "url": "https://ruan.dev/blog/2018/10/04/splitting-query-string-parameters-from-a-url-in-python", "published_at": "2018-10-04T13:58:46+00:00" }, { "id": "01a087d8-8c2c-70b8-ba9d-725d0d23da34", "title": "Using the GeoIP Processor Plugin with Elasticsearch to enrich your location based data", "url": "https://ruan.dev/blog/2018/09/12/using-the-geoip-processor-plugin-with-elasticsearch-to-enrich-your-location-based-data", "published_at": "2018-09-12T14:14:30+00:00" }, { "id": "01a087d8-8c2c-70b8-ba9d-725d0db4beb1", "title": "Investigating High Request Latencies on Amazon DynamoDB", "url": "https://ruan.dev/blog/2018/09/05/investigating-high-request-latencies-on-amazon-dynamodb", "published_at": "2018-09-05T22:03:09+00:00" }, { "id": "01a087d8-8c2c-70b8-ba9d-725d0e3aa8a9", "title": "Give your Database a break and use Memcached to return frequently accessed data", "url": "https://ruan.dev/blog/2018/09/01/give-your-database-a-break-and-use-memcached-to-return-frequently-accessed-data", "published_at": "2018-09-01T21:05:10+00:00" }, { "id": "01a087d8-8c2c-70b8-ba9d-725d0e98d6c1", "title": "Dockerizing a Memcached Server for Docker on Alpine", "url": "https://ruan.dev/blog/2018/09/01/dockerizing-a-memcached-server-for-docker-on-alpine", "published_at": "2018-09-01T20:01:09+00:00" }, { "id": "01a087d8-8c2c-70b8-ba9d-725d0f88fd45", "title": "Review and Secure your Facebook Account", "url": "https://ruan.dev/blog/2018/08/29/review-and-secure-your-facebook-account", "published_at": "2018-08-29T19:03:10+00:00" }, { "id": "01a087d8-8c2c-70b8-ba9d-725d104e9c59", "title": "Distributing a Shared Secret amongst a Group of Participants using Shamirs Secret Sharing Scheme aka ssss", "url": "https://ruan.dev/blog/2018/08/27/distributing-a-shared-secret-amongst-a-group-of-participants-using-shamirs-secret-sharing-scheme-aka-ssss", "published_at": "2018-08-27T22:29:48+00:00" }, { "id": "01a087d8-8c2c-70b8-ba9d-725d1138beaf", "title": "Improving Performance from your Lambda Function from the use of Global Variables", "url": "https://ruan.dev/blog/2018/08/27/improving-performance-from-your-lambda-function-from-the-use-of-global-variables", "published_at": "2018-08-27T12:30:30+00:00" }, { "id": "01a087d8-8c2c-70b8-ba9d-725d1236fadc", "title": "Send Emails using Python and Sendgrid using SMTPlib", "url": "https://ruan.dev/blog/2018/08/21/send-emails-using-python-and-sendgrid-using-smtplib", "published_at": "2018-08-21T15:30:08+00:00" }, { "id": "01a087d8-8c2c-70b8-ba9d-725d12c3bdea", "title": "Using IAM Authentication with Amazon Elasticsearch Service", "url": "https://ruan.dev/blog/2018/08/20/using-iam-authentication-with-amazon-elasticsearch-service", "published_at": "2018-08-20T08:12:21+00:00" }, { "id": "01a087d8-8c2c-70b8-ba9d-725d132321ba", "title": "Get Blogpost Titles Links and Tags from a RSS Link using Python Feedparser", "url": "https://ruan.dev/blog/2018/08/15/get-blogpost-titles-links-and-tags-from-a-rss-link-using-python-feedparser", "published_at": "2018-08-15T22:14:54+00:00" }, { "id": "01a087d8-8c2c-70b8-ba9d-725d13e4f44c", "title": "Tutorial on DynamoDB using Bash and the AWS CLI Tools to Interact with a Music Dataset", "url": "https://ruan.dev/blog/2018/08/14/tutorial-on-dynamodb-using-bash-and-the-aws-cli-tools-to-interact-with-a-music-dataset", "published_at": "2018-08-14T20:33:22+00:00" }, { "id": "01a087d8-8c2c-70b8-ba9d-725d14ca049a", "title": "Ruby Tutorial Series Setup and Variables", "url": "https://ruan.dev/blog/2018/08/09/ruby-tutorial-series-setup-and-variables", "published_at": "2018-08-10T01:11:52+00:00" }, { "id": "01a087d8-8c2c-70b8-ba9d-725d15687cff", "title": "Ruby Programming Tutorial Series", "url": "https://ruan.dev/blog/2018/08/09/ruby-programming-tutorial-series", "published_at": "2018-08-10T00:59:34+00:00" }, { "id": "01a087d8-8c2c-70b8-ba9d-725d15809d84", "title": "Build a REST API war file for Payara with Java Springboot and Maven Part 1", "url": "https://ruan.dev/blog/2018/08/09/build-a-rest-api-war-file-for-payara-with-java-springboot-and-maven-part-1", "published_at": "2018-08-10T00:43:34+00:00" }, { "id": "01a087d8-8c2c-70b8-ba9d-725d15a6661a", "title": "Hello World Web App with Java Springboot and Maven", "url": "https://ruan.dev/blog/2018/08/03/hello-world-web-app-with-java-springboot-and-maven", "published_at": "2018-08-03T12:31:58+00:00" }, { "id": "01a087d8-8c2c-70b8-ba9d-725d15edefb3", "title": "Hello World Ruby on Rails App Tutorial using Mac", "url": "https://ruan.dev/blog/2018/07/20/hello-world-ruby-on-rails-app-tutorial-using-mac", "published_at": "2018-07-20T07:30:20+00:00" }, { "id": "01a087d8-8c2c-70b8-ba9d-725d16d95f8a", "title": "Capture Geo Location Data with Python Flask and PyGeoIP", "url": "https://ruan.dev/blog/2018/07/16/capture-geo-location-data-with-python-flask-and-pygeoip", "published_at": "2018-07-16T21:46:01+00:00" }, { "id": "01a087d8-8c2c-70b8-ba9d-725d17b0b0d7", "title": "Install Java Development Kit 10 on Ubuntu", "url": "https://ruan.dev/blog/2018/07/15/install-java-development-kit-10-on-ubuntu", "published_at": "2018-07-15T10:17:43+00:00" }, { "id": "01a087d8-8c2c-70b8-ba9d-725d18341b6e", "title": "Setup a LAMP Stack with Ansible using Ubuntu", "url": "https://ruan.dev/blog/2018/07/08/setup-a-lamp-stack-with-ansible-using-ubuntu", "published_at": "2018-07-08T21:15:15+00:00" }, { "id": "01a087d8-8c2c-70b8-ba9d-725d18ea3ee3", "title": "Getting Started with Ansible on Ubuntu", "url": "https://ruan.dev/blog/2018/07/08/getting-started-with-ansible-on-ubuntu", "published_at": "2018-07-08T19:56:06+00:00" }, { "id": "01a087d8-8c2c-70b8-ba9d-725d194cfa56", "title": "Salt and Hash Example using Python with Bcrypt on Alpine", "url": "https://ruan.dev/blog/2018/07/04/salt-and-hash-example-using-python-with-bcrypt-on-alpine", "published_at": "2018-07-04T09:05:00+00:00" }, { "id": "01a087d8-8c2c-70b8-ba9d-725d1a2ca469", "title": "Setup a PPTP VPN on Ubuntu", "url": "https://ruan.dev/blog/2018/06/27/setup-a-pptp-vpn-on-ubuntu", "published_at": "2018-06-27T08:18:51+00:00" }, { "id": "01a087d8-8c2c-70b8-ba9d-725d1b18fd5f", "title": "Deploy Docker Swarm using Ansible", "url": "https://ruan.dev/blog/2018/06/14/deploy-docker-swarm-using-ansible", "published_at": "2018-06-14T10:05:46+00:00" }, { "id": "01a087d8-8c2c-70b8-ba9d-725d1ba452e1", "title": "Setup a 3 Node Ceph Storage Cluster on Ubuntu 16", "url": "https://ruan.dev/blog/2018/06/13/setup-a-3-node-ceph-storage-cluster-on-ubuntu-16", "published_at": "2018-06-13T22:22:06+00:00" }, { "id": "01a087d8-8c2c-70b8-ba9d-725d1ca36348", "title": "Hello World Programs in Different Languages", "url": "https://ruan.dev/blog/2018/06/09/hello-world-programs-in-different-languages", "published_at": "2018-06-10T01:11:00+00:00" }, { "id": "01a087d8-8c2c-70b8-ba9d-725d1cceeacc", "title": "Setup a Peer to Peer VPN with VPNCloud on Ubuntu", "url": "https://ruan.dev/blog/2018/06/02/setup-a-peer-to-peer-vpn-with-vpncloud-on-ubuntu", "published_at": "2018-06-02T18:15:33+00:00" }, { "id": "01a087d8-8c2c-70b8-ba9d-725d1d77d115", "title": "Add a Authentication Header to your Python Flask App", "url": "https://ruan.dev/blog/2018/06/01/add-a-authentication-header-to-your-python-flask-app", "published_at": "2018-06-01T07:28:05+00:00" }, { "id": "01a087d8-8c2c-70b8-ba9d-725d1df378cc", "title": "Clearing Up Disk Space on Docker Swarm by Removing Unused Data with Prune", "url": "https://ruan.dev/blog/2018/06/01/clearing-up-disk-space-on-docker-swarm-by-removing-unused-data-with-prune", "published_at": "2018-06-01T06:19:21+00:00" }, { "id": "01a087d8-8c2c-70b8-ba9d-725d1ea6b660", "title": "SSH Tools that comes in handy when dealing with Multiple Servers", "url": "https://ruan.dev/blog/2018/05/31/ssh-tools-that-comes-in-handy-when-dealing-with-multiple-servers", "published_at": "2018-05-31T09:18:11+00:00" }, { "id": "01a087d8-8c2d-7214-9dc5-a0543f4af4ca", "title": "Wildcard SSL Certificate with Letsencrypt on Docker Swarm using Traefik", "url": "https://ruan.dev/blog/2018/05/28/wildcard-ssl-certificate-with-letsencrypt-on-docker-swarm-using-traefik", "published_at": "2018-05-28T21:36:17+00:00" }, { "id": "01a087d8-8c2d-7214-9dc5-a0543f74e19e", "title": "Web Forms with Python Flask and the WTForms Module with Bootstrap", "url": "https://ruan.dev/blog/2018/05/27/web-forms-with-python-flask-and-the-wtforms-module-with-bootstrap", "published_at": "2018-05-27T21:44:41+00:00" }, { "id": "01a087d8-8c2d-7214-9dc5-a0543faa1344", "title": "Generate Random Characters with Python using Random and String Modules", "url": "https://ruan.dev/blog/2018/05/23/generate-random-characters-with-python-using-random-and-string-modules", "published_at": "2018-05-23T10:29:06+00:00" }, { "id": "01a087d8-8c2d-7214-9dc5-a054408f99c6", "title": "Manage Scaleway Instances via their API like a Boss with their Command Line Tool scw", "url": "https://ruan.dev/blog/2018/05/09/manage-scaleway-instances-via-their-api-like-a-boss-with-their-command-line-tool-scw", "published_at": "2018-05-09T16:31:11+00:00" }, { "id": "01a087d8-8c2d-7214-9dc5-a0544189bcb9", "title": "Temporary IAM Credentials from EC2 Instance Metadata using Python", "url": "https://ruan.dev/blog/2018/05/09/temporary-iam-credentials-from-ec2-instance-metadata-using-python", "published_at": "2018-05-09T16:14:11+00:00" }, { "id": "01a087d8-8c2d-7214-9dc5-a054423ddc74", "title": "Use Python Requests to Interact with the iTunes API to search for Music Info", "url": "https://ruan.dev/blog/2018/05/08/use-python-requests-to-interact-with-the-itunes-api-to-search-for-music-info", "published_at": "2018-05-08T21:01:11+00:00" }, { "id": "01a087d8-8c2d-7214-9dc5-a05442b0d793", "title": "Setup the Elasticsearch Log Driver on Docker Swarm", "url": "https://ruan.dev/blog/2018/05/02/setup-the-elasticsearch-log-driver-on-docker-swarm", "published_at": "2018-05-02T19:10:30+00:00" }, { "id": "01a087d8-8c2d-7214-9dc5-a05442ec15f0", "title": "Forwarding The Docker Socket via a SSH Tunnel to Execute Docker Commands Locally", "url": "https://ruan.dev/blog/2018/04/30/forwarding-the-docker-socket-via-a-ssh-tunnel-to-execute-docker-commands-locally", "published_at": "2018-04-30T12:30:23+00:00" }, { "id": "01a087d8-8c2d-7214-9dc5-a05442f61345", "title": "Encryption and Decryption with the PyCrypto module using the AES Cipher in Python", "url": "https://ruan.dev/blog/2018/04/30/encryption-and-decryption-with-the-pycrypto-module-using-the-aes-cipher-in-python", "published_at": "2018-04-30T05:43:26+00:00" }, { "id": "01a087d8-8c2d-7214-9dc5-a05443d46e35", "title": "Running a 3 Node Elasticsearch Cluster with Docker Compose on your Laptop for testing", "url": "https://ruan.dev/blog/2018/04/29/running-a-3-node-elasticsearch-cluster-with-docker-compose-on-your-laptop-for-testing", "published_at": "2018-04-29T17:43:35+00:00" }, { "id": "01a087d8-8c2d-7214-9dc5-a054445418cd", "title": "Using the Bulk API with Elasticsearch", "url": "https://ruan.dev/blog/2018/04/29/using-the-bulk-api-with-elasticsearch", "published_at": "2018-04-29T17:32:21+00:00" }, { "id": "01a087d8-8c2d-7214-9dc5-a0544547a822", "title": "Encryption and Decryption with Simple Crypt using Python", "url": "https://ruan.dev/blog/2018/04/29/encryption-and-decryption-with-simple-crypt-using-python", "published_at": "2018-04-29T14:50:46+00:00" }, { "id": "01a087d8-8c2d-7214-9dc5-a05445e03355", "title": "Using Paramiko module in Python to execute Remote Bash Commands", "url": "https://ruan.dev/blog/2018/04/23/using-paramiko-module-in-python-to-execute-remote-bash-commands", "published_at": "2018-04-23T16:16:59+00:00" }, { "id": "01a087d8-8c2d-7214-9dc5-a0544665c4ef", "title": "Setup a SSH Tunnel with the sshtunnel module in Python", "url": "https://ruan.dev/blog/2018/04/23/setup-a-ssh-tunnel-with-the-sshtunnel-module-in-python", "published_at": "2018-04-23T15:56:46+00:00" } ] posts Claim your blog
Back to ruan.dev
Blog · corpus.blog/blogs/ruan.dev/posts

ruan.dev

ruan.dev

2019

2018