\n \n \n \n \n \n \n \n\n \n \n \n\n\n\n \n\n
\n \n
\n\n\n
\n
\n

Funkwhale

\n

Apr 26, 2019 | |

\n
\n \n \n
\n \n\n\n \n\n \n\n\n","content":"

Funkwhale is an open source grooveshark clone that anyone can self host. Since it offers a docker installation, spinning up an intance shouldn’t be too difficult, and the modest hardware requirements mean hosting should’nt cost much more than a couple dollars a month.

\n","relative_path":"_posts/2019-04-26-funkwhale.md","previous":{"path":"_posts/2015-10-3-jekyll-is-awesome.md","relative_path":"_posts/2015-10-3-jekyll-is-awesome.md","url":"/blog/jekyll-is-awesome/","id":"/blog/jekyll-is-awesome","collection":"posts","draft":false,"categories":["opinion pieces"],"layout":"post","title":"Jekyll is awesome","tags":["jekyll","blogging","static development"],"date":"2015-10-03 00:00:00 +0000","slug":"jekyll-is-awesome","ext":".md"},"url":"/blog/funkwhale/","id":"/blog/funkwhale","collection":"posts","excerpt":"Funkwhale is what Grooveshark should've been","draft":false,"categories":["opinion pieces"],"layout":"post","title":"Funkwhale","tags":["ideas","music"],"date":"2019-04-26 00:00:00 +0000","slug":"funkwhale","ext":".md"},"path":"_posts/2015-10-3-jekyll-is-awesome.md","output":"\n\n\n \n \n \n \n \n \n\n Jekyll is awesome\n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n\n\n\n \n\n
\n \n
\n\n\n
\n
\n

Jekyll is awesome

\n

Oct 3, 2015 | |

\n
\n \n
\n

Wordpress is everybody’s favourite blogging platform. It’s simple, and you can be up and running within minutes. There’s a few caveats, though: your site isn’t as customizable as a self-hosted installation of wordpress can be and that can be a little more complicated to set up. Then once it’s setup you’ll end up with a slow-as-mud website and no upward scalability. What if in the future you wanted to add a rails application to your website and move the blog to a subdomain? Can’t do that here.

\n\n

Simplicity is the name of the game. With Jekyll your content is the first thing you start creating, then you have Jekyll build your site and you’re left with a completely static website that you can host almost anywhere. The advantages to this are great: since the site is static and doesn’t require a database, hosting it is a cynch. You might even be able to host it for free! Since there’s no database there’s nothing a naughty user can mess with to damage your site. Finally since there’s no database calls to be made your site becomes incredibly fast. I think the pros far outweight the cons. If you don’t mind your site’s code being public then you can host it completely for free on github pages, too. Then it’s just a matter of pointing your domain there, setting up your cname file (a painless and simple setup) and you’re done!

\n\n

Jekyll isn’t for everything, though. It’s not going to replace Ruby on Rails and you’re not about to build a large scale web application with it. The best fit for a Jekyll site is, I think, most often the one that needs it most: users that want to build a website, but don’t want to pay an arm and a leg to just get a simple message out there. Even if programming isn’t your thing setting Jekyll up is a breeze, and I can help you out with that.

\n\n
\n
\n \n\n\n \n\n \n\n\n","content":"

Wordpress is everybody’s favourite blogging platform. It’s simple, and you can be up and running within minutes. There’s a few caveats, though: your site isn’t as customizable as a self-hosted installation of wordpress can be and that can be a little more complicated to set up. Then once it’s setup you’ll end up with a slow-as-mud website and no upward scalability. What if in the future you wanted to add a rails application to your website and move the blog to a subdomain? Can’t do that here.

\n\n

Simplicity is the name of the game. With Jekyll your content is the first thing you start creating, then you have Jekyll build your site and you’re left with a completely static website that you can host almost anywhere. The advantages to this are great: since the site is static and doesn’t require a database, hosting it is a cynch. You might even be able to host it for free! Since there’s no database there’s nothing a naughty user can mess with to damage your site. Finally since there’s no database calls to be made your site becomes incredibly fast. I think the pros far outweight the cons. If you don’t mind your site’s code being public then you can host it completely for free on github pages, too. Then it’s just a matter of pointing your domain there, setting up your cname file (a painless and simple setup) and you’re done!

\n\n

Jekyll isn’t for everything, though. It’s not going to replace Ruby on Rails and you’re not about to build a large scale web application with it. The best fit for a Jekyll site is, I think, most often the one that needs it most: users that want to build a website, but don’t want to pay an arm and a leg to just get a simple message out there. Even if programming isn’t your thing setting Jekyll up is a breeze, and I can help you out with that.

\n","relative_path":"_posts/2015-10-3-jekyll-is-awesome.md","previous":{"next":{"path":"_posts/2015-10-3-jekyll-is-awesome.md","relative_path":"_posts/2015-10-3-jekyll-is-awesome.md","url":"/blog/jekyll-is-awesome/","id":"/blog/jekyll-is-awesome","collection":"posts","draft":false,"categories":["opinion pieces"],"layout":"post","title":"Jekyll is awesome","tags":["jekyll","blogging","static development"],"date":"2015-10-03 00:00:00 +0000","slug":"jekyll-is-awesome","ext":".md"},"path":"_posts/2015-04-23-wordpress-on-heroku.md","output":"\n\n\n \n \n \n \n \n \n\n Wordpress on Heroku\n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n\n\n\n \n\n
\n \n
\n\n\n
\n
\n

Wordpress on Heroku

\n

Sep 23, 2015 | |

\n
\n \n
\n

Wordpress on Heroku is great, but difficult to setup. You will need to sign up for Amazon Web Services and Heroku. You’ll need to install the Heroku toolbelt on your machine using “wget -qO- https://toolbelt.heroku.com/install-ubuntu.sh | sh”. I’ll assume you’re running Linux for this, but I’ll see about a Windows tutorial as well later on. Setting up AWS is also not going to be covered right now in this tutorial.

\n
    \n\t
  1. The first thing to do is setup LAMP on your Linux machine.
  2. \n\t
  3. Next get the latest version of Wordpress. Download it and unzip the file into your \"/var/www/html/\" folder.
  4. \n\t
  5. Download Amazon Web Services and Amazon S3 and Cloudfront.
  6. \n\t
  7. Unzip both of Amazon Web Services and Amazon S3 and Cloudfront into the wp-content/plugins folder.
  8. \n\t
  9. You should have been given access keys for your AWS user. Add them to your wp-config.php file like this:\n \t

    // AWS Access Keys //
    \n \tdefine( 'AWS_ACCESS_KEY_ID', 'your_aws_access_key_id_here' );
    \n \tdefine( 'AWS_SECRET_ACCESS_KEY', 'your_aws_secret_access_key_here' );

    \n
  10. \n\t
  11. Go here and add your Unique Keys and Salts to your wp-config.php file like below:\n \t

    define('AUTH_KEY', 'put your unique phrase here');
    \n \tdefine('SECURE_AUTH_KEY', 'put your unique phrase here');
    \n \tdefine('LOGGED_IN_KEY', 'put your unique phrase here');
    \n \tdefine('NONCE_KEY', 'put your unique phrase here');
    \n \tdefine('AUTH_SALT', 'put your unique phrase here');
    \n \tdefine('SECURE_AUTH_SALT', 'put your unique phrase here');
    \n \tdefine('LOGGED_IN_SALT', 'put your unique phrase here');
    \n \tdefine('NONCE_SALT', 'put your unique phrase here');

    \n
  12. \n\t
  13. Go to localhost/wordpress/ and run through the installation using the MySQL credentials you setup while setting up your LAMP stack. Check here if you're not sure what to do.
  14. \n\t
  15. Go to your dashboard, and click on the plugins tab.
  16. \n\t
  17. Activate both the Amazon Web Services and Amazon S3 and Cloudfront plugins. There should now be another tab at the bottom that says \"AWS\". If your AWS User is setup correctly then they should both work immediately and allow you to connect to a bucket.
  18. \n\t
  19. Go into your wordpress folder and open a terminal session there.
  20. \n\t
  21. In your terminal type $ git init That'll initialize the whole thing as a git repository.
  22. \n\t
  23. In your terminal type git add . to get all the WP files ready to be committed. This will take a second or two.
  24. \n\t
  25. Now type git commit -m 'Add your own commit message here' Wait for the wall of text to stop running.
  26. \n\t
  27. Now type heroku create That'll create a new Heroku app from that directory.
  28. \n\t
  29. Type heroku addons:add cleardb If all goes well then you're almost ready to push your installation to Heroku.
  30. \n\t
  31. Copy the code below with the Unique Keys and Salts you got earlier:\n \t

    heroku config:set AUTH_KEY='put your unique phrase here'
    \n \tSECURE_AUTH_KEY='put your unique phrase here'
    \n \tLOGGED_IN_KEY='put your unique phrase here'
    \n \tNONCE_KEY='put your unique phrase here'
    \n \tAUTH_SALT='put your unique phrase here'
    \n \tSECURE_AUTH_SALT='put your unique phrase here'
    \n \tLOGGED_IN_SALT='put your unique phrase here'
    \n \tNONCE_SALT='put your unique phrase here'

    \n
  32. \n\t
  33. Again in the terminal type git checkout -b production You'll store your production environment variables here.
  34. \n\t
  35. Add this line to your wp-config.php file:\n\t

    $db = parse_url($_ENV[\"CLEARDB_DATABASE_URL\"]);

    \n
  36. \n\t
  37. Change your database information in wp-config.php to the code below:\n \t

    define('DB_NAME', trim($db[\"path\"],\"/\"));
    \n \tdefine('DB_USER', $db[\"user\"]);
    \n \tdefine('DB_PASSWORD', $db[\"pass\"]);
    \n \tdefine('DB_HOST', $db[\"host\"]);

    \n
  38. \n\t
  39. Change your Unthentication Unique Keys and Salts to the below:\n \t

    define('AUTH_KEY', getenv('AUTH_KEY'));
    \n \tdefine('SECURE_AUTH_KEY', getenv('SECURE_AUTH_KEY'));
    \n \tdefine('LOGGED_IN_KEY', getenv('LOGGED_IN_KEY'));
    \n \tdefine('NONCE_KEY', getenv('NONCE_KEY'));
    \n \tdefine('AUTH_SALT', getenv('AUTH_SALT'));
    \n \tdefine('SECURE_AUTH_SALT', getenv('SECURE_AUTH_SALT'));
    \n \tdefine('LOGGED_IN_SALT', getenv('LOGGED_IN_SALT'));
    \n \tdefine('NONCE_SALT', getenv('NONCE_SALT'));
    \n \tdefine('AWS_ACCESS_KEY_ID', getenv('AWS_ACCESS_KEY_ID'));
    \n \tdefine('AWS_SECRET_ACCESS_KEY', getenv('AWS_SECRET_ACCESS_KEY'));

    \n
  40. \n\t
  41. Now you're all set. Type git push heroku production:master and let it finish. When that's done you can go to \"http://yourwordpressapp.heroku.com\" and complete your remote installation.\n
      \n\t
    1. In order to check out your remote installation simply switch back to the master branch with git checkout master
    2. \n
    \n
  42. \n
\n

Updating Wordpress

\n\n

If you need to update Wordpress (mine updated twice while I was working on this) you’ll need to take a few steps:

\n
    \n\t
  1. In a terminal in the html folder run sudo chown -R www-data:www-data wordpress/ That'll let you update wordpress locally through the app.
  2. \n\t
  3. Make sure you're on the master branch and update WP via the dashboard.
  4. \n\t
  5. Once Wordpress is finished updating run sudo chown -R your_user:your_user wordpress/ Now you'll be able to edit the folder yourself again.
  6. \n\t
  7. Commit the changes made by the update.
  8. \n\t
  9. Switch to the production branch and merge with master by running git merge master This shouldn't create any conflicts (it didn't with me).
  10. \n\t
  11. The wp-config file should be untouched, but check it just in case. If it doesn't have your production settings, simply edit the file again, and commit changes.
  12. \n\t
  13. Now run git push heroku production:master again, wait and your remote installation will be updated.\n
      \n\t
    • Remember to switch back to the master branch to get your local installation working again.
    • \n
    \n
  14. \n
\n

Adding/updating themes and plugins

\n\n

Adding/updating themes and plugins is easy.

\n
    \n\t
  1. Download the theme or plugin.
  2. \n\t
  3. Make sure you're in your master branch. Unzip the theme/folder into it's respective folder.
  4. \n\t
  5. In your local installation active the theme or plugin.
  6. \n\t
  7. Commit the changes, then switch to production.
  8. \n\t
  9. Run git merge master This should not create any conflicts if the plugin/theme is new.\n
      \n\t
    • If you're updating a conflict might be caused. If so, then in the terminal type git reset --hard
    • \n\t
    • Delete the older plugin/theme and replace with the new one, then merge again.
    • \n
    \n
  10. \n\t
  11. The wp-config file should be untouched, but check it just in case. If it doesn't have your production settings, simply edit the file again, and commit changes.
  12. \n\t
  13. Now run git push heroku production:master again, wait and your remote installation should now have the plugin/theme.\n
      \n\t
    • Go to \"http://yourwordpressapp.heroku.com/wp-admin\" and Wordpress might ask you to update the database. Simply go ahead and everything should work fine.
    • \n
    \n
  14. \n
\n\n
\n
\n \n\n\n \n\n \n\n\n","content":"

Wordpress on Heroku is great, but difficult to setup. You will need to sign up for Amazon Web Services and Heroku. You’ll need to install the Heroku toolbelt on your machine using “wget -qO- https://toolbelt.heroku.com/install-ubuntu.sh | sh”. I’ll assume you’re running Linux for this, but I’ll see about a Windows tutorial as well later on. Setting up AWS is also not going to be covered right now in this tutorial.

\n
    \n\t
  1. The first thing to do is setup LAMP on your Linux machine.
  2. \n\t
  3. Next get the latest version of Wordpress. Download it and unzip the file into your \"/var/www/html/\" folder.
  4. \n\t
  5. Download Amazon Web Services and Amazon S3 and Cloudfront.
  6. \n\t
  7. Unzip both of Amazon Web Services and Amazon S3 and Cloudfront into the wp-content/plugins folder.
  8. \n\t
  9. You should have been given access keys for your AWS user. Add them to your wp-config.php file like this:\n \t

    // AWS Access Keys //
    \n \tdefine( 'AWS_ACCESS_KEY_ID', 'your_aws_access_key_id_here' );
    \n \tdefine( 'AWS_SECRET_ACCESS_KEY', 'your_aws_secret_access_key_here' );

    \n
  10. \n\t
  11. Go here and add your Unique Keys and Salts to your wp-config.php file like below:\n \t

    define('AUTH_KEY', 'put your unique phrase here');
    \n \tdefine('SECURE_AUTH_KEY', 'put your unique phrase here');
    \n \tdefine('LOGGED_IN_KEY', 'put your unique phrase here');
    \n \tdefine('NONCE_KEY', 'put your unique phrase here');
    \n \tdefine('AUTH_SALT', 'put your unique phrase here');
    \n \tdefine('SECURE_AUTH_SALT', 'put your unique phrase here');
    \n \tdefine('LOGGED_IN_SALT', 'put your unique phrase here');
    \n \tdefine('NONCE_SALT', 'put your unique phrase here');

    \n
  12. \n\t
  13. Go to localhost/wordpress/ and run through the installation using the MySQL credentials you setup while setting up your LAMP stack. Check here if you're not sure what to do.
  14. \n\t
  15. Go to your dashboard, and click on the plugins tab.
  16. \n\t
  17. Activate both the Amazon Web Services and Amazon S3 and Cloudfront plugins. There should now be another tab at the bottom that says \"AWS\". If your AWS User is setup correctly then they should both work immediately and allow you to connect to a bucket.
  18. \n\t
  19. Go into your wordpress folder and open a terminal session there.
  20. \n\t
  21. In your terminal type $ git init That'll initialize the whole thing as a git repository.
  22. \n\t
  23. In your terminal type git add . to get all the WP files ready to be committed. This will take a second or two.
  24. \n\t
  25. Now type git commit -m 'Add your own commit message here' Wait for the wall of text to stop running.
  26. \n\t
  27. Now type heroku create That'll create a new Heroku app from that directory.
  28. \n\t
  29. Type heroku addons:add cleardb If all goes well then you're almost ready to push your installation to Heroku.
  30. \n\t
  31. Copy the code below with the Unique Keys and Salts you got earlier:\n \t

    heroku config:set AUTH_KEY='put your unique phrase here'
    \n \tSECURE_AUTH_KEY='put your unique phrase here'
    \n \tLOGGED_IN_KEY='put your unique phrase here'
    \n \tNONCE_KEY='put your unique phrase here'
    \n \tAUTH_SALT='put your unique phrase here'
    \n \tSECURE_AUTH_SALT='put your unique phrase here'
    \n \tLOGGED_IN_SALT='put your unique phrase here'
    \n \tNONCE_SALT='put your unique phrase here'

    \n
  32. \n\t
  33. Again in the terminal type git checkout -b production You'll store your production environment variables here.
  34. \n\t
  35. Add this line to your wp-config.php file:\n\t

    $db = parse_url($_ENV[\"CLEARDB_DATABASE_URL\"]);

    \n
  36. \n\t
  37. Change your database information in wp-config.php to the code below:\n \t

    define('DB_NAME', trim($db[\"path\"],\"/\"));
    \n \tdefine('DB_USER', $db[\"user\"]);
    \n \tdefine('DB_PASSWORD', $db[\"pass\"]);
    \n \tdefine('DB_HOST', $db[\"host\"]);

    \n
  38. \n\t
  39. Change your Unthentication Unique Keys and Salts to the below:\n \t

    define('AUTH_KEY', getenv('AUTH_KEY'));
    \n \tdefine('SECURE_AUTH_KEY', getenv('SECURE_AUTH_KEY'));
    \n \tdefine('LOGGED_IN_KEY', getenv('LOGGED_IN_KEY'));
    \n \tdefine('NONCE_KEY', getenv('NONCE_KEY'));
    \n \tdefine('AUTH_SALT', getenv('AUTH_SALT'));
    \n \tdefine('SECURE_AUTH_SALT', getenv('SECURE_AUTH_SALT'));
    \n \tdefine('LOGGED_IN_SALT', getenv('LOGGED_IN_SALT'));
    \n \tdefine('NONCE_SALT', getenv('NONCE_SALT'));
    \n \tdefine('AWS_ACCESS_KEY_ID', getenv('AWS_ACCESS_KEY_ID'));
    \n \tdefine('AWS_SECRET_ACCESS_KEY', getenv('AWS_SECRET_ACCESS_KEY'));

    \n
  40. \n\t
  41. Now you're all set. Type git push heroku production:master and let it finish. When that's done you can go to \"http://yourwordpressapp.heroku.com\" and complete your remote installation.\n
      \n\t
    1. In order to check out your remote installation simply switch back to the master branch with git checkout master
    2. \n
    \n
  42. \n
\n

Updating Wordpress

\n\n

If you need to update Wordpress (mine updated twice while I was working on this) you’ll need to take a few steps:

\n
    \n\t
  1. In a terminal in the html folder run sudo chown -R www-data:www-data wordpress/ That'll let you update wordpress locally through the app.
  2. \n\t
  3. Make sure you're on the master branch and update WP via the dashboard.
  4. \n\t
  5. Once Wordpress is finished updating run sudo chown -R your_user:your_user wordpress/ Now you'll be able to edit the folder yourself again.
  6. \n\t
  7. Commit the changes made by the update.
  8. \n\t
  9. Switch to the production branch and merge with master by running git merge master This shouldn't create any conflicts (it didn't with me).
  10. \n\t
  11. The wp-config file should be untouched, but check it just in case. If it doesn't have your production settings, simply edit the file again, and commit changes.
  12. \n\t
  13. Now run git push heroku production:master again, wait and your remote installation will be updated.\n
      \n\t
    • Remember to switch back to the master branch to get your local installation working again.
    • \n
    \n
  14. \n
\n

Adding/updating themes and plugins

\n\n

Adding/updating themes and plugins is easy.

\n
    \n\t
  1. Download the theme or plugin.
  2. \n\t
  3. Make sure you're in your master branch. Unzip the theme/folder into it's respective folder.
  4. \n\t
  5. In your local installation active the theme or plugin.
  6. \n\t
  7. Commit the changes, then switch to production.
  8. \n\t
  9. Run git merge master This should not create any conflicts if the plugin/theme is new.\n
      \n\t
    • If you're updating a conflict might be caused. If so, then in the terminal type git reset --hard
    • \n\t
    • Delete the older plugin/theme and replace with the new one, then merge again.
    • \n
    \n
  10. \n\t
  11. The wp-config file should be untouched, but check it just in case. If it doesn't have your production settings, simply edit the file again, and commit changes.
  12. \n\t
  13. Now run git push heroku production:master again, wait and your remote installation should now have the plugin/theme.\n
      \n\t
    • Go to \"http://yourwordpressapp.heroku.com/wp-admin\" and Wordpress might ask you to update the database. Simply go ahead and everything should work fine.
    • \n
    \n
  14. \n
\n","relative_path":"_posts/2015-04-23-wordpress-on-heroku.md","previous":null,"url":"/blog/wordpress-on-heroku/","id":"/blog/wordpress-on-heroku","collection":"posts","excerpt":"Wordpress on Heroku is great, but difficult to setup...","draft":false,"categories":["tutorials"],"layout":"post","title":"Wordpress on Heroku","date":"2015-09-23 20:12:00 +0000","tags":["heroku","wordpress","wordpress on heroku","blogging"],"slug":"wordpress-on-heroku","ext":".md"},"url":"/blog/jekyll-is-awesome/","id":"/blog/jekyll-is-awesome","collection":"posts","excerpt":"Everything should be as simple as jekyll makes it","draft":false,"categories":["opinion pieces"],"layout":"post","title":"Jekyll is awesome","tags":["jekyll","blogging","static development"],"date":"2015-10-03 00:00:00 +0000","slug":"jekyll-is-awesome","ext":".md"},"path":"_posts/2015-04-23-wordpress-on-heroku.md","output":"\n\n\n \n \n \n \n \n \n\n Wordpress on Heroku\n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n\n\n\n \n\n
\n \n
\n\n\n
\n
\n

Wordpress on Heroku

\n

Sep 23, 2015 | |

\n
\n \n
\n

Wordpress on Heroku is great, but difficult to setup. You will need to sign up for Amazon Web Services and Heroku. You’ll need to install the Heroku toolbelt on your machine using “wget -qO- https://toolbelt.heroku.com/install-ubuntu.sh | sh”. I’ll assume you’re running Linux for this, but I’ll see about a Windows tutorial as well later on. Setting up AWS is also not going to be covered right now in this tutorial.

\n
    \n\t
  1. The first thing to do is setup LAMP on your Linux machine.
  2. \n\t
  3. Next get the latest version of Wordpress. Download it and unzip the file into your \"/var/www/html/\" folder.
  4. \n\t
  5. Download Amazon Web Services and Amazon S3 and Cloudfront.
  6. \n\t
  7. Unzip both of Amazon Web Services and Amazon S3 and Cloudfront into the wp-content/plugins folder.
  8. \n\t
  9. You should have been given access keys for your AWS user. Add them to your wp-config.php file like this:\n \t

    // AWS Access Keys //
    \n \tdefine( 'AWS_ACCESS_KEY_ID', 'your_aws_access_key_id_here' );
    \n \tdefine( 'AWS_SECRET_ACCESS_KEY', 'your_aws_secret_access_key_here' );

    \n
  10. \n\t
  11. Go here and add your Unique Keys and Salts to your wp-config.php file like below:\n \t

    define('AUTH_KEY', 'put your unique phrase here');
    \n \tdefine('SECURE_AUTH_KEY', 'put your unique phrase here');
    \n \tdefine('LOGGED_IN_KEY', 'put your unique phrase here');
    \n \tdefine('NONCE_KEY', 'put your unique phrase here');
    \n \tdefine('AUTH_SALT', 'put your unique phrase here');
    \n \tdefine('SECURE_AUTH_SALT', 'put your unique phrase here');
    \n \tdefine('LOGGED_IN_SALT', 'put your unique phrase here');
    \n \tdefine('NONCE_SALT', 'put your unique phrase here');

    \n
  12. \n\t
  13. Go to localhost/wordpress/ and run through the installation using the MySQL credentials you setup while setting up your LAMP stack. Check here if you're not sure what to do.
  14. \n\t
  15. Go to your dashboard, and click on the plugins tab.
  16. \n\t
  17. Activate both the Amazon Web Services and Amazon S3 and Cloudfront plugins. There should now be another tab at the bottom that says \"AWS\". If your AWS User is setup correctly then they should both work immediately and allow you to connect to a bucket.
  18. \n\t
  19. Go into your wordpress folder and open a terminal session there.
  20. \n\t
  21. In your terminal type $ git init That'll initialize the whole thing as a git repository.
  22. \n\t
  23. In your terminal type git add . to get all the WP files ready to be committed. This will take a second or two.
  24. \n\t
  25. Now type git commit -m 'Add your own commit message here' Wait for the wall of text to stop running.
  26. \n\t
  27. Now type heroku create That'll create a new Heroku app from that directory.
  28. \n\t
  29. Type heroku addons:add cleardb If all goes well then you're almost ready to push your installation to Heroku.
  30. \n\t
  31. Copy the code below with the Unique Keys and Salts you got earlier:\n \t

    heroku config:set AUTH_KEY='put your unique phrase here'
    \n \tSECURE_AUTH_KEY='put your unique phrase here'
    \n \tLOGGED_IN_KEY='put your unique phrase here'
    \n \tNONCE_KEY='put your unique phrase here'
    \n \tAUTH_SALT='put your unique phrase here'
    \n \tSECURE_AUTH_SALT='put your unique phrase here'
    \n \tLOGGED_IN_SALT='put your unique phrase here'
    \n \tNONCE_SALT='put your unique phrase here'

    \n
  32. \n\t
  33. Again in the terminal type git checkout -b production You'll store your production environment variables here.
  34. \n\t
  35. Add this line to your wp-config.php file:\n\t

    $db = parse_url($_ENV[\"CLEARDB_DATABASE_URL\"]);

    \n
  36. \n\t
  37. Change your database information in wp-config.php to the code below:\n \t

    define('DB_NAME', trim($db[\"path\"],\"/\"));
    \n \tdefine('DB_USER', $db[\"user\"]);
    \n \tdefine('DB_PASSWORD', $db[\"pass\"]);
    \n \tdefine('DB_HOST', $db[\"host\"]);

    \n
  38. \n\t
  39. Change your Unthentication Unique Keys and Salts to the below:\n \t

    define('AUTH_KEY', getenv('AUTH_KEY'));
    \n \tdefine('SECURE_AUTH_KEY', getenv('SECURE_AUTH_KEY'));
    \n \tdefine('LOGGED_IN_KEY', getenv('LOGGED_IN_KEY'));
    \n \tdefine('NONCE_KEY', getenv('NONCE_KEY'));
    \n \tdefine('AUTH_SALT', getenv('AUTH_SALT'));
    \n \tdefine('SECURE_AUTH_SALT', getenv('SECURE_AUTH_SALT'));
    \n \tdefine('LOGGED_IN_SALT', getenv('LOGGED_IN_SALT'));
    \n \tdefine('NONCE_SALT', getenv('NONCE_SALT'));
    \n \tdefine('AWS_ACCESS_KEY_ID', getenv('AWS_ACCESS_KEY_ID'));
    \n \tdefine('AWS_SECRET_ACCESS_KEY', getenv('AWS_SECRET_ACCESS_KEY'));

    \n
  40. \n\t
  41. Now you're all set. Type git push heroku production:master and let it finish. When that's done you can go to \"http://yourwordpressapp.heroku.com\" and complete your remote installation.\n
      \n\t
    1. In order to check out your remote installation simply switch back to the master branch with git checkout master
    2. \n
    \n
  42. \n
\n

Updating Wordpress

\n\n

If you need to update Wordpress (mine updated twice while I was working on this) you’ll need to take a few steps:

\n
    \n\t
  1. In a terminal in the html folder run sudo chown -R www-data:www-data wordpress/ That'll let you update wordpress locally through the app.
  2. \n\t
  3. Make sure you're on the master branch and update WP via the dashboard.
  4. \n\t
  5. Once Wordpress is finished updating run sudo chown -R your_user:your_user wordpress/ Now you'll be able to edit the folder yourself again.
  6. \n\t
  7. Commit the changes made by the update.
  8. \n\t
  9. Switch to the production branch and merge with master by running git merge master This shouldn't create any conflicts (it didn't with me).
  10. \n\t
  11. The wp-config file should be untouched, but check it just in case. If it doesn't have your production settings, simply edit the file again, and commit changes.
  12. \n\t
  13. Now run git push heroku production:master again, wait and your remote installation will be updated.\n
      \n\t
    • Remember to switch back to the master branch to get your local installation working again.
    • \n
    \n
  14. \n
\n

Adding/updating themes and plugins

\n\n

Adding/updating themes and plugins is easy.

\n
    \n\t
  1. Download the theme or plugin.
  2. \n\t
  3. Make sure you're in your master branch. Unzip the theme/folder into it's respective folder.
  4. \n\t
  5. In your local installation active the theme or plugin.
  6. \n\t
  7. Commit the changes, then switch to production.
  8. \n\t
  9. Run git merge master This should not create any conflicts if the plugin/theme is new.\n
      \n\t
    • If you're updating a conflict might be caused. If so, then in the terminal type git reset --hard
    • \n\t
    • Delete the older plugin/theme and replace with the new one, then merge again.
    • \n
    \n
  10. \n\t
  11. The wp-config file should be untouched, but check it just in case. If it doesn't have your production settings, simply edit the file again, and commit changes.
  12. \n\t
  13. Now run git push heroku production:master again, wait and your remote installation should now have the plugin/theme.\n
      \n\t
    • Go to \"http://yourwordpressapp.heroku.com/wp-admin\" and Wordpress might ask you to update the database. Simply go ahead and everything should work fine.
    • \n
    \n
  14. \n
\n\n
\n
\n \n\n\n \n\n \n\n\n","content":"

Wordpress on Heroku is great, but difficult to setup. You will need to sign up for Amazon Web Services and Heroku. You’ll need to install the Heroku toolbelt on your machine using “wget -qO- https://toolbelt.heroku.com/install-ubuntu.sh | sh”. I’ll assume you’re running Linux for this, but I’ll see about a Windows tutorial as well later on. Setting up AWS is also not going to be covered right now in this tutorial.

\n
    \n\t
  1. The first thing to do is setup LAMP on your Linux machine.
  2. \n\t
  3. Next get the latest version of Wordpress. Download it and unzip the file into your \"/var/www/html/\" folder.
  4. \n\t
  5. Download Amazon Web Services and Amazon S3 and Cloudfront.
  6. \n\t
  7. Unzip both of Amazon Web Services and Amazon S3 and Cloudfront into the wp-content/plugins folder.
  8. \n\t
  9. You should have been given access keys for your AWS user. Add them to your wp-config.php file like this:\n \t

    // AWS Access Keys //
    \n \tdefine( 'AWS_ACCESS_KEY_ID', 'your_aws_access_key_id_here' );
    \n \tdefine( 'AWS_SECRET_ACCESS_KEY', 'your_aws_secret_access_key_here' );

    \n
  10. \n\t
  11. Go here and add your Unique Keys and Salts to your wp-config.php file like below:\n \t

    define('AUTH_KEY', 'put your unique phrase here');
    \n \tdefine('SECURE_AUTH_KEY', 'put your unique phrase here');
    \n \tdefine('LOGGED_IN_KEY', 'put your unique phrase here');
    \n \tdefine('NONCE_KEY', 'put your unique phrase here');
    \n \tdefine('AUTH_SALT', 'put your unique phrase here');
    \n \tdefine('SECURE_AUTH_SALT', 'put your unique phrase here');
    \n \tdefine('LOGGED_IN_SALT', 'put your unique phrase here');
    \n \tdefine('NONCE_SALT', 'put your unique phrase here');

    \n
  12. \n\t
  13. Go to localhost/wordpress/ and run through the installation using the MySQL credentials you setup while setting up your LAMP stack. Check here if you're not sure what to do.
  14. \n\t
  15. Go to your dashboard, and click on the plugins tab.
  16. \n\t
  17. Activate both the Amazon Web Services and Amazon S3 and Cloudfront plugins. There should now be another tab at the bottom that says \"AWS\". If your AWS User is setup correctly then they should both work immediately and allow you to connect to a bucket.
  18. \n\t
  19. Go into your wordpress folder and open a terminal session there.
  20. \n\t
  21. In your terminal type $ git init That'll initialize the whole thing as a git repository.
  22. \n\t
  23. In your terminal type git add . to get all the WP files ready to be committed. This will take a second or two.
  24. \n\t
  25. Now type git commit -m 'Add your own commit message here' Wait for the wall of text to stop running.
  26. \n\t
  27. Now type heroku create That'll create a new Heroku app from that directory.
  28. \n\t
  29. Type heroku addons:add cleardb If all goes well then you're almost ready to push your installation to Heroku.
  30. \n\t
  31. Copy the code below with the Unique Keys and Salts you got earlier:\n \t

    heroku config:set AUTH_KEY='put your unique phrase here'
    \n \tSECURE_AUTH_KEY='put your unique phrase here'
    \n \tLOGGED_IN_KEY='put your unique phrase here'
    \n \tNONCE_KEY='put your unique phrase here'
    \n \tAUTH_SALT='put your unique phrase here'
    \n \tSECURE_AUTH_SALT='put your unique phrase here'
    \n \tLOGGED_IN_SALT='put your unique phrase here'
    \n \tNONCE_SALT='put your unique phrase here'

    \n
  32. \n\t
  33. Again in the terminal type git checkout -b production You'll store your production environment variables here.
  34. \n\t
  35. Add this line to your wp-config.php file:\n\t

    $db = parse_url($_ENV[\"CLEARDB_DATABASE_URL\"]);

    \n
  36. \n\t
  37. Change your database information in wp-config.php to the code below:\n \t

    define('DB_NAME', trim($db[\"path\"],\"/\"));
    \n \tdefine('DB_USER', $db[\"user\"]);
    \n \tdefine('DB_PASSWORD', $db[\"pass\"]);
    \n \tdefine('DB_HOST', $db[\"host\"]);

    \n
  38. \n\t
  39. Change your Unthentication Unique Keys and Salts to the below:\n \t

    define('AUTH_KEY', getenv('AUTH_KEY'));
    \n \tdefine('SECURE_AUTH_KEY', getenv('SECURE_AUTH_KEY'));
    \n \tdefine('LOGGED_IN_KEY', getenv('LOGGED_IN_KEY'));
    \n \tdefine('NONCE_KEY', getenv('NONCE_KEY'));
    \n \tdefine('AUTH_SALT', getenv('AUTH_SALT'));
    \n \tdefine('SECURE_AUTH_SALT', getenv('SECURE_AUTH_SALT'));
    \n \tdefine('LOGGED_IN_SALT', getenv('LOGGED_IN_SALT'));
    \n \tdefine('NONCE_SALT', getenv('NONCE_SALT'));
    \n \tdefine('AWS_ACCESS_KEY_ID', getenv('AWS_ACCESS_KEY_ID'));
    \n \tdefine('AWS_SECRET_ACCESS_KEY', getenv('AWS_SECRET_ACCESS_KEY'));

    \n
  40. \n\t
  41. Now you're all set. Type git push heroku production:master and let it finish. When that's done you can go to \"http://yourwordpressapp.heroku.com\" and complete your remote installation.\n
      \n\t
    1. In order to check out your remote installation simply switch back to the master branch with git checkout master
    2. \n
    \n
  42. \n
\n

Updating Wordpress

\n\n

If you need to update Wordpress (mine updated twice while I was working on this) you’ll need to take a few steps:

\n
    \n\t
  1. In a terminal in the html folder run sudo chown -R www-data:www-data wordpress/ That'll let you update wordpress locally through the app.
  2. \n\t
  3. Make sure you're on the master branch and update WP via the dashboard.
  4. \n\t
  5. Once Wordpress is finished updating run sudo chown -R your_user:your_user wordpress/ Now you'll be able to edit the folder yourself again.
  6. \n\t
  7. Commit the changes made by the update.
  8. \n\t
  9. Switch to the production branch and merge with master by running git merge master This shouldn't create any conflicts (it didn't with me).
  10. \n\t
  11. The wp-config file should be untouched, but check it just in case. If it doesn't have your production settings, simply edit the file again, and commit changes.
  12. \n\t
  13. Now run git push heroku production:master again, wait and your remote installation will be updated.\n
      \n\t
    • Remember to switch back to the master branch to get your local installation working again.
    • \n
    \n
  14. \n
\n

Adding/updating themes and plugins

\n\n

Adding/updating themes and plugins is easy.

\n
    \n\t
  1. Download the theme or plugin.
  2. \n\t
  3. Make sure you're in your master branch. Unzip the theme/folder into it's respective folder.
  4. \n\t
  5. In your local installation active the theme or plugin.
  6. \n\t
  7. Commit the changes, then switch to production.
  8. \n\t
  9. Run git merge master This should not create any conflicts if the plugin/theme is new.\n
      \n\t
    • If you're updating a conflict might be caused. If so, then in the terminal type git reset --hard
    • \n\t
    • Delete the older plugin/theme and replace with the new one, then merge again.
    • \n
    \n
  10. \n\t
  11. The wp-config file should be untouched, but check it just in case. If it doesn't have your production settings, simply edit the file again, and commit changes.
  12. \n\t
  13. Now run git push heroku production:master again, wait and your remote installation should now have the plugin/theme.\n
      \n\t
    • Go to \"http://yourwordpressapp.heroku.com/wp-admin\" and Wordpress might ask you to update the database. Simply go ahead and everything should work fine.
    • \n
    \n
  14. \n
\n","relative_path":"_posts/2015-04-23-wordpress-on-heroku.md","previous":null,"url":"/blog/wordpress-on-heroku/","id":"/blog/wordpress-on-heroku","collection":"posts","excerpt":"Wordpress on Heroku is great, but difficult to setup...","draft":false,"categories":["tutorials"],"layout":"post","title":"Wordpress on Heroku","date":"2015-09-23 20:12:00 +0000","tags":["heroku","wordpress","wordpress on heroku","blogging"],"slug":"wordpress-on-heroku","ext":".md"}); tags['heroku'] = posts; var posts = [] posts.push({"next":{"next":{"next":{"path":"_posts/2019-06-18-bitwarden-vs-dashlane.md","relative_path":"_posts/2019-06-18-bitwarden-vs-dashlane.md","url":"/blog/bitwarden-vs-dashlane/","id":"/blog/bitwarden-vs-dashlane","collection":"posts","draft":false,"categories":["opinion pieces"],"layout":"post","title":"Bitwarden vs Dashlane","tags":["comparison","password manager"],"date":"2019-06-18 00:00:00 +0000","slug":"bitwarden-vs-dashlane","ext":".md"},"path":"_posts/2019-04-26-funkwhale.md","output":"\n\n\n \n \n \n \n \n \n\n Funkwhale\n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n\n\n\n \n\n
\n \n
\n\n\n
\n
\n

Funkwhale

\n

Apr 26, 2019 | |

\n
\n \n \n
\n \n\n\n \n\n \n\n\n","content":"

Funkwhale is an open source grooveshark clone that anyone can self host. Since it offers a docker installation, spinning up an intance shouldn’t be too difficult, and the modest hardware requirements mean hosting should’nt cost much more than a couple dollars a month.

\n","relative_path":"_posts/2019-04-26-funkwhale.md","previous":{"path":"_posts/2015-10-3-jekyll-is-awesome.md","relative_path":"_posts/2015-10-3-jekyll-is-awesome.md","url":"/blog/jekyll-is-awesome/","id":"/blog/jekyll-is-awesome","collection":"posts","draft":false,"categories":["opinion pieces"],"layout":"post","title":"Jekyll is awesome","tags":["jekyll","blogging","static development"],"date":"2015-10-03 00:00:00 +0000","slug":"jekyll-is-awesome","ext":".md"},"url":"/blog/funkwhale/","id":"/blog/funkwhale","collection":"posts","excerpt":"Funkwhale is what Grooveshark should've been","draft":false,"categories":["opinion pieces"],"layout":"post","title":"Funkwhale","tags":["ideas","music"],"date":"2019-04-26 00:00:00 +0000","slug":"funkwhale","ext":".md"},"path":"_posts/2015-10-3-jekyll-is-awesome.md","output":"\n\n\n \n \n \n \n \n \n\n Jekyll is awesome\n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n\n\n\n \n\n
\n \n
\n\n\n
\n
\n

Jekyll is awesome

\n

Oct 3, 2015 | |

\n
\n \n
\n

Wordpress is everybody’s favourite blogging platform. It’s simple, and you can be up and running within minutes. There’s a few caveats, though: your site isn’t as customizable as a self-hosted installation of wordpress can be and that can be a little more complicated to set up. Then once it’s setup you’ll end up with a slow-as-mud website and no upward scalability. What if in the future you wanted to add a rails application to your website and move the blog to a subdomain? Can’t do that here.

\n\n

Simplicity is the name of the game. With Jekyll your content is the first thing you start creating, then you have Jekyll build your site and you’re left with a completely static website that you can host almost anywhere. The advantages to this are great: since the site is static and doesn’t require a database, hosting it is a cynch. You might even be able to host it for free! Since there’s no database there’s nothing a naughty user can mess with to damage your site. Finally since there’s no database calls to be made your site becomes incredibly fast. I think the pros far outweight the cons. If you don’t mind your site’s code being public then you can host it completely for free on github pages, too. Then it’s just a matter of pointing your domain there, setting up your cname file (a painless and simple setup) and you’re done!

\n\n

Jekyll isn’t for everything, though. It’s not going to replace Ruby on Rails and you’re not about to build a large scale web application with it. The best fit for a Jekyll site is, I think, most often the one that needs it most: users that want to build a website, but don’t want to pay an arm and a leg to just get a simple message out there. Even if programming isn’t your thing setting Jekyll up is a breeze, and I can help you out with that.

\n\n
\n
\n \n\n\n \n\n \n\n\n","content":"

Wordpress is everybody’s favourite blogging platform. It’s simple, and you can be up and running within minutes. There’s a few caveats, though: your site isn’t as customizable as a self-hosted installation of wordpress can be and that can be a little more complicated to set up. Then once it’s setup you’ll end up with a slow-as-mud website and no upward scalability. What if in the future you wanted to add a rails application to your website and move the blog to a subdomain? Can’t do that here.

\n\n

Simplicity is the name of the game. With Jekyll your content is the first thing you start creating, then you have Jekyll build your site and you’re left with a completely static website that you can host almost anywhere. The advantages to this are great: since the site is static and doesn’t require a database, hosting it is a cynch. You might even be able to host it for free! Since there’s no database there’s nothing a naughty user can mess with to damage your site. Finally since there’s no database calls to be made your site becomes incredibly fast. I think the pros far outweight the cons. If you don’t mind your site’s code being public then you can host it completely for free on github pages, too. Then it’s just a matter of pointing your domain there, setting up your cname file (a painless and simple setup) and you’re done!

\n\n

Jekyll isn’t for everything, though. It’s not going to replace Ruby on Rails and you’re not about to build a large scale web application with it. The best fit for a Jekyll site is, I think, most often the one that needs it most: users that want to build a website, but don’t want to pay an arm and a leg to just get a simple message out there. Even if programming isn’t your thing setting Jekyll up is a breeze, and I can help you out with that.

\n","relative_path":"_posts/2015-10-3-jekyll-is-awesome.md","previous":{"next":{"path":"_posts/2015-10-3-jekyll-is-awesome.md","relative_path":"_posts/2015-10-3-jekyll-is-awesome.md","url":"/blog/jekyll-is-awesome/","id":"/blog/jekyll-is-awesome","collection":"posts","draft":false,"categories":["opinion pieces"],"layout":"post","title":"Jekyll is awesome","tags":["jekyll","blogging","static development"],"date":"2015-10-03 00:00:00 +0000","slug":"jekyll-is-awesome","ext":".md"},"path":"_posts/2015-04-23-wordpress-on-heroku.md","output":"\n\n\n \n \n \n \n \n \n\n Wordpress on Heroku\n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n\n\n\n \n\n
\n \n
\n\n\n
\n
\n

Wordpress on Heroku

\n

Sep 23, 2015 | |

\n
\n \n
\n

Wordpress on Heroku is great, but difficult to setup. You will need to sign up for Amazon Web Services and Heroku. You’ll need to install the Heroku toolbelt on your machine using “wget -qO- https://toolbelt.heroku.com/install-ubuntu.sh | sh”. I’ll assume you’re running Linux for this, but I’ll see about a Windows tutorial as well later on. Setting up AWS is also not going to be covered right now in this tutorial.

\n
    \n\t
  1. The first thing to do is setup LAMP on your Linux machine.
  2. \n\t
  3. Next get the latest version of Wordpress. Download it and unzip the file into your \"/var/www/html/\" folder.
  4. \n\t
  5. Download Amazon Web Services and Amazon S3 and Cloudfront.
  6. \n\t
  7. Unzip both of Amazon Web Services and Amazon S3 and Cloudfront into the wp-content/plugins folder.
  8. \n\t
  9. You should have been given access keys for your AWS user. Add them to your wp-config.php file like this:\n \t

    // AWS Access Keys //
    \n \tdefine( 'AWS_ACCESS_KEY_ID', 'your_aws_access_key_id_here' );
    \n \tdefine( 'AWS_SECRET_ACCESS_KEY', 'your_aws_secret_access_key_here' );

    \n
  10. \n\t
  11. Go here and add your Unique Keys and Salts to your wp-config.php file like below:\n \t

    define('AUTH_KEY', 'put your unique phrase here');
    \n \tdefine('SECURE_AUTH_KEY', 'put your unique phrase here');
    \n \tdefine('LOGGED_IN_KEY', 'put your unique phrase here');
    \n \tdefine('NONCE_KEY', 'put your unique phrase here');
    \n \tdefine('AUTH_SALT', 'put your unique phrase here');
    \n \tdefine('SECURE_AUTH_SALT', 'put your unique phrase here');
    \n \tdefine('LOGGED_IN_SALT', 'put your unique phrase here');
    \n \tdefine('NONCE_SALT', 'put your unique phrase here');

    \n
  12. \n\t
  13. Go to localhost/wordpress/ and run through the installation using the MySQL credentials you setup while setting up your LAMP stack. Check here if you're not sure what to do.
  14. \n\t
  15. Go to your dashboard, and click on the plugins tab.
  16. \n\t
  17. Activate both the Amazon Web Services and Amazon S3 and Cloudfront plugins. There should now be another tab at the bottom that says \"AWS\". If your AWS User is setup correctly then they should both work immediately and allow you to connect to a bucket.
  18. \n\t
  19. Go into your wordpress folder and open a terminal session there.
  20. \n\t
  21. In your terminal type $ git init That'll initialize the whole thing as a git repository.
  22. \n\t
  23. In your terminal type git add . to get all the WP files ready to be committed. This will take a second or two.
  24. \n\t
  25. Now type git commit -m 'Add your own commit message here' Wait for the wall of text to stop running.
  26. \n\t
  27. Now type heroku create That'll create a new Heroku app from that directory.
  28. \n\t
  29. Type heroku addons:add cleardb If all goes well then you're almost ready to push your installation to Heroku.
  30. \n\t
  31. Copy the code below with the Unique Keys and Salts you got earlier:\n \t

    heroku config:set AUTH_KEY='put your unique phrase here'
    \n \tSECURE_AUTH_KEY='put your unique phrase here'
    \n \tLOGGED_IN_KEY='put your unique phrase here'
    \n \tNONCE_KEY='put your unique phrase here'
    \n \tAUTH_SALT='put your unique phrase here'
    \n \tSECURE_AUTH_SALT='put your unique phrase here'
    \n \tLOGGED_IN_SALT='put your unique phrase here'
    \n \tNONCE_SALT='put your unique phrase here'

    \n
  32. \n\t
  33. Again in the terminal type git checkout -b production You'll store your production environment variables here.
  34. \n\t
  35. Add this line to your wp-config.php file:\n\t

    $db = parse_url($_ENV[\"CLEARDB_DATABASE_URL\"]);

    \n
  36. \n\t
  37. Change your database information in wp-config.php to the code below:\n \t

    define('DB_NAME', trim($db[\"path\"],\"/\"));
    \n \tdefine('DB_USER', $db[\"user\"]);
    \n \tdefine('DB_PASSWORD', $db[\"pass\"]);
    \n \tdefine('DB_HOST', $db[\"host\"]);

    \n
  38. \n\t
  39. Change your Unthentication Unique Keys and Salts to the below:\n \t

    define('AUTH_KEY', getenv('AUTH_KEY'));
    \n \tdefine('SECURE_AUTH_KEY', getenv('SECURE_AUTH_KEY'));
    \n \tdefine('LOGGED_IN_KEY', getenv('LOGGED_IN_KEY'));
    \n \tdefine('NONCE_KEY', getenv('NONCE_KEY'));
    \n \tdefine('AUTH_SALT', getenv('AUTH_SALT'));
    \n \tdefine('SECURE_AUTH_SALT', getenv('SECURE_AUTH_SALT'));
    \n \tdefine('LOGGED_IN_SALT', getenv('LOGGED_IN_SALT'));
    \n \tdefine('NONCE_SALT', getenv('NONCE_SALT'));
    \n \tdefine('AWS_ACCESS_KEY_ID', getenv('AWS_ACCESS_KEY_ID'));
    \n \tdefine('AWS_SECRET_ACCESS_KEY', getenv('AWS_SECRET_ACCESS_KEY'));

    \n
  40. \n\t
  41. Now you're all set. Type git push heroku production:master and let it finish. When that's done you can go to \"http://yourwordpressapp.heroku.com\" and complete your remote installation.\n
      \n\t
    1. In order to check out your remote installation simply switch back to the master branch with git checkout master
    2. \n
    \n
  42. \n
\n

Updating Wordpress

\n\n

If you need to update Wordpress (mine updated twice while I was working on this) you’ll need to take a few steps:

\n
    \n\t
  1. In a terminal in the html folder run sudo chown -R www-data:www-data wordpress/ That'll let you update wordpress locally through the app.
  2. \n\t
  3. Make sure you're on the master branch and update WP via the dashboard.
  4. \n\t
  5. Once Wordpress is finished updating run sudo chown -R your_user:your_user wordpress/ Now you'll be able to edit the folder yourself again.
  6. \n\t
  7. Commit the changes made by the update.
  8. \n\t
  9. Switch to the production branch and merge with master by running git merge master This shouldn't create any conflicts (it didn't with me).
  10. \n\t
  11. The wp-config file should be untouched, but check it just in case. If it doesn't have your production settings, simply edit the file again, and commit changes.
  12. \n\t
  13. Now run git push heroku production:master again, wait and your remote installation will be updated.\n
      \n\t
    • Remember to switch back to the master branch to get your local installation working again.
    • \n
    \n
  14. \n
\n

Adding/updating themes and plugins

\n\n

Adding/updating themes and plugins is easy.

\n
    \n\t
  1. Download the theme or plugin.
  2. \n\t
  3. Make sure you're in your master branch. Unzip the theme/folder into it's respective folder.
  4. \n\t
  5. In your local installation active the theme or plugin.
  6. \n\t
  7. Commit the changes, then switch to production.
  8. \n\t
  9. Run git merge master This should not create any conflicts if the plugin/theme is new.\n
      \n\t
    • If you're updating a conflict might be caused. If so, then in the terminal type git reset --hard
    • \n\t
    • Delete the older plugin/theme and replace with the new one, then merge again.
    • \n
    \n
  10. \n\t
  11. The wp-config file should be untouched, but check it just in case. If it doesn't have your production settings, simply edit the file again, and commit changes.
  12. \n\t
  13. Now run git push heroku production:master again, wait and your remote installation should now have the plugin/theme.\n
      \n\t
    • Go to \"http://yourwordpressapp.heroku.com/wp-admin\" and Wordpress might ask you to update the database. Simply go ahead and everything should work fine.
    • \n
    \n
  14. \n
\n\n
\n
\n \n\n\n \n\n \n\n\n","content":"

Wordpress on Heroku is great, but difficult to setup. You will need to sign up for Amazon Web Services and Heroku. You’ll need to install the Heroku toolbelt on your machine using “wget -qO- https://toolbelt.heroku.com/install-ubuntu.sh | sh”. I’ll assume you’re running Linux for this, but I’ll see about a Windows tutorial as well later on. Setting up AWS is also not going to be covered right now in this tutorial.

\n
    \n\t
  1. The first thing to do is setup LAMP on your Linux machine.
  2. \n\t
  3. Next get the latest version of Wordpress. Download it and unzip the file into your \"/var/www/html/\" folder.
  4. \n\t
  5. Download Amazon Web Services and Amazon S3 and Cloudfront.
  6. \n\t
  7. Unzip both of Amazon Web Services and Amazon S3 and Cloudfront into the wp-content/plugins folder.
  8. \n\t
  9. You should have been given access keys for your AWS user. Add them to your wp-config.php file like this:\n \t

    // AWS Access Keys //
    \n \tdefine( 'AWS_ACCESS_KEY_ID', 'your_aws_access_key_id_here' );
    \n \tdefine( 'AWS_SECRET_ACCESS_KEY', 'your_aws_secret_access_key_here' );

    \n
  10. \n\t
  11. Go here and add your Unique Keys and Salts to your wp-config.php file like below:\n \t

    define('AUTH_KEY', 'put your unique phrase here');
    \n \tdefine('SECURE_AUTH_KEY', 'put your unique phrase here');
    \n \tdefine('LOGGED_IN_KEY', 'put your unique phrase here');
    \n \tdefine('NONCE_KEY', 'put your unique phrase here');
    \n \tdefine('AUTH_SALT', 'put your unique phrase here');
    \n \tdefine('SECURE_AUTH_SALT', 'put your unique phrase here');
    \n \tdefine('LOGGED_IN_SALT', 'put your unique phrase here');
    \n \tdefine('NONCE_SALT', 'put your unique phrase here');

    \n
  12. \n\t
  13. Go to localhost/wordpress/ and run through the installation using the MySQL credentials you setup while setting up your LAMP stack. Check here if you're not sure what to do.
  14. \n\t
  15. Go to your dashboard, and click on the plugins tab.
  16. \n\t
  17. Activate both the Amazon Web Services and Amazon S3 and Cloudfront plugins. There should now be another tab at the bottom that says \"AWS\". If your AWS User is setup correctly then they should both work immediately and allow you to connect to a bucket.
  18. \n\t
  19. Go into your wordpress folder and open a terminal session there.
  20. \n\t
  21. In your terminal type $ git init That'll initialize the whole thing as a git repository.
  22. \n\t
  23. In your terminal type git add . to get all the WP files ready to be committed. This will take a second or two.
  24. \n\t
  25. Now type git commit -m 'Add your own commit message here' Wait for the wall of text to stop running.
  26. \n\t
  27. Now type heroku create That'll create a new Heroku app from that directory.
  28. \n\t
  29. Type heroku addons:add cleardb If all goes well then you're almost ready to push your installation to Heroku.
  30. \n\t
  31. Copy the code below with the Unique Keys and Salts you got earlier:\n \t

    heroku config:set AUTH_KEY='put your unique phrase here'
    \n \tSECURE_AUTH_KEY='put your unique phrase here'
    \n \tLOGGED_IN_KEY='put your unique phrase here'
    \n \tNONCE_KEY='put your unique phrase here'
    \n \tAUTH_SALT='put your unique phrase here'
    \n \tSECURE_AUTH_SALT='put your unique phrase here'
    \n \tLOGGED_IN_SALT='put your unique phrase here'
    \n \tNONCE_SALT='put your unique phrase here'

    \n
  32. \n\t
  33. Again in the terminal type git checkout -b production You'll store your production environment variables here.
  34. \n\t
  35. Add this line to your wp-config.php file:\n\t

    $db = parse_url($_ENV[\"CLEARDB_DATABASE_URL\"]);

    \n
  36. \n\t
  37. Change your database information in wp-config.php to the code below:\n \t

    define('DB_NAME', trim($db[\"path\"],\"/\"));
    \n \tdefine('DB_USER', $db[\"user\"]);
    \n \tdefine('DB_PASSWORD', $db[\"pass\"]);
    \n \tdefine('DB_HOST', $db[\"host\"]);

    \n
  38. \n\t
  39. Change your Unthentication Unique Keys and Salts to the below:\n \t

    define('AUTH_KEY', getenv('AUTH_KEY'));
    \n \tdefine('SECURE_AUTH_KEY', getenv('SECURE_AUTH_KEY'));
    \n \tdefine('LOGGED_IN_KEY', getenv('LOGGED_IN_KEY'));
    \n \tdefine('NONCE_KEY', getenv('NONCE_KEY'));
    \n \tdefine('AUTH_SALT', getenv('AUTH_SALT'));
    \n \tdefine('SECURE_AUTH_SALT', getenv('SECURE_AUTH_SALT'));
    \n \tdefine('LOGGED_IN_SALT', getenv('LOGGED_IN_SALT'));
    \n \tdefine('NONCE_SALT', getenv('NONCE_SALT'));
    \n \tdefine('AWS_ACCESS_KEY_ID', getenv('AWS_ACCESS_KEY_ID'));
    \n \tdefine('AWS_SECRET_ACCESS_KEY', getenv('AWS_SECRET_ACCESS_KEY'));

    \n
  40. \n\t
  41. Now you're all set. Type git push heroku production:master and let it finish. When that's done you can go to \"http://yourwordpressapp.heroku.com\" and complete your remote installation.\n
      \n\t
    1. In order to check out your remote installation simply switch back to the master branch with git checkout master
    2. \n
    \n
  42. \n
\n

Updating Wordpress

\n\n

If you need to update Wordpress (mine updated twice while I was working on this) you’ll need to take a few steps:

\n
    \n\t
  1. In a terminal in the html folder run sudo chown -R www-data:www-data wordpress/ That'll let you update wordpress locally through the app.
  2. \n\t
  3. Make sure you're on the master branch and update WP via the dashboard.
  4. \n\t
  5. Once Wordpress is finished updating run sudo chown -R your_user:your_user wordpress/ Now you'll be able to edit the folder yourself again.
  6. \n\t
  7. Commit the changes made by the update.
  8. \n\t
  9. Switch to the production branch and merge with master by running git merge master This shouldn't create any conflicts (it didn't with me).
  10. \n\t
  11. The wp-config file should be untouched, but check it just in case. If it doesn't have your production settings, simply edit the file again, and commit changes.
  12. \n\t
  13. Now run git push heroku production:master again, wait and your remote installation will be updated.\n
      \n\t
    • Remember to switch back to the master branch to get your local installation working again.
    • \n
    \n
  14. \n
\n

Adding/updating themes and plugins

\n\n

Adding/updating themes and plugins is easy.

\n
    \n\t
  1. Download the theme or plugin.
  2. \n\t
  3. Make sure you're in your master branch. Unzip the theme/folder into it's respective folder.
  4. \n\t
  5. In your local installation active the theme or plugin.
  6. \n\t
  7. Commit the changes, then switch to production.
  8. \n\t
  9. Run git merge master This should not create any conflicts if the plugin/theme is new.\n
      \n\t
    • If you're updating a conflict might be caused. If so, then in the terminal type git reset --hard
    • \n\t
    • Delete the older plugin/theme and replace with the new one, then merge again.
    • \n
    \n
  10. \n\t
  11. The wp-config file should be untouched, but check it just in case. If it doesn't have your production settings, simply edit the file again, and commit changes.
  12. \n\t
  13. Now run git push heroku production:master again, wait and your remote installation should now have the plugin/theme.\n
      \n\t
    • Go to \"http://yourwordpressapp.heroku.com/wp-admin\" and Wordpress might ask you to update the database. Simply go ahead and everything should work fine.
    • \n
    \n
  14. \n
\n","relative_path":"_posts/2015-04-23-wordpress-on-heroku.md","previous":null,"url":"/blog/wordpress-on-heroku/","id":"/blog/wordpress-on-heroku","collection":"posts","excerpt":"Wordpress on Heroku is great, but difficult to setup...","draft":false,"categories":["tutorials"],"layout":"post","title":"Wordpress on Heroku","date":"2015-09-23 20:12:00 +0000","tags":["heroku","wordpress","wordpress on heroku","blogging"],"slug":"wordpress-on-heroku","ext":".md"},"url":"/blog/jekyll-is-awesome/","id":"/blog/jekyll-is-awesome","collection":"posts","excerpt":"Everything should be as simple as jekyll makes it","draft":false,"categories":["opinion pieces"],"layout":"post","title":"Jekyll is awesome","tags":["jekyll","blogging","static development"],"date":"2015-10-03 00:00:00 +0000","slug":"jekyll-is-awesome","ext":".md"},"path":"_posts/2015-04-23-wordpress-on-heroku.md","output":"\n\n\n \n \n \n \n \n \n\n Wordpress on Heroku\n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n\n\n\n \n\n
\n \n
\n\n\n
\n
\n

Wordpress on Heroku

\n

Sep 23, 2015 | |

\n
\n \n
\n

Wordpress on Heroku is great, but difficult to setup. You will need to sign up for Amazon Web Services and Heroku. You’ll need to install the Heroku toolbelt on your machine using “wget -qO- https://toolbelt.heroku.com/install-ubuntu.sh | sh”. I’ll assume you’re running Linux for this, but I’ll see about a Windows tutorial as well later on. Setting up AWS is also not going to be covered right now in this tutorial.

\n
    \n\t
  1. The first thing to do is setup LAMP on your Linux machine.
  2. \n\t
  3. Next get the latest version of Wordpress. Download it and unzip the file into your \"/var/www/html/\" folder.
  4. \n\t
  5. Download Amazon Web Services and Amazon S3 and Cloudfront.
  6. \n\t
  7. Unzip both of Amazon Web Services and Amazon S3 and Cloudfront into the wp-content/plugins folder.
  8. \n\t
  9. You should have been given access keys for your AWS user. Add them to your wp-config.php file like this:\n \t

    // AWS Access Keys //
    \n \tdefine( 'AWS_ACCESS_KEY_ID', 'your_aws_access_key_id_here' );
    \n \tdefine( 'AWS_SECRET_ACCESS_KEY', 'your_aws_secret_access_key_here' );

    \n
  10. \n\t
  11. Go here and add your Unique Keys and Salts to your wp-config.php file like below:\n \t

    define('AUTH_KEY', 'put your unique phrase here');
    \n \tdefine('SECURE_AUTH_KEY', 'put your unique phrase here');
    \n \tdefine('LOGGED_IN_KEY', 'put your unique phrase here');
    \n \tdefine('NONCE_KEY', 'put your unique phrase here');
    \n \tdefine('AUTH_SALT', 'put your unique phrase here');
    \n \tdefine('SECURE_AUTH_SALT', 'put your unique phrase here');
    \n \tdefine('LOGGED_IN_SALT', 'put your unique phrase here');
    \n \tdefine('NONCE_SALT', 'put your unique phrase here');

    \n
  12. \n\t
  13. Go to localhost/wordpress/ and run through the installation using the MySQL credentials you setup while setting up your LAMP stack. Check here if you're not sure what to do.
  14. \n\t
  15. Go to your dashboard, and click on the plugins tab.
  16. \n\t
  17. Activate both the Amazon Web Services and Amazon S3 and Cloudfront plugins. There should now be another tab at the bottom that says \"AWS\". If your AWS User is setup correctly then they should both work immediately and allow you to connect to a bucket.
  18. \n\t
  19. Go into your wordpress folder and open a terminal session there.
  20. \n\t
  21. In your terminal type $ git init That'll initialize the whole thing as a git repository.
  22. \n\t
  23. In your terminal type git add . to get all the WP files ready to be committed. This will take a second or two.
  24. \n\t
  25. Now type git commit -m 'Add your own commit message here' Wait for the wall of text to stop running.
  26. \n\t
  27. Now type heroku create That'll create a new Heroku app from that directory.
  28. \n\t
  29. Type heroku addons:add cleardb If all goes well then you're almost ready to push your installation to Heroku.
  30. \n\t
  31. Copy the code below with the Unique Keys and Salts you got earlier:\n \t

    heroku config:set AUTH_KEY='put your unique phrase here'
    \n \tSECURE_AUTH_KEY='put your unique phrase here'
    \n \tLOGGED_IN_KEY='put your unique phrase here'
    \n \tNONCE_KEY='put your unique phrase here'
    \n \tAUTH_SALT='put your unique phrase here'
    \n \tSECURE_AUTH_SALT='put your unique phrase here'
    \n \tLOGGED_IN_SALT='put your unique phrase here'
    \n \tNONCE_SALT='put your unique phrase here'

    \n
  32. \n\t
  33. Again in the terminal type git checkout -b production You'll store your production environment variables here.
  34. \n\t
  35. Add this line to your wp-config.php file:\n\t

    $db = parse_url($_ENV[\"CLEARDB_DATABASE_URL\"]);

    \n
  36. \n\t
  37. Change your database information in wp-config.php to the code below:\n \t

    define('DB_NAME', trim($db[\"path\"],\"/\"));
    \n \tdefine('DB_USER', $db[\"user\"]);
    \n \tdefine('DB_PASSWORD', $db[\"pass\"]);
    \n \tdefine('DB_HOST', $db[\"host\"]);

    \n
  38. \n\t
  39. Change your Unthentication Unique Keys and Salts to the below:\n \t

    define('AUTH_KEY', getenv('AUTH_KEY'));
    \n \tdefine('SECURE_AUTH_KEY', getenv('SECURE_AUTH_KEY'));
    \n \tdefine('LOGGED_IN_KEY', getenv('LOGGED_IN_KEY'));
    \n \tdefine('NONCE_KEY', getenv('NONCE_KEY'));
    \n \tdefine('AUTH_SALT', getenv('AUTH_SALT'));
    \n \tdefine('SECURE_AUTH_SALT', getenv('SECURE_AUTH_SALT'));
    \n \tdefine('LOGGED_IN_SALT', getenv('LOGGED_IN_SALT'));
    \n \tdefine('NONCE_SALT', getenv('NONCE_SALT'));
    \n \tdefine('AWS_ACCESS_KEY_ID', getenv('AWS_ACCESS_KEY_ID'));
    \n \tdefine('AWS_SECRET_ACCESS_KEY', getenv('AWS_SECRET_ACCESS_KEY'));

    \n
  40. \n\t
  41. Now you're all set. Type git push heroku production:master and let it finish. When that's done you can go to \"http://yourwordpressapp.heroku.com\" and complete your remote installation.\n
      \n\t
    1. In order to check out your remote installation simply switch back to the master branch with git checkout master
    2. \n
    \n
  42. \n
\n

Updating Wordpress

\n\n

If you need to update Wordpress (mine updated twice while I was working on this) you’ll need to take a few steps:

\n
    \n\t
  1. In a terminal in the html folder run sudo chown -R www-data:www-data wordpress/ That'll let you update wordpress locally through the app.
  2. \n\t
  3. Make sure you're on the master branch and update WP via the dashboard.
  4. \n\t
  5. Once Wordpress is finished updating run sudo chown -R your_user:your_user wordpress/ Now you'll be able to edit the folder yourself again.
  6. \n\t
  7. Commit the changes made by the update.
  8. \n\t
  9. Switch to the production branch and merge with master by running git merge master This shouldn't create any conflicts (it didn't with me).
  10. \n\t
  11. The wp-config file should be untouched, but check it just in case. If it doesn't have your production settings, simply edit the file again, and commit changes.
  12. \n\t
  13. Now run git push heroku production:master again, wait and your remote installation will be updated.\n
      \n\t
    • Remember to switch back to the master branch to get your local installation working again.
    • \n
    \n
  14. \n
\n

Adding/updating themes and plugins

\n\n

Adding/updating themes and plugins is easy.

\n
    \n\t
  1. Download the theme or plugin.
  2. \n\t
  3. Make sure you're in your master branch. Unzip the theme/folder into it's respective folder.
  4. \n\t
  5. In your local installation active the theme or plugin.
  6. \n\t
  7. Commit the changes, then switch to production.
  8. \n\t
  9. Run git merge master This should not create any conflicts if the plugin/theme is new.\n
      \n\t
    • If you're updating a conflict might be caused. If so, then in the terminal type git reset --hard
    • \n\t
    • Delete the older plugin/theme and replace with the new one, then merge again.
    • \n
    \n
  10. \n\t
  11. The wp-config file should be untouched, but check it just in case. If it doesn't have your production settings, simply edit the file again, and commit changes.
  12. \n\t
  13. Now run git push heroku production:master again, wait and your remote installation should now have the plugin/theme.\n
      \n\t
    • Go to \"http://yourwordpressapp.heroku.com/wp-admin\" and Wordpress might ask you to update the database. Simply go ahead and everything should work fine.
    • \n
    \n
  14. \n
\n\n
\n
\n \n\n\n \n\n \n\n\n","content":"

Wordpress on Heroku is great, but difficult to setup. You will need to sign up for Amazon Web Services and Heroku. You’ll need to install the Heroku toolbelt on your machine using “wget -qO- https://toolbelt.heroku.com/install-ubuntu.sh | sh”. I’ll assume you’re running Linux for this, but I’ll see about a Windows tutorial as well later on. Setting up AWS is also not going to be covered right now in this tutorial.

\n
    \n\t
  1. The first thing to do is setup LAMP on your Linux machine.
  2. \n\t
  3. Next get the latest version of Wordpress. Download it and unzip the file into your \"/var/www/html/\" folder.
  4. \n\t
  5. Download Amazon Web Services and Amazon S3 and Cloudfront.
  6. \n\t
  7. Unzip both of Amazon Web Services and Amazon S3 and Cloudfront into the wp-content/plugins folder.
  8. \n\t
  9. You should have been given access keys for your AWS user. Add them to your wp-config.php file like this:\n \t

    // AWS Access Keys //
    \n \tdefine( 'AWS_ACCESS_KEY_ID', 'your_aws_access_key_id_here' );
    \n \tdefine( 'AWS_SECRET_ACCESS_KEY', 'your_aws_secret_access_key_here' );

    \n
  10. \n\t
  11. Go here and add your Unique Keys and Salts to your wp-config.php file like below:\n \t

    define('AUTH_KEY', 'put your unique phrase here');
    \n \tdefine('SECURE_AUTH_KEY', 'put your unique phrase here');
    \n \tdefine('LOGGED_IN_KEY', 'put your unique phrase here');
    \n \tdefine('NONCE_KEY', 'put your unique phrase here');
    \n \tdefine('AUTH_SALT', 'put your unique phrase here');
    \n \tdefine('SECURE_AUTH_SALT', 'put your unique phrase here');
    \n \tdefine('LOGGED_IN_SALT', 'put your unique phrase here');
    \n \tdefine('NONCE_SALT', 'put your unique phrase here');

    \n
  12. \n\t
  13. Go to localhost/wordpress/ and run through the installation using the MySQL credentials you setup while setting up your LAMP stack. Check here if you're not sure what to do.
  14. \n\t
  15. Go to your dashboard, and click on the plugins tab.
  16. \n\t
  17. Activate both the Amazon Web Services and Amazon S3 and Cloudfront plugins. There should now be another tab at the bottom that says \"AWS\". If your AWS User is setup correctly then they should both work immediately and allow you to connect to a bucket.
  18. \n\t
  19. Go into your wordpress folder and open a terminal session there.
  20. \n\t
  21. In your terminal type $ git init That'll initialize the whole thing as a git repository.
  22. \n\t
  23. In your terminal type git add . to get all the WP files ready to be committed. This will take a second or two.
  24. \n\t
  25. Now type git commit -m 'Add your own commit message here' Wait for the wall of text to stop running.
  26. \n\t
  27. Now type heroku create That'll create a new Heroku app from that directory.
  28. \n\t
  29. Type heroku addons:add cleardb If all goes well then you're almost ready to push your installation to Heroku.
  30. \n\t
  31. Copy the code below with the Unique Keys and Salts you got earlier:\n \t

    heroku config:set AUTH_KEY='put your unique phrase here'
    \n \tSECURE_AUTH_KEY='put your unique phrase here'
    \n \tLOGGED_IN_KEY='put your unique phrase here'
    \n \tNONCE_KEY='put your unique phrase here'
    \n \tAUTH_SALT='put your unique phrase here'
    \n \tSECURE_AUTH_SALT='put your unique phrase here'
    \n \tLOGGED_IN_SALT='put your unique phrase here'
    \n \tNONCE_SALT='put your unique phrase here'

    \n
  32. \n\t
  33. Again in the terminal type git checkout -b production You'll store your production environment variables here.
  34. \n\t
  35. Add this line to your wp-config.php file:\n\t

    $db = parse_url($_ENV[\"CLEARDB_DATABASE_URL\"]);

    \n
  36. \n\t
  37. Change your database information in wp-config.php to the code below:\n \t

    define('DB_NAME', trim($db[\"path\"],\"/\"));
    \n \tdefine('DB_USER', $db[\"user\"]);
    \n \tdefine('DB_PASSWORD', $db[\"pass\"]);
    \n \tdefine('DB_HOST', $db[\"host\"]);

    \n
  38. \n\t
  39. Change your Unthentication Unique Keys and Salts to the below:\n \t

    define('AUTH_KEY', getenv('AUTH_KEY'));
    \n \tdefine('SECURE_AUTH_KEY', getenv('SECURE_AUTH_KEY'));
    \n \tdefine('LOGGED_IN_KEY', getenv('LOGGED_IN_KEY'));
    \n \tdefine('NONCE_KEY', getenv('NONCE_KEY'));
    \n \tdefine('AUTH_SALT', getenv('AUTH_SALT'));
    \n \tdefine('SECURE_AUTH_SALT', getenv('SECURE_AUTH_SALT'));
    \n \tdefine('LOGGED_IN_SALT', getenv('LOGGED_IN_SALT'));
    \n \tdefine('NONCE_SALT', getenv('NONCE_SALT'));
    \n \tdefine('AWS_ACCESS_KEY_ID', getenv('AWS_ACCESS_KEY_ID'));
    \n \tdefine('AWS_SECRET_ACCESS_KEY', getenv('AWS_SECRET_ACCESS_KEY'));

    \n
  40. \n\t
  41. Now you're all set. Type git push heroku production:master and let it finish. When that's done you can go to \"http://yourwordpressapp.heroku.com\" and complete your remote installation.\n
      \n\t
    1. In order to check out your remote installation simply switch back to the master branch with git checkout master
    2. \n
    \n
  42. \n
\n

Updating Wordpress

\n\n

If you need to update Wordpress (mine updated twice while I was working on this) you’ll need to take a few steps:

\n
    \n\t
  1. In a terminal in the html folder run sudo chown -R www-data:www-data wordpress/ That'll let you update wordpress locally through the app.
  2. \n\t
  3. Make sure you're on the master branch and update WP via the dashboard.
  4. \n\t
  5. Once Wordpress is finished updating run sudo chown -R your_user:your_user wordpress/ Now you'll be able to edit the folder yourself again.
  6. \n\t
  7. Commit the changes made by the update.
  8. \n\t
  9. Switch to the production branch and merge with master by running git merge master This shouldn't create any conflicts (it didn't with me).
  10. \n\t
  11. The wp-config file should be untouched, but check it just in case. If it doesn't have your production settings, simply edit the file again, and commit changes.
  12. \n\t
  13. Now run git push heroku production:master again, wait and your remote installation will be updated.\n
      \n\t
    • Remember to switch back to the master branch to get your local installation working again.
    • \n
    \n
  14. \n
\n

Adding/updating themes and plugins

\n\n

Adding/updating themes and plugins is easy.

\n
    \n\t
  1. Download the theme or plugin.
  2. \n\t
  3. Make sure you're in your master branch. Unzip the theme/folder into it's respective folder.
  4. \n\t
  5. In your local installation active the theme or plugin.
  6. \n\t
  7. Commit the changes, then switch to production.
  8. \n\t
  9. Run git merge master This should not create any conflicts if the plugin/theme is new.\n
      \n\t
    • If you're updating a conflict might be caused. If so, then in the terminal type git reset --hard
    • \n\t
    • Delete the older plugin/theme and replace with the new one, then merge again.
    • \n
    \n
  10. \n\t
  11. The wp-config file should be untouched, but check it just in case. If it doesn't have your production settings, simply edit the file again, and commit changes.
  12. \n\t
  13. Now run git push heroku production:master again, wait and your remote installation should now have the plugin/theme.\n
      \n\t
    • Go to \"http://yourwordpressapp.heroku.com/wp-admin\" and Wordpress might ask you to update the database. Simply go ahead and everything should work fine.
    • \n
    \n
  14. \n
\n","relative_path":"_posts/2015-04-23-wordpress-on-heroku.md","previous":null,"url":"/blog/wordpress-on-heroku/","id":"/blog/wordpress-on-heroku","collection":"posts","excerpt":"Wordpress on Heroku is great, but difficult to setup...","draft":false,"categories":["tutorials"],"layout":"post","title":"Wordpress on Heroku","date":"2015-09-23 20:12:00 +0000","tags":["heroku","wordpress","wordpress on heroku","blogging"],"slug":"wordpress-on-heroku","ext":".md"}); tags['wordpress'] = posts; var posts = [] posts.push({"next":{"next":{"next":{"path":"_posts/2019-06-18-bitwarden-vs-dashlane.md","relative_path":"_posts/2019-06-18-bitwarden-vs-dashlane.md","url":"/blog/bitwarden-vs-dashlane/","id":"/blog/bitwarden-vs-dashlane","collection":"posts","draft":false,"categories":["opinion pieces"],"layout":"post","title":"Bitwarden vs Dashlane","tags":["comparison","password manager"],"date":"2019-06-18 00:00:00 +0000","slug":"bitwarden-vs-dashlane","ext":".md"},"path":"_posts/2019-04-26-funkwhale.md","output":"\n\n\n \n \n \n \n \n \n\n Funkwhale\n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n\n\n\n \n\n
\n \n
\n\n\n
\n
\n

Funkwhale

\n

Apr 26, 2019 | |

\n
\n \n \n
\n \n\n\n \n\n \n\n\n","content":"

Funkwhale is an open source grooveshark clone that anyone can self host. Since it offers a docker installation, spinning up an intance shouldn’t be too difficult, and the modest hardware requirements mean hosting should’nt cost much more than a couple dollars a month.

\n","relative_path":"_posts/2019-04-26-funkwhale.md","previous":{"path":"_posts/2015-10-3-jekyll-is-awesome.md","relative_path":"_posts/2015-10-3-jekyll-is-awesome.md","url":"/blog/jekyll-is-awesome/","id":"/blog/jekyll-is-awesome","collection":"posts","draft":false,"categories":["opinion pieces"],"layout":"post","title":"Jekyll is awesome","tags":["jekyll","blogging","static development"],"date":"2015-10-03 00:00:00 +0000","slug":"jekyll-is-awesome","ext":".md"},"url":"/blog/funkwhale/","id":"/blog/funkwhale","collection":"posts","excerpt":"Funkwhale is what Grooveshark should've been","draft":false,"categories":["opinion pieces"],"layout":"post","title":"Funkwhale","tags":["ideas","music"],"date":"2019-04-26 00:00:00 +0000","slug":"funkwhale","ext":".md"},"path":"_posts/2015-10-3-jekyll-is-awesome.md","output":"\n\n\n \n \n \n \n \n \n\n Jekyll is awesome\n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n\n\n\n \n\n
\n \n
\n\n\n
\n
\n

Jekyll is awesome

\n

Oct 3, 2015 | |

\n
\n \n
\n

Wordpress is everybody’s favourite blogging platform. It’s simple, and you can be up and running within minutes. There’s a few caveats, though: your site isn’t as customizable as a self-hosted installation of wordpress can be and that can be a little more complicated to set up. Then once it’s setup you’ll end up with a slow-as-mud website and no upward scalability. What if in the future you wanted to add a rails application to your website and move the blog to a subdomain? Can’t do that here.

\n\n

Simplicity is the name of the game. With Jekyll your content is the first thing you start creating, then you have Jekyll build your site and you’re left with a completely static website that you can host almost anywhere. The advantages to this are great: since the site is static and doesn’t require a database, hosting it is a cynch. You might even be able to host it for free! Since there’s no database there’s nothing a naughty user can mess with to damage your site. Finally since there’s no database calls to be made your site becomes incredibly fast. I think the pros far outweight the cons. If you don’t mind your site’s code being public then you can host it completely for free on github pages, too. Then it’s just a matter of pointing your domain there, setting up your cname file (a painless and simple setup) and you’re done!

\n\n

Jekyll isn’t for everything, though. It’s not going to replace Ruby on Rails and you’re not about to build a large scale web application with it. The best fit for a Jekyll site is, I think, most often the one that needs it most: users that want to build a website, but don’t want to pay an arm and a leg to just get a simple message out there. Even if programming isn’t your thing setting Jekyll up is a breeze, and I can help you out with that.

\n\n
\n
\n \n\n\n \n\n \n\n\n","content":"

Wordpress is everybody’s favourite blogging platform. It’s simple, and you can be up and running within minutes. There’s a few caveats, though: your site isn’t as customizable as a self-hosted installation of wordpress can be and that can be a little more complicated to set up. Then once it’s setup you’ll end up with a slow-as-mud website and no upward scalability. What if in the future you wanted to add a rails application to your website and move the blog to a subdomain? Can’t do that here.

\n\n

Simplicity is the name of the game. With Jekyll your content is the first thing you start creating, then you have Jekyll build your site and you’re left with a completely static website that you can host almost anywhere. The advantages to this are great: since the site is static and doesn’t require a database, hosting it is a cynch. You might even be able to host it for free! Since there’s no database there’s nothing a naughty user can mess with to damage your site. Finally since there’s no database calls to be made your site becomes incredibly fast. I think the pros far outweight the cons. If you don’t mind your site’s code being public then you can host it completely for free on github pages, too. Then it’s just a matter of pointing your domain there, setting up your cname file (a painless and simple setup) and you’re done!

\n\n

Jekyll isn’t for everything, though. It’s not going to replace Ruby on Rails and you’re not about to build a large scale web application with it. The best fit for a Jekyll site is, I think, most often the one that needs it most: users that want to build a website, but don’t want to pay an arm and a leg to just get a simple message out there. Even if programming isn’t your thing setting Jekyll up is a breeze, and I can help you out with that.

\n","relative_path":"_posts/2015-10-3-jekyll-is-awesome.md","previous":{"next":{"path":"_posts/2015-10-3-jekyll-is-awesome.md","relative_path":"_posts/2015-10-3-jekyll-is-awesome.md","url":"/blog/jekyll-is-awesome/","id":"/blog/jekyll-is-awesome","collection":"posts","draft":false,"categories":["opinion pieces"],"layout":"post","title":"Jekyll is awesome","tags":["jekyll","blogging","static development"],"date":"2015-10-03 00:00:00 +0000","slug":"jekyll-is-awesome","ext":".md"},"path":"_posts/2015-04-23-wordpress-on-heroku.md","output":"\n\n\n \n \n \n \n \n \n\n Wordpress on Heroku\n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n\n\n\n \n\n
\n \n
\n\n\n
\n
\n

Wordpress on Heroku

\n

Sep 23, 2015 | |

\n
\n \n
\n

Wordpress on Heroku is great, but difficult to setup. You will need to sign up for Amazon Web Services and Heroku. You’ll need to install the Heroku toolbelt on your machine using “wget -qO- https://toolbelt.heroku.com/install-ubuntu.sh | sh”. I’ll assume you’re running Linux for this, but I’ll see about a Windows tutorial as well later on. Setting up AWS is also not going to be covered right now in this tutorial.

\n
    \n\t
  1. The first thing to do is setup LAMP on your Linux machine.
  2. \n\t
  3. Next get the latest version of Wordpress. Download it and unzip the file into your \"/var/www/html/\" folder.
  4. \n\t
  5. Download Amazon Web Services and Amazon S3 and Cloudfront.
  6. \n\t
  7. Unzip both of Amazon Web Services and Amazon S3 and Cloudfront into the wp-content/plugins folder.
  8. \n\t
  9. You should have been given access keys for your AWS user. Add them to your wp-config.php file like this:\n \t

    // AWS Access Keys //
    \n \tdefine( 'AWS_ACCESS_KEY_ID', 'your_aws_access_key_id_here' );
    \n \tdefine( 'AWS_SECRET_ACCESS_KEY', 'your_aws_secret_access_key_here' );

    \n
  10. \n\t
  11. Go here and add your Unique Keys and Salts to your wp-config.php file like below:\n \t

    define('AUTH_KEY', 'put your unique phrase here');
    \n \tdefine('SECURE_AUTH_KEY', 'put your unique phrase here');
    \n \tdefine('LOGGED_IN_KEY', 'put your unique phrase here');
    \n \tdefine('NONCE_KEY', 'put your unique phrase here');
    \n \tdefine('AUTH_SALT', 'put your unique phrase here');
    \n \tdefine('SECURE_AUTH_SALT', 'put your unique phrase here');
    \n \tdefine('LOGGED_IN_SALT', 'put your unique phrase here');
    \n \tdefine('NONCE_SALT', 'put your unique phrase here');

    \n
  12. \n\t
  13. Go to localhost/wordpress/ and run through the installation using the MySQL credentials you setup while setting up your LAMP stack. Check here if you're not sure what to do.
  14. \n\t
  15. Go to your dashboard, and click on the plugins tab.
  16. \n\t
  17. Activate both the Amazon Web Services and Amazon S3 and Cloudfront plugins. There should now be another tab at the bottom that says \"AWS\". If your AWS User is setup correctly then they should both work immediately and allow you to connect to a bucket.
  18. \n\t
  19. Go into your wordpress folder and open a terminal session there.
  20. \n\t
  21. In your terminal type $ git init That'll initialize the whole thing as a git repository.
  22. \n\t
  23. In your terminal type git add . to get all the WP files ready to be committed. This will take a second or two.
  24. \n\t
  25. Now type git commit -m 'Add your own commit message here' Wait for the wall of text to stop running.
  26. \n\t
  27. Now type heroku create That'll create a new Heroku app from that directory.
  28. \n\t
  29. Type heroku addons:add cleardb If all goes well then you're almost ready to push your installation to Heroku.
  30. \n\t
  31. Copy the code below with the Unique Keys and Salts you got earlier:\n \t

    heroku config:set AUTH_KEY='put your unique phrase here'
    \n \tSECURE_AUTH_KEY='put your unique phrase here'
    \n \tLOGGED_IN_KEY='put your unique phrase here'
    \n \tNONCE_KEY='put your unique phrase here'
    \n \tAUTH_SALT='put your unique phrase here'
    \n \tSECURE_AUTH_SALT='put your unique phrase here'
    \n \tLOGGED_IN_SALT='put your unique phrase here'
    \n \tNONCE_SALT='put your unique phrase here'

    \n
  32. \n\t
  33. Again in the terminal type git checkout -b production You'll store your production environment variables here.
  34. \n\t
  35. Add this line to your wp-config.php file:\n\t

    $db = parse_url($_ENV[\"CLEARDB_DATABASE_URL\"]);

    \n
  36. \n\t
  37. Change your database information in wp-config.php to the code below:\n \t

    define('DB_NAME', trim($db[\"path\"],\"/\"));
    \n \tdefine('DB_USER', $db[\"user\"]);
    \n \tdefine('DB_PASSWORD', $db[\"pass\"]);
    \n \tdefine('DB_HOST', $db[\"host\"]);

    \n
  38. \n\t
  39. Change your Unthentication Unique Keys and Salts to the below:\n \t

    define('AUTH_KEY', getenv('AUTH_KEY'));
    \n \tdefine('SECURE_AUTH_KEY', getenv('SECURE_AUTH_KEY'));
    \n \tdefine('LOGGED_IN_KEY', getenv('LOGGED_IN_KEY'));
    \n \tdefine('NONCE_KEY', getenv('NONCE_KEY'));
    \n \tdefine('AUTH_SALT', getenv('AUTH_SALT'));
    \n \tdefine('SECURE_AUTH_SALT', getenv('SECURE_AUTH_SALT'));
    \n \tdefine('LOGGED_IN_SALT', getenv('LOGGED_IN_SALT'));
    \n \tdefine('NONCE_SALT', getenv('NONCE_SALT'));
    \n \tdefine('AWS_ACCESS_KEY_ID', getenv('AWS_ACCESS_KEY_ID'));
    \n \tdefine('AWS_SECRET_ACCESS_KEY', getenv('AWS_SECRET_ACCESS_KEY'));

    \n
  40. \n\t
  41. Now you're all set. Type git push heroku production:master and let it finish. When that's done you can go to \"http://yourwordpressapp.heroku.com\" and complete your remote installation.\n
      \n\t
    1. In order to check out your remote installation simply switch back to the master branch with git checkout master
    2. \n
    \n
  42. \n
\n

Updating Wordpress

\n\n

If you need to update Wordpress (mine updated twice while I was working on this) you’ll need to take a few steps:

\n
    \n\t
  1. In a terminal in the html folder run sudo chown -R www-data:www-data wordpress/ That'll let you update wordpress locally through the app.
  2. \n\t
  3. Make sure you're on the master branch and update WP via the dashboard.
  4. \n\t
  5. Once Wordpress is finished updating run sudo chown -R your_user:your_user wordpress/ Now you'll be able to edit the folder yourself again.
  6. \n\t
  7. Commit the changes made by the update.
  8. \n\t
  9. Switch to the production branch and merge with master by running git merge master This shouldn't create any conflicts (it didn't with me).
  10. \n\t
  11. The wp-config file should be untouched, but check it just in case. If it doesn't have your production settings, simply edit the file again, and commit changes.
  12. \n\t
  13. Now run git push heroku production:master again, wait and your remote installation will be updated.\n
      \n\t
    • Remember to switch back to the master branch to get your local installation working again.
    • \n
    \n
  14. \n
\n

Adding/updating themes and plugins

\n\n

Adding/updating themes and plugins is easy.

\n
    \n\t
  1. Download the theme or plugin.
  2. \n\t
  3. Make sure you're in your master branch. Unzip the theme/folder into it's respective folder.
  4. \n\t
  5. In your local installation active the theme or plugin.
  6. \n\t
  7. Commit the changes, then switch to production.
  8. \n\t
  9. Run git merge master This should not create any conflicts if the plugin/theme is new.\n
      \n\t
    • If you're updating a conflict might be caused. If so, then in the terminal type git reset --hard
    • \n\t
    • Delete the older plugin/theme and replace with the new one, then merge again.
    • \n
    \n
  10. \n\t
  11. The wp-config file should be untouched, but check it just in case. If it doesn't have your production settings, simply edit the file again, and commit changes.
  12. \n\t
  13. Now run git push heroku production:master again, wait and your remote installation should now have the plugin/theme.\n
      \n\t
    • Go to \"http://yourwordpressapp.heroku.com/wp-admin\" and Wordpress might ask you to update the database. Simply go ahead and everything should work fine.
    • \n
    \n
  14. \n
\n\n
\n
\n \n\n\n \n\n \n\n\n","content":"

Wordpress on Heroku is great, but difficult to setup. You will need to sign up for Amazon Web Services and Heroku. You’ll need to install the Heroku toolbelt on your machine using “wget -qO- https://toolbelt.heroku.com/install-ubuntu.sh | sh”. I’ll assume you’re running Linux for this, but I’ll see about a Windows tutorial as well later on. Setting up AWS is also not going to be covered right now in this tutorial.

\n
    \n\t
  1. The first thing to do is setup LAMP on your Linux machine.
  2. \n\t
  3. Next get the latest version of Wordpress. Download it and unzip the file into your \"/var/www/html/\" folder.
  4. \n\t
  5. Download Amazon Web Services and Amazon S3 and Cloudfront.
  6. \n\t
  7. Unzip both of Amazon Web Services and Amazon S3 and Cloudfront into the wp-content/plugins folder.
  8. \n\t
  9. You should have been given access keys for your AWS user. Add them to your wp-config.php file like this:\n \t

    // AWS Access Keys //
    \n \tdefine( 'AWS_ACCESS_KEY_ID', 'your_aws_access_key_id_here' );
    \n \tdefine( 'AWS_SECRET_ACCESS_KEY', 'your_aws_secret_access_key_here' );

    \n
  10. \n\t
  11. Go here and add your Unique Keys and Salts to your wp-config.php file like below:\n \t

    define('AUTH_KEY', 'put your unique phrase here');
    \n \tdefine('SECURE_AUTH_KEY', 'put your unique phrase here');
    \n \tdefine('LOGGED_IN_KEY', 'put your unique phrase here');
    \n \tdefine('NONCE_KEY', 'put your unique phrase here');
    \n \tdefine('AUTH_SALT', 'put your unique phrase here');
    \n \tdefine('SECURE_AUTH_SALT', 'put your unique phrase here');
    \n \tdefine('LOGGED_IN_SALT', 'put your unique phrase here');
    \n \tdefine('NONCE_SALT', 'put your unique phrase here');

    \n
  12. \n\t
  13. Go to localhost/wordpress/ and run through the installation using the MySQL credentials you setup while setting up your LAMP stack. Check here if you're not sure what to do.
  14. \n\t
  15. Go to your dashboard, and click on the plugins tab.
  16. \n\t
  17. Activate both the Amazon Web Services and Amazon S3 and Cloudfront plugins. There should now be another tab at the bottom that says \"AWS\". If your AWS User is setup correctly then they should both work immediately and allow you to connect to a bucket.
  18. \n\t
  19. Go into your wordpress folder and open a terminal session there.
  20. \n\t
  21. In your terminal type $ git init That'll initialize the whole thing as a git repository.
  22. \n\t
  23. In your terminal type git add . to get all the WP files ready to be committed. This will take a second or two.
  24. \n\t
  25. Now type git commit -m 'Add your own commit message here' Wait for the wall of text to stop running.
  26. \n\t
  27. Now type heroku create That'll create a new Heroku app from that directory.
  28. \n\t
  29. Type heroku addons:add cleardb If all goes well then you're almost ready to push your installation to Heroku.
  30. \n\t
  31. Copy the code below with the Unique Keys and Salts you got earlier:\n \t

    heroku config:set AUTH_KEY='put your unique phrase here'
    \n \tSECURE_AUTH_KEY='put your unique phrase here'
    \n \tLOGGED_IN_KEY='put your unique phrase here'
    \n \tNONCE_KEY='put your unique phrase here'
    \n \tAUTH_SALT='put your unique phrase here'
    \n \tSECURE_AUTH_SALT='put your unique phrase here'
    \n \tLOGGED_IN_SALT='put your unique phrase here'
    \n \tNONCE_SALT='put your unique phrase here'

    \n
  32. \n\t
  33. Again in the terminal type git checkout -b production You'll store your production environment variables here.
  34. \n\t
  35. Add this line to your wp-config.php file:\n\t

    $db = parse_url($_ENV[\"CLEARDB_DATABASE_URL\"]);

    \n
  36. \n\t
  37. Change your database information in wp-config.php to the code below:\n \t

    define('DB_NAME', trim($db[\"path\"],\"/\"));
    \n \tdefine('DB_USER', $db[\"user\"]);
    \n \tdefine('DB_PASSWORD', $db[\"pass\"]);
    \n \tdefine('DB_HOST', $db[\"host\"]);

    \n
  38. \n\t
  39. Change your Unthentication Unique Keys and Salts to the below:\n \t

    define('AUTH_KEY', getenv('AUTH_KEY'));
    \n \tdefine('SECURE_AUTH_KEY', getenv('SECURE_AUTH_KEY'));
    \n \tdefine('LOGGED_IN_KEY', getenv('LOGGED_IN_KEY'));
    \n \tdefine('NONCE_KEY', getenv('NONCE_KEY'));
    \n \tdefine('AUTH_SALT', getenv('AUTH_SALT'));
    \n \tdefine('SECURE_AUTH_SALT', getenv('SECURE_AUTH_SALT'));
    \n \tdefine('LOGGED_IN_SALT', getenv('LOGGED_IN_SALT'));
    \n \tdefine('NONCE_SALT', getenv('NONCE_SALT'));
    \n \tdefine('AWS_ACCESS_KEY_ID', getenv('AWS_ACCESS_KEY_ID'));
    \n \tdefine('AWS_SECRET_ACCESS_KEY', getenv('AWS_SECRET_ACCESS_KEY'));

    \n
  40. \n\t
  41. Now you're all set. Type git push heroku production:master and let it finish. When that's done you can go to \"http://yourwordpressapp.heroku.com\" and complete your remote installation.\n
      \n\t
    1. In order to check out your remote installation simply switch back to the master branch with git checkout master
    2. \n
    \n
  42. \n
\n

Updating Wordpress

\n\n

If you need to update Wordpress (mine updated twice while I was working on this) you’ll need to take a few steps:

\n
    \n\t
  1. In a terminal in the html folder run sudo chown -R www-data:www-data wordpress/ That'll let you update wordpress locally through the app.
  2. \n\t
  3. Make sure you're on the master branch and update WP via the dashboard.
  4. \n\t
  5. Once Wordpress is finished updating run sudo chown -R your_user:your_user wordpress/ Now you'll be able to edit the folder yourself again.
  6. \n\t
  7. Commit the changes made by the update.
  8. \n\t
  9. Switch to the production branch and merge with master by running git merge master This shouldn't create any conflicts (it didn't with me).
  10. \n\t
  11. The wp-config file should be untouched, but check it just in case. If it doesn't have your production settings, simply edit the file again, and commit changes.
  12. \n\t
  13. Now run git push heroku production:master again, wait and your remote installation will be updated.\n
      \n\t
    • Remember to switch back to the master branch to get your local installation working again.
    • \n
    \n
  14. \n
\n

Adding/updating themes and plugins

\n\n

Adding/updating themes and plugins is easy.

\n
    \n\t
  1. Download the theme or plugin.
  2. \n\t
  3. Make sure you're in your master branch. Unzip the theme/folder into it's respective folder.
  4. \n\t
  5. In your local installation active the theme or plugin.
  6. \n\t
  7. Commit the changes, then switch to production.
  8. \n\t
  9. Run git merge master This should not create any conflicts if the plugin/theme is new.\n
      \n\t
    • If you're updating a conflict might be caused. If so, then in the terminal type git reset --hard
    • \n\t
    • Delete the older plugin/theme and replace with the new one, then merge again.
    • \n
    \n
  10. \n\t
  11. The wp-config file should be untouched, but check it just in case. If it doesn't have your production settings, simply edit the file again, and commit changes.
  12. \n\t
  13. Now run git push heroku production:master again, wait and your remote installation should now have the plugin/theme.\n
      \n\t
    • Go to \"http://yourwordpressapp.heroku.com/wp-admin\" and Wordpress might ask you to update the database. Simply go ahead and everything should work fine.
    • \n
    \n
  14. \n
\n","relative_path":"_posts/2015-04-23-wordpress-on-heroku.md","previous":null,"url":"/blog/wordpress-on-heroku/","id":"/blog/wordpress-on-heroku","collection":"posts","excerpt":"Wordpress on Heroku is great, but difficult to setup...","draft":false,"categories":["tutorials"],"layout":"post","title":"Wordpress on Heroku","date":"2015-09-23 20:12:00 +0000","tags":["heroku","wordpress","wordpress on heroku","blogging"],"slug":"wordpress-on-heroku","ext":".md"},"url":"/blog/jekyll-is-awesome/","id":"/blog/jekyll-is-awesome","collection":"posts","excerpt":"Everything should be as simple as jekyll makes it","draft":false,"categories":["opinion pieces"],"layout":"post","title":"Jekyll is awesome","tags":["jekyll","blogging","static development"],"date":"2015-10-03 00:00:00 +0000","slug":"jekyll-is-awesome","ext":".md"},"path":"_posts/2015-04-23-wordpress-on-heroku.md","output":"\n\n\n \n \n \n \n \n \n\n Wordpress on Heroku\n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n\n\n\n \n\n
\n \n
\n\n\n
\n
\n

Wordpress on Heroku

\n

Sep 23, 2015 | |

\n
\n \n
\n

Wordpress on Heroku is great, but difficult to setup. You will need to sign up for Amazon Web Services and Heroku. You’ll need to install the Heroku toolbelt on your machine using “wget -qO- https://toolbelt.heroku.com/install-ubuntu.sh | sh”. I’ll assume you’re running Linux for this, but I’ll see about a Windows tutorial as well later on. Setting up AWS is also not going to be covered right now in this tutorial.

\n
    \n\t
  1. The first thing to do is setup LAMP on your Linux machine.
  2. \n\t
  3. Next get the latest version of Wordpress. Download it and unzip the file into your \"/var/www/html/\" folder.
  4. \n\t
  5. Download Amazon Web Services and Amazon S3 and Cloudfront.
  6. \n\t
  7. Unzip both of Amazon Web Services and Amazon S3 and Cloudfront into the wp-content/plugins folder.
  8. \n\t
  9. You should have been given access keys for your AWS user. Add them to your wp-config.php file like this:\n \t

    // AWS Access Keys //
    \n \tdefine( 'AWS_ACCESS_KEY_ID', 'your_aws_access_key_id_here' );
    \n \tdefine( 'AWS_SECRET_ACCESS_KEY', 'your_aws_secret_access_key_here' );

    \n
  10. \n\t
  11. Go here and add your Unique Keys and Salts to your wp-config.php file like below:\n \t

    define('AUTH_KEY', 'put your unique phrase here');
    \n \tdefine('SECURE_AUTH_KEY', 'put your unique phrase here');
    \n \tdefine('LOGGED_IN_KEY', 'put your unique phrase here');
    \n \tdefine('NONCE_KEY', 'put your unique phrase here');
    \n \tdefine('AUTH_SALT', 'put your unique phrase here');
    \n \tdefine('SECURE_AUTH_SALT', 'put your unique phrase here');
    \n \tdefine('LOGGED_IN_SALT', 'put your unique phrase here');
    \n \tdefine('NONCE_SALT', 'put your unique phrase here');

    \n
  12. \n\t
  13. Go to localhost/wordpress/ and run through the installation using the MySQL credentials you setup while setting up your LAMP stack. Check here if you're not sure what to do.
  14. \n\t
  15. Go to your dashboard, and click on the plugins tab.
  16. \n\t
  17. Activate both the Amazon Web Services and Amazon S3 and Cloudfront plugins. There should now be another tab at the bottom that says \"AWS\". If your AWS User is setup correctly then they should both work immediately and allow you to connect to a bucket.
  18. \n\t
  19. Go into your wordpress folder and open a terminal session there.
  20. \n\t
  21. In your terminal type $ git init That'll initialize the whole thing as a git repository.
  22. \n\t
  23. In your terminal type git add . to get all the WP files ready to be committed. This will take a second or two.
  24. \n\t
  25. Now type git commit -m 'Add your own commit message here' Wait for the wall of text to stop running.
  26. \n\t
  27. Now type heroku create That'll create a new Heroku app from that directory.
  28. \n\t
  29. Type heroku addons:add cleardb If all goes well then you're almost ready to push your installation to Heroku.
  30. \n\t
  31. Copy the code below with the Unique Keys and Salts you got earlier:\n \t

    heroku config:set AUTH_KEY='put your unique phrase here'
    \n \tSECURE_AUTH_KEY='put your unique phrase here'
    \n \tLOGGED_IN_KEY='put your unique phrase here'
    \n \tNONCE_KEY='put your unique phrase here'
    \n \tAUTH_SALT='put your unique phrase here'
    \n \tSECURE_AUTH_SALT='put your unique phrase here'
    \n \tLOGGED_IN_SALT='put your unique phrase here'
    \n \tNONCE_SALT='put your unique phrase here'

    \n
  32. \n\t
  33. Again in the terminal type git checkout -b production You'll store your production environment variables here.
  34. \n\t
  35. Add this line to your wp-config.php file:\n\t

    $db = parse_url($_ENV[\"CLEARDB_DATABASE_URL\"]);

    \n
  36. \n\t
  37. Change your database information in wp-config.php to the code below:\n \t

    define('DB_NAME', trim($db[\"path\"],\"/\"));
    \n \tdefine('DB_USER', $db[\"user\"]);
    \n \tdefine('DB_PASSWORD', $db[\"pass\"]);
    \n \tdefine('DB_HOST', $db[\"host\"]);

    \n
  38. \n\t
  39. Change your Unthentication Unique Keys and Salts to the below:\n \t

    define('AUTH_KEY', getenv('AUTH_KEY'));
    \n \tdefine('SECURE_AUTH_KEY', getenv('SECURE_AUTH_KEY'));
    \n \tdefine('LOGGED_IN_KEY', getenv('LOGGED_IN_KEY'));
    \n \tdefine('NONCE_KEY', getenv('NONCE_KEY'));
    \n \tdefine('AUTH_SALT', getenv('AUTH_SALT'));
    \n \tdefine('SECURE_AUTH_SALT', getenv('SECURE_AUTH_SALT'));
    \n \tdefine('LOGGED_IN_SALT', getenv('LOGGED_IN_SALT'));
    \n \tdefine('NONCE_SALT', getenv('NONCE_SALT'));
    \n \tdefine('AWS_ACCESS_KEY_ID', getenv('AWS_ACCESS_KEY_ID'));
    \n \tdefine('AWS_SECRET_ACCESS_KEY', getenv('AWS_SECRET_ACCESS_KEY'));

    \n
  40. \n\t
  41. Now you're all set. Type git push heroku production:master and let it finish. When that's done you can go to \"http://yourwordpressapp.heroku.com\" and complete your remote installation.\n
      \n\t
    1. In order to check out your remote installation simply switch back to the master branch with git checkout master
    2. \n
    \n
  42. \n
\n

Updating Wordpress

\n\n

If you need to update Wordpress (mine updated twice while I was working on this) you’ll need to take a few steps:

\n
    \n\t
  1. In a terminal in the html folder run sudo chown -R www-data:www-data wordpress/ That'll let you update wordpress locally through the app.
  2. \n\t
  3. Make sure you're on the master branch and update WP via the dashboard.
  4. \n\t
  5. Once Wordpress is finished updating run sudo chown -R your_user:your_user wordpress/ Now you'll be able to edit the folder yourself again.
  6. \n\t
  7. Commit the changes made by the update.
  8. \n\t
  9. Switch to the production branch and merge with master by running git merge master This shouldn't create any conflicts (it didn't with me).
  10. \n\t
  11. The wp-config file should be untouched, but check it just in case. If it doesn't have your production settings, simply edit the file again, and commit changes.
  12. \n\t
  13. Now run git push heroku production:master again, wait and your remote installation will be updated.\n
      \n\t
    • Remember to switch back to the master branch to get your local installation working again.
    • \n
    \n
  14. \n
\n

Adding/updating themes and plugins

\n\n

Adding/updating themes and plugins is easy.

\n
    \n\t
  1. Download the theme or plugin.
  2. \n\t
  3. Make sure you're in your master branch. Unzip the theme/folder into it's respective folder.
  4. \n\t
  5. In your local installation active the theme or plugin.
  6. \n\t
  7. Commit the changes, then switch to production.
  8. \n\t
  9. Run git merge master This should not create any conflicts if the plugin/theme is new.\n
      \n\t
    • If you're updating a conflict might be caused. If so, then in the terminal type git reset --hard
    • \n\t
    • Delete the older plugin/theme and replace with the new one, then merge again.
    • \n
    \n
  10. \n\t
  11. The wp-config file should be untouched, but check it just in case. If it doesn't have your production settings, simply edit the file again, and commit changes.
  12. \n\t
  13. Now run git push heroku production:master again, wait and your remote installation should now have the plugin/theme.\n
      \n\t
    • Go to \"http://yourwordpressapp.heroku.com/wp-admin\" and Wordpress might ask you to update the database. Simply go ahead and everything should work fine.
    • \n
    \n
  14. \n
\n\n
\n
\n \n\n\n \n\n \n\n\n","content":"

Wordpress on Heroku is great, but difficult to setup. You will need to sign up for Amazon Web Services and Heroku. You’ll need to install the Heroku toolbelt on your machine using “wget -qO- https://toolbelt.heroku.com/install-ubuntu.sh | sh”. I’ll assume you’re running Linux for this, but I’ll see about a Windows tutorial as well later on. Setting up AWS is also not going to be covered right now in this tutorial.

\n
    \n\t
  1. The first thing to do is setup LAMP on your Linux machine.
  2. \n\t
  3. Next get the latest version of Wordpress. Download it and unzip the file into your \"/var/www/html/\" folder.
  4. \n\t
  5. Download Amazon Web Services and Amazon S3 and Cloudfront.
  6. \n\t
  7. Unzip both of Amazon Web Services and Amazon S3 and Cloudfront into the wp-content/plugins folder.
  8. \n\t
  9. You should have been given access keys for your AWS user. Add them to your wp-config.php file like this:\n \t

    // AWS Access Keys //
    \n \tdefine( 'AWS_ACCESS_KEY_ID', 'your_aws_access_key_id_here' );
    \n \tdefine( 'AWS_SECRET_ACCESS_KEY', 'your_aws_secret_access_key_here' );

    \n
  10. \n\t
  11. Go here and add your Unique Keys and Salts to your wp-config.php file like below:\n \t

    define('AUTH_KEY', 'put your unique phrase here');
    \n \tdefine('SECURE_AUTH_KEY', 'put your unique phrase here');
    \n \tdefine('LOGGED_IN_KEY', 'put your unique phrase here');
    \n \tdefine('NONCE_KEY', 'put your unique phrase here');
    \n \tdefine('AUTH_SALT', 'put your unique phrase here');
    \n \tdefine('SECURE_AUTH_SALT', 'put your unique phrase here');
    \n \tdefine('LOGGED_IN_SALT', 'put your unique phrase here');
    \n \tdefine('NONCE_SALT', 'put your unique phrase here');

    \n
  12. \n\t
  13. Go to localhost/wordpress/ and run through the installation using the MySQL credentials you setup while setting up your LAMP stack. Check here if you're not sure what to do.
  14. \n\t
  15. Go to your dashboard, and click on the plugins tab.
  16. \n\t
  17. Activate both the Amazon Web Services and Amazon S3 and Cloudfront plugins. There should now be another tab at the bottom that says \"AWS\". If your AWS User is setup correctly then they should both work immediately and allow you to connect to a bucket.
  18. \n\t
  19. Go into your wordpress folder and open a terminal session there.
  20. \n\t
  21. In your terminal type $ git init That'll initialize the whole thing as a git repository.
  22. \n\t
  23. In your terminal type git add . to get all the WP files ready to be committed. This will take a second or two.
  24. \n\t
  25. Now type git commit -m 'Add your own commit message here' Wait for the wall of text to stop running.
  26. \n\t
  27. Now type heroku create That'll create a new Heroku app from that directory.
  28. \n\t
  29. Type heroku addons:add cleardb If all goes well then you're almost ready to push your installation to Heroku.
  30. \n\t
  31. Copy the code below with the Unique Keys and Salts you got earlier:\n \t

    heroku config:set AUTH_KEY='put your unique phrase here'
    \n \tSECURE_AUTH_KEY='put your unique phrase here'
    \n \tLOGGED_IN_KEY='put your unique phrase here'
    \n \tNONCE_KEY='put your unique phrase here'
    \n \tAUTH_SALT='put your unique phrase here'
    \n \tSECURE_AUTH_SALT='put your unique phrase here'
    \n \tLOGGED_IN_SALT='put your unique phrase here'
    \n \tNONCE_SALT='put your unique phrase here'

    \n
  32. \n\t
  33. Again in the terminal type git checkout -b production You'll store your production environment variables here.
  34. \n\t
  35. Add this line to your wp-config.php file:\n\t

    $db = parse_url($_ENV[\"CLEARDB_DATABASE_URL\"]);

    \n
  36. \n\t
  37. Change your database information in wp-config.php to the code below:\n \t

    define('DB_NAME', trim($db[\"path\"],\"/\"));
    \n \tdefine('DB_USER', $db[\"user\"]);
    \n \tdefine('DB_PASSWORD', $db[\"pass\"]);
    \n \tdefine('DB_HOST', $db[\"host\"]);

    \n
  38. \n\t
  39. Change your Unthentication Unique Keys and Salts to the below:\n \t

    define('AUTH_KEY', getenv('AUTH_KEY'));
    \n \tdefine('SECURE_AUTH_KEY', getenv('SECURE_AUTH_KEY'));
    \n \tdefine('LOGGED_IN_KEY', getenv('LOGGED_IN_KEY'));
    \n \tdefine('NONCE_KEY', getenv('NONCE_KEY'));
    \n \tdefine('AUTH_SALT', getenv('AUTH_SALT'));
    \n \tdefine('SECURE_AUTH_SALT', getenv('SECURE_AUTH_SALT'));
    \n \tdefine('LOGGED_IN_SALT', getenv('LOGGED_IN_SALT'));
    \n \tdefine('NONCE_SALT', getenv('NONCE_SALT'));
    \n \tdefine('AWS_ACCESS_KEY_ID', getenv('AWS_ACCESS_KEY_ID'));
    \n \tdefine('AWS_SECRET_ACCESS_KEY', getenv('AWS_SECRET_ACCESS_KEY'));

    \n
  40. \n\t
  41. Now you're all set. Type git push heroku production:master and let it finish. When that's done you can go to \"http://yourwordpressapp.heroku.com\" and complete your remote installation.\n
      \n\t
    1. In order to check out your remote installation simply switch back to the master branch with git checkout master
    2. \n
    \n
  42. \n
\n

Updating Wordpress

\n\n

If you need to update Wordpress (mine updated twice while I was working on this) you’ll need to take a few steps:

\n
    \n\t
  1. In a terminal in the html folder run sudo chown -R www-data:www-data wordpress/ That'll let you update wordpress locally through the app.
  2. \n\t
  3. Make sure you're on the master branch and update WP via the dashboard.
  4. \n\t
  5. Once Wordpress is finished updating run sudo chown -R your_user:your_user wordpress/ Now you'll be able to edit the folder yourself again.
  6. \n\t
  7. Commit the changes made by the update.
  8. \n\t
  9. Switch to the production branch and merge with master by running git merge master This shouldn't create any conflicts (it didn't with me).
  10. \n\t
  11. The wp-config file should be untouched, but check it just in case. If it doesn't have your production settings, simply edit the file again, and commit changes.
  12. \n\t
  13. Now run git push heroku production:master again, wait and your remote installation will be updated.\n
      \n\t
    • Remember to switch back to the master branch to get your local installation working again.
    • \n
    \n
  14. \n
\n

Adding/updating themes and plugins

\n\n

Adding/updating themes and plugins is easy.

\n
    \n\t
  1. Download the theme or plugin.
  2. \n\t
  3. Make sure you're in your master branch. Unzip the theme/folder into it's respective folder.
  4. \n\t
  5. In your local installation active the theme or plugin.
  6. \n\t
  7. Commit the changes, then switch to production.
  8. \n\t
  9. Run git merge master This should not create any conflicts if the plugin/theme is new.\n
      \n\t
    • If you're updating a conflict might be caused. If so, then in the terminal type git reset --hard
    • \n\t
    • Delete the older plugin/theme and replace with the new one, then merge again.
    • \n
    \n
  10. \n\t
  11. The wp-config file should be untouched, but check it just in case. If it doesn't have your production settings, simply edit the file again, and commit changes.
  12. \n\t
  13. Now run git push heroku production:master again, wait and your remote installation should now have the plugin/theme.\n
      \n\t
    • Go to \"http://yourwordpressapp.heroku.com/wp-admin\" and Wordpress might ask you to update the database. Simply go ahead and everything should work fine.
    • \n
    \n
  14. \n
\n","relative_path":"_posts/2015-04-23-wordpress-on-heroku.md","previous":null,"url":"/blog/wordpress-on-heroku/","id":"/blog/wordpress-on-heroku","collection":"posts","excerpt":"Wordpress on Heroku is great, but difficult to setup...","draft":false,"categories":["tutorials"],"layout":"post","title":"Wordpress on Heroku","date":"2015-09-23 20:12:00 +0000","tags":["heroku","wordpress","wordpress on heroku","blogging"],"slug":"wordpress-on-heroku","ext":".md"}); tags['wordpress on heroku'] = posts; var posts = [] posts.push({"next":{"next":{"next":{"path":"_posts/2019-07-11-ledger-is-simply-amazing.md","relative_path":"_posts/2019-07-11-ledger-is-simply-amazing.md","url":"/blog/ledger-is-simply-amazing/","id":"/blog/ledger-is-simply-amazing","collection":"posts","draft":false,"categories":["gush"],"layout":"post","title":"Ledger is amazing","tags":["finance","money manager"],"date":"2019-07-11 00:00:00 +0000","slug":"ledger-is-simply-amazing","ext":".md"},"path":"_posts/2019-06-18-bitwarden-vs-dashlane.md","output":"\n\n\n \n \n \n \n \n \n\n Bitwarden vs Dashlane\n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n\n\n\n \n\n
\n \n
\n\n\n
\n
\n

Bitwarden vs Dashlane

\n

Jun 18, 2019 | |

\n
\n \n
\n

Bitwarden does everything Dashlane does, better.

\n

That’s the end of the post. You can go home, now.

\n\n
\n\n

If you want a further breakdown, consider these points:

\n\n

Security, most important, most overlooked

\n

From a pure security standpoint, it’s a toss-up between Dashlane and Bitwarden. Both offer best-in-class security, so your passwords are safe on both.

\n\n

Bitwarden offers 2FA auditing at the organization level for business users, while Dashlane does not. Enforcing is on the roadmap.

\n\n

I would add that Bitwarden can offer a little more peace of mind for two reasons:

\n\n

1. It’s open source.

\n

A great many of you just sighed, but it being open source means it can be checked constantly for issues. The source for all their software is here: http://github.com/bitwarden/

\n\n

This also means that if Bitwarden doesn’t have a feature you like, or something works in a way you don’t like, you can just change it.

\n\n

2. It’s self-hostable.

\n

Some hacker is far more likely to attack the behemoth that is Dashlane with it’s millions of user passwords, than they are to attack your little server with your 1000 passwords (at best). This also means that you are in control of your data, which is good news for the tin-foil hat wearers out there.

\n\n

You can even get Bitwarden’s paid features for the price of hosting your server by following this guide: https://www.reddit.com/r/selfhosted/comments/8usixz/let_me_introduce_you_to_bitwarden_rs_selfhosted/

\n\n
\n\n

Nobody cares about security, though, right? So let’s move on to the good stuff:

\n\n

Features, the good stuff (also price)

\n\n

Bitwarden offers every feature Dashlane does with loads more on top of those, and more of them for free. It’s paid version is also cheaper than Dashlane’s.

\n\n

Here’s a table I stole, that compares both service’s features:

\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
FeatureDashlaneBitwarden
Chrome supportyesyes
Firefox supportyesyes
Edge supportyesyes
Safari supportyesyes
Mac OS, Windows supportyesyes
Linux supportpooryes
Mac OS command-line clientnoyes
Windows command-line clientnoyes
Linux command-line clientnoyes
Android support, including auto-fillyesyes
Android auto-fill in Chromeyesyes
Auto-fill in Android work profileyesyes (1)
Android auto-fill shows full usernamesyesyes
iOS support, including auto-fillyesyes
Two-factor authenticationyesyes
YubiKey support in browser (Enterprise)noyes ($)
YubiKey support in browser (Personal)noyes ($)
YubiKey support in Androidnoyes ($)
YubiKey support in iOSnoyes ($)
Saved password in Android, iOSyesyes
Fingerprint login in Android, iOSyesyes
Synchronization across devicesyesyes
Import from LastPassyesyes
LastPass import distinguishes work from personal itemsnono
Preserves LastPass folders in some way when importingdoubtfulyes
Personal linked account support (or the equivalent)pooryes
Save location (personal vs. work) specified at creation timenoyes
Save location (folder / collection / space) editable in web appnoyes
Sensible password quality checks for master passwordnoyes
Password history on Linuxnoyes
Password history on Windows, Mac OSyesyes
Secure notesyesyes
Attachments on notes on Linuxnoyes
Attachments on notes on Windows, Mac OSyesyes
Shared folders with access control on Linuxnoyes
Shared folders with access control on Windowsyesyes
Shared folders with access control on Mac OSyesyes
Items can exist in multiple groups with distinct access controlnoyes
Nested foldersnoyes
Resists auto-filling invisible formsyesyes
Browser plugin only fills selected formunknownno
Browser plugin displays icon in form fieldsyesno
Browser plugin prompts to save new sites on Linuxyesyes
Browser plugin prompts to save new sites on Windows, Mac OSyesyes
2FA integrated into login entries in vault (Mac OS, Windows, iOS, Android)noyes
2FA integrated into login entries in vault (Linux)noyes
Auto-fill in browser disabled by defaultnoyes
Auto-fill in browser can be disabled by preferencenoyes
Admins can reset passwordsyesno
Admins can access other people’s unshared credentialsnono
Admins can reset other people’s 2fanono
2fa can be enforced at the organization levelnono (3)
2fa can be audited at the organization levelnoyes
Exporting items on Linuxnoyes
Exporting items on Windows, Mac OSyesyes
Password health reportsyesyes ($)
App export includes attachmentsunknownno
CLI export includes attachmentsnopoor (2)
Responsive to bug reports and feature requestsunknownyes
Open sourcenoyes
Option to self-hostnoyes
Users can delete own account (customer service not needed)yesyes
Admins can delete business account (customer service not needed)yesyes
Has a useful status page that can be subscribed toyesno
Number of outages in the past six months (since December, 2018)120
Enterprise price per user per month43
Personal price per user per month (no Attachments or YubiKey)4.990
Personal price per user per month (w/Attachments & YubiKey)4.990.84
\n\n

Note 1: In work profile apps Bitwarden might not pop up a dialog automatically inviting you to auto-fill, but it’ll display a notification you can tap to do it.

\n\n

Note 2: CLI allows individual attachments to be exported. The user would have to write a script to iterate through and export all of them.

\n\n

Note 3: On the product roadmap, not yet implemented as of writing (Click to see the feature request)

\n\n
\n
\n \n\n\n \n\n \n\n\n","content":"

Bitwarden does everything Dashlane does, better.

\n

That’s the end of the post. You can go home, now.

\n\n
\n\n

If you want a further breakdown, consider these points:

\n\n

Security, most important, most overlooked

\n

From a pure security standpoint, it’s a toss-up between Dashlane and Bitwarden. Both offer best-in-class security, so your passwords are safe on both.

\n\n

Bitwarden offers 2FA auditing at the organization level for business users, while Dashlane does not. Enforcing is on the roadmap.

\n\n

I would add that Bitwarden can offer a little more peace of mind for two reasons:

\n\n

1. It’s open source.

\n

A great many of you just sighed, but it being open source means it can be checked constantly for issues. The source for all their software is here: http://github.com/bitwarden/

\n\n

This also means that if Bitwarden doesn’t have a feature you like, or something works in a way you don’t like, you can just change it.

\n\n

2. It’s self-hostable.

\n

Some hacker is far more likely to attack the behemoth that is Dashlane with it’s millions of user passwords, than they are to attack your little server with your 1000 passwords (at best). This also means that you are in control of your data, which is good news for the tin-foil hat wearers out there.

\n\n

You can even get Bitwarden’s paid features for the price of hosting your server by following this guide: https://www.reddit.com/r/selfhosted/comments/8usixz/let_me_introduce_you_to_bitwarden_rs_selfhosted/

\n\n
\n\n

Nobody cares about security, though, right? So let’s move on to the good stuff:

\n\n

Features, the good stuff (also price)

\n\n

Bitwarden offers every feature Dashlane does with loads more on top of those, and more of them for free. It’s paid version is also cheaper than Dashlane’s.

\n\n

Here’s a table I stole, that compares both service’s features:

\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
FeatureDashlaneBitwarden
Chrome supportyesyes
Firefox supportyesyes
Edge supportyesyes
Safari supportyesyes
Mac OS, Windows supportyesyes
Linux supportpooryes
Mac OS command-line clientnoyes
Windows command-line clientnoyes
Linux command-line clientnoyes
Android support, including auto-fillyesyes
Android auto-fill in Chromeyesyes
Auto-fill in Android work profileyesyes (1)
Android auto-fill shows full usernamesyesyes
iOS support, including auto-fillyesyes
Two-factor authenticationyesyes
YubiKey support in browser (Enterprise)noyes ($)
YubiKey support in browser (Personal)noyes ($)
YubiKey support in Androidnoyes ($)
YubiKey support in iOSnoyes ($)
Saved password in Android, iOSyesyes
Fingerprint login in Android, iOSyesyes
Synchronization across devicesyesyes
Import from LastPassyesyes
LastPass import distinguishes work from personal itemsnono
Preserves LastPass folders in some way when importingdoubtfulyes
Personal linked account support (or the equivalent)pooryes
Save location (personal vs. work) specified at creation timenoyes
Save location (folder / collection / space) editable in web appnoyes
Sensible password quality checks for master passwordnoyes
Password history on Linuxnoyes
Password history on Windows, Mac OSyesyes
Secure notesyesyes
Attachments on notes on Linuxnoyes
Attachments on notes on Windows, Mac OSyesyes
Shared folders with access control on Linuxnoyes
Shared folders with access control on Windowsyesyes
Shared folders with access control on Mac OSyesyes
Items can exist in multiple groups with distinct access controlnoyes
Nested foldersnoyes
Resists auto-filling invisible formsyesyes
Browser plugin only fills selected formunknownno
Browser plugin displays icon in form fieldsyesno
Browser plugin prompts to save new sites on Linuxyesyes
Browser plugin prompts to save new sites on Windows, Mac OSyesyes
2FA integrated into login entries in vault (Mac OS, Windows, iOS, Android)noyes
2FA integrated into login entries in vault (Linux)noyes
Auto-fill in browser disabled by defaultnoyes
Auto-fill in browser can be disabled by preferencenoyes
Admins can reset passwordsyesno
Admins can access other people’s unshared credentialsnono
Admins can reset other people’s 2fanono
2fa can be enforced at the organization levelnono (3)
2fa can be audited at the organization levelnoyes
Exporting items on Linuxnoyes
Exporting items on Windows, Mac OSyesyes
Password health reportsyesyes ($)
App export includes attachmentsunknownno
CLI export includes attachmentsnopoor (2)
Responsive to bug reports and feature requestsunknownyes
Open sourcenoyes
Option to self-hostnoyes
Users can delete own account (customer service not needed)yesyes
Admins can delete business account (customer service not needed)yesyes
Has a useful status page that can be subscribed toyesno
Number of outages in the past six months (since December, 2018)120
Enterprise price per user per month43
Personal price per user per month (no Attachments or YubiKey)4.990
Personal price per user per month (w/Attachments & YubiKey)4.990.84
\n\n

Note 1: In work profile apps Bitwarden might not pop up a dialog automatically inviting you to auto-fill, but it’ll display a notification you can tap to do it.

\n\n

Note 2: CLI allows individual attachments to be exported. The user would have to write a script to iterate through and export all of them.

\n\n

Note 3: On the product roadmap, not yet implemented as of writing (Click to see the feature request)

\n","relative_path":"_posts/2019-06-18-bitwarden-vs-dashlane.md","previous":{"path":"_posts/2019-04-26-funkwhale.md","relative_path":"_posts/2019-04-26-funkwhale.md","url":"/blog/funkwhale/","id":"/blog/funkwhale","collection":"posts","draft":false,"categories":["opinion pieces"],"layout":"post","title":"Funkwhale","tags":["ideas","music"],"date":"2019-04-26 00:00:00 +0000","slug":"funkwhale","ext":".md"},"url":"/blog/bitwarden-vs-dashlane/","id":"/blog/bitwarden-vs-dashlane","collection":"posts","excerpt":"Bitwarden does everything Dashlane does, better","draft":false,"categories":["opinion pieces"],"layout":"post","title":"Bitwarden vs Dashlane","tags":["comparison","password manager"],"date":"2019-06-18 00:00:00 +0000","slug":"bitwarden-vs-dashlane","ext":".md"},"path":"_posts/2019-04-26-funkwhale.md","output":"\n\n\n \n \n \n \n \n \n\n Funkwhale\n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n\n\n\n \n\n
\n \n
\n\n\n
\n
\n

Funkwhale

\n

Apr 26, 2019 | |

\n
\n \n \n
\n \n\n\n \n\n \n\n\n","content":"

Funkwhale is an open source grooveshark clone that anyone can self host. Since it offers a docker installation, spinning up an intance shouldn’t be too difficult, and the modest hardware requirements mean hosting should’nt cost much more than a couple dollars a month.

\n","relative_path":"_posts/2019-04-26-funkwhale.md","previous":{"next":{"path":"_posts/2019-04-26-funkwhale.md","relative_path":"_posts/2019-04-26-funkwhale.md","url":"/blog/funkwhale/","id":"/blog/funkwhale","collection":"posts","draft":false,"categories":["opinion pieces"],"layout":"post","title":"Funkwhale","tags":["ideas","music"],"date":"2019-04-26 00:00:00 +0000","slug":"funkwhale","ext":".md"},"path":"_posts/2015-10-3-jekyll-is-awesome.md","output":"\n\n\n \n \n \n \n \n \n\n Jekyll is awesome\n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n\n\n\n \n\n
\n \n
\n\n\n
\n
\n

Jekyll is awesome

\n

Oct 3, 2015 | |

\n
\n \n
\n

Wordpress is everybody’s favourite blogging platform. It’s simple, and you can be up and running within minutes. There’s a few caveats, though: your site isn’t as customizable as a self-hosted installation of wordpress can be and that can be a little more complicated to set up. Then once it’s setup you’ll end up with a slow-as-mud website and no upward scalability. What if in the future you wanted to add a rails application to your website and move the blog to a subdomain? Can’t do that here.

\n\n

Simplicity is the name of the game. With Jekyll your content is the first thing you start creating, then you have Jekyll build your site and you’re left with a completely static website that you can host almost anywhere. The advantages to this are great: since the site is static and doesn’t require a database, hosting it is a cynch. You might even be able to host it for free! Since there’s no database there’s nothing a naughty user can mess with to damage your site. Finally since there’s no database calls to be made your site becomes incredibly fast. I think the pros far outweight the cons. If you don’t mind your site’s code being public then you can host it completely for free on github pages, too. Then it’s just a matter of pointing your domain there, setting up your cname file (a painless and simple setup) and you’re done!

\n\n

Jekyll isn’t for everything, though. It’s not going to replace Ruby on Rails and you’re not about to build a large scale web application with it. The best fit for a Jekyll site is, I think, most often the one that needs it most: users that want to build a website, but don’t want to pay an arm and a leg to just get a simple message out there. Even if programming isn’t your thing setting Jekyll up is a breeze, and I can help you out with that.

\n\n
\n
\n \n\n\n \n\n \n\n\n","content":"

Wordpress is everybody’s favourite blogging platform. It’s simple, and you can be up and running within minutes. There’s a few caveats, though: your site isn’t as customizable as a self-hosted installation of wordpress can be and that can be a little more complicated to set up. Then once it’s setup you’ll end up with a slow-as-mud website and no upward scalability. What if in the future you wanted to add a rails application to your website and move the blog to a subdomain? Can’t do that here.

\n\n

Simplicity is the name of the game. With Jekyll your content is the first thing you start creating, then you have Jekyll build your site and you’re left with a completely static website that you can host almost anywhere. The advantages to this are great: since the site is static and doesn’t require a database, hosting it is a cynch. You might even be able to host it for free! Since there’s no database there’s nothing a naughty user can mess with to damage your site. Finally since there’s no database calls to be made your site becomes incredibly fast. I think the pros far outweight the cons. If you don’t mind your site’s code being public then you can host it completely for free on github pages, too. Then it’s just a matter of pointing your domain there, setting up your cname file (a painless and simple setup) and you’re done!

\n\n

Jekyll isn’t for everything, though. It’s not going to replace Ruby on Rails and you’re not about to build a large scale web application with it. The best fit for a Jekyll site is, I think, most often the one that needs it most: users that want to build a website, but don’t want to pay an arm and a leg to just get a simple message out there. Even if programming isn’t your thing setting Jekyll up is a breeze, and I can help you out with that.

\n","relative_path":"_posts/2015-10-3-jekyll-is-awesome.md","previous":{"path":"_posts/2015-04-23-wordpress-on-heroku.md","relative_path":"_posts/2015-04-23-wordpress-on-heroku.md","url":"/blog/wordpress-on-heroku/","id":"/blog/wordpress-on-heroku","collection":"posts","draft":false,"categories":["tutorials"],"layout":"post","title":"Wordpress on Heroku","date":"2015-09-23 20:12:00 +0000","tags":["heroku","wordpress","wordpress on heroku","blogging"],"slug":"wordpress-on-heroku","ext":".md"},"url":"/blog/jekyll-is-awesome/","id":"/blog/jekyll-is-awesome","collection":"posts","excerpt":"Everything should be as simple as jekyll makes it","draft":false,"categories":["opinion pieces"],"layout":"post","title":"Jekyll is awesome","tags":["jekyll","blogging","static development"],"date":"2015-10-03 00:00:00 +0000","slug":"jekyll-is-awesome","ext":".md"},"url":"/blog/funkwhale/","id":"/blog/funkwhale","collection":"posts","excerpt":"Funkwhale is what Grooveshark should've been","draft":false,"categories":["opinion pieces"],"layout":"post","title":"Funkwhale","tags":["ideas","music"],"date":"2019-04-26 00:00:00 +0000","slug":"funkwhale","ext":".md"},"path":"_posts/2015-10-3-jekyll-is-awesome.md","output":"\n\n\n \n \n \n \n \n \n\n Jekyll is awesome\n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n\n\n\n \n\n
\n \n
\n\n\n
\n
\n

Jekyll is awesome

\n

Oct 3, 2015 | |

\n
\n \n
\n

Wordpress is everybody’s favourite blogging platform. It’s simple, and you can be up and running within minutes. There’s a few caveats, though: your site isn’t as customizable as a self-hosted installation of wordpress can be and that can be a little more complicated to set up. Then once it’s setup you’ll end up with a slow-as-mud website and no upward scalability. What if in the future you wanted to add a rails application to your website and move the blog to a subdomain? Can’t do that here.

\n\n

Simplicity is the name of the game. With Jekyll your content is the first thing you start creating, then you have Jekyll build your site and you’re left with a completely static website that you can host almost anywhere. The advantages to this are great: since the site is static and doesn’t require a database, hosting it is a cynch. You might even be able to host it for free! Since there’s no database there’s nothing a naughty user can mess with to damage your site. Finally since there’s no database calls to be made your site becomes incredibly fast. I think the pros far outweight the cons. If you don’t mind your site’s code being public then you can host it completely for free on github pages, too. Then it’s just a matter of pointing your domain there, setting up your cname file (a painless and simple setup) and you’re done!

\n\n

Jekyll isn’t for everything, though. It’s not going to replace Ruby on Rails and you’re not about to build a large scale web application with it. The best fit for a Jekyll site is, I think, most often the one that needs it most: users that want to build a website, but don’t want to pay an arm and a leg to just get a simple message out there. Even if programming isn’t your thing setting Jekyll up is a breeze, and I can help you out with that.

\n\n
\n
\n \n\n\n \n\n \n\n\n","content":"

Wordpress is everybody’s favourite blogging platform. It’s simple, and you can be up and running within minutes. There’s a few caveats, though: your site isn’t as customizable as a self-hosted installation of wordpress can be and that can be a little more complicated to set up. Then once it’s setup you’ll end up with a slow-as-mud website and no upward scalability. What if in the future you wanted to add a rails application to your website and move the blog to a subdomain? Can’t do that here.

\n\n

Simplicity is the name of the game. With Jekyll your content is the first thing you start creating, then you have Jekyll build your site and you’re left with a completely static website that you can host almost anywhere. The advantages to this are great: since the site is static and doesn’t require a database, hosting it is a cynch. You might even be able to host it for free! Since there’s no database there’s nothing a naughty user can mess with to damage your site. Finally since there’s no database calls to be made your site becomes incredibly fast. I think the pros far outweight the cons. If you don’t mind your site’s code being public then you can host it completely for free on github pages, too. Then it’s just a matter of pointing your domain there, setting up your cname file (a painless and simple setup) and you’re done!

\n\n

Jekyll isn’t for everything, though. It’s not going to replace Ruby on Rails and you’re not about to build a large scale web application with it. The best fit for a Jekyll site is, I think, most often the one that needs it most: users that want to build a website, but don’t want to pay an arm and a leg to just get a simple message out there. Even if programming isn’t your thing setting Jekyll up is a breeze, and I can help you out with that.

\n","relative_path":"_posts/2015-10-3-jekyll-is-awesome.md","previous":{"next":{"next":{"path":"_posts/2019-04-26-funkwhale.md","relative_path":"_posts/2019-04-26-funkwhale.md","url":"/blog/funkwhale/","id":"/blog/funkwhale","collection":"posts","draft":false,"categories":["opinion pieces"],"layout":"post","title":"Funkwhale","tags":["ideas","music"],"date":"2019-04-26 00:00:00 +0000","slug":"funkwhale","ext":".md"},"path":"_posts/2015-10-3-jekyll-is-awesome.md","output":"\n\n\n \n \n \n \n \n \n\n Jekyll is awesome\n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n\n\n\n \n\n
\n \n
\n\n\n
\n
\n

Jekyll is awesome

\n

Oct 3, 2015 | |

\n
\n \n
\n

Wordpress is everybody’s favourite blogging platform. It’s simple, and you can be up and running within minutes. There’s a few caveats, though: your site isn’t as customizable as a self-hosted installation of wordpress can be and that can be a little more complicated to set up. Then once it’s setup you’ll end up with a slow-as-mud website and no upward scalability. What if in the future you wanted to add a rails application to your website and move the blog to a subdomain? Can’t do that here.

\n\n

Simplicity is the name of the game. With Jekyll your content is the first thing you start creating, then you have Jekyll build your site and you’re left with a completely static website that you can host almost anywhere. The advantages to this are great: since the site is static and doesn’t require a database, hosting it is a cynch. You might even be able to host it for free! Since there’s no database there’s nothing a naughty user can mess with to damage your site. Finally since there’s no database calls to be made your site becomes incredibly fast. I think the pros far outweight the cons. If you don’t mind your site’s code being public then you can host it completely for free on github pages, too. Then it’s just a matter of pointing your domain there, setting up your cname file (a painless and simple setup) and you’re done!

\n\n

Jekyll isn’t for everything, though. It’s not going to replace Ruby on Rails and you’re not about to build a large scale web application with it. The best fit for a Jekyll site is, I think, most often the one that needs it most: users that want to build a website, but don’t want to pay an arm and a leg to just get a simple message out there. Even if programming isn’t your thing setting Jekyll up is a breeze, and I can help you out with that.

\n\n
\n
\n \n\n\n \n\n \n\n\n","content":"

Wordpress is everybody’s favourite blogging platform. It’s simple, and you can be up and running within minutes. There’s a few caveats, though: your site isn’t as customizable as a self-hosted installation of wordpress can be and that can be a little more complicated to set up. Then once it’s setup you’ll end up with a slow-as-mud website and no upward scalability. What if in the future you wanted to add a rails application to your website and move the blog to a subdomain? Can’t do that here.

\n\n

Simplicity is the name of the game. With Jekyll your content is the first thing you start creating, then you have Jekyll build your site and you’re left with a completely static website that you can host almost anywhere. The advantages to this are great: since the site is static and doesn’t require a database, hosting it is a cynch. You might even be able to host it for free! Since there’s no database there’s nothing a naughty user can mess with to damage your site. Finally since there’s no database calls to be made your site becomes incredibly fast. I think the pros far outweight the cons. If you don’t mind your site’s code being public then you can host it completely for free on github pages, too. Then it’s just a matter of pointing your domain there, setting up your cname file (a painless and simple setup) and you’re done!

\n\n

Jekyll isn’t for everything, though. It’s not going to replace Ruby on Rails and you’re not about to build a large scale web application with it. The best fit for a Jekyll site is, I think, most often the one that needs it most: users that want to build a website, but don’t want to pay an arm and a leg to just get a simple message out there. Even if programming isn’t your thing setting Jekyll up is a breeze, and I can help you out with that.

\n","relative_path":"_posts/2015-10-3-jekyll-is-awesome.md","previous":{"path":"_posts/2015-04-23-wordpress-on-heroku.md","relative_path":"_posts/2015-04-23-wordpress-on-heroku.md","url":"/blog/wordpress-on-heroku/","id":"/blog/wordpress-on-heroku","collection":"posts","draft":false,"categories":["tutorials"],"layout":"post","title":"Wordpress on Heroku","date":"2015-09-23 20:12:00 +0000","tags":["heroku","wordpress","wordpress on heroku","blogging"],"slug":"wordpress-on-heroku","ext":".md"},"url":"/blog/jekyll-is-awesome/","id":"/blog/jekyll-is-awesome","collection":"posts","excerpt":"Everything should be as simple as jekyll makes it","draft":false,"categories":["opinion pieces"],"layout":"post","title":"Jekyll is awesome","tags":["jekyll","blogging","static development"],"date":"2015-10-03 00:00:00 +0000","slug":"jekyll-is-awesome","ext":".md"},"path":"_posts/2015-04-23-wordpress-on-heroku.md","output":"\n\n\n \n \n \n \n \n \n\n Wordpress on Heroku\n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n\n\n\n \n\n
\n \n
\n\n\n
\n
\n

Wordpress on Heroku

\n

Sep 23, 2015 | |

\n
\n \n
\n

Wordpress on Heroku is great, but difficult to setup. You will need to sign up for Amazon Web Services and Heroku. You’ll need to install the Heroku toolbelt on your machine using “wget -qO- https://toolbelt.heroku.com/install-ubuntu.sh | sh”. I’ll assume you’re running Linux for this, but I’ll see about a Windows tutorial as well later on. Setting up AWS is also not going to be covered right now in this tutorial.

\n
    \n\t
  1. The first thing to do is setup LAMP on your Linux machine.
  2. \n\t
  3. Next get the latest version of Wordpress. Download it and unzip the file into your \"/var/www/html/\" folder.
  4. \n\t
  5. Download Amazon Web Services and Amazon S3 and Cloudfront.
  6. \n\t
  7. Unzip both of Amazon Web Services and Amazon S3 and Cloudfront into the wp-content/plugins folder.
  8. \n\t
  9. You should have been given access keys for your AWS user. Add them to your wp-config.php file like this:\n \t

    // AWS Access Keys //
    \n \tdefine( 'AWS_ACCESS_KEY_ID', 'your_aws_access_key_id_here' );
    \n \tdefine( 'AWS_SECRET_ACCESS_KEY', 'your_aws_secret_access_key_here' );

    \n
  10. \n\t
  11. Go here and add your Unique Keys and Salts to your wp-config.php file like below:\n \t

    define('AUTH_KEY', 'put your unique phrase here');
    \n \tdefine('SECURE_AUTH_KEY', 'put your unique phrase here');
    \n \tdefine('LOGGED_IN_KEY', 'put your unique phrase here');
    \n \tdefine('NONCE_KEY', 'put your unique phrase here');
    \n \tdefine('AUTH_SALT', 'put your unique phrase here');
    \n \tdefine('SECURE_AUTH_SALT', 'put your unique phrase here');
    \n \tdefine('LOGGED_IN_SALT', 'put your unique phrase here');
    \n \tdefine('NONCE_SALT', 'put your unique phrase here');

    \n
  12. \n\t
  13. Go to localhost/wordpress/ and run through the installation using the MySQL credentials you setup while setting up your LAMP stack. Check here if you're not sure what to do.
  14. \n\t
  15. Go to your dashboard, and click on the plugins tab.
  16. \n\t
  17. Activate both the Amazon Web Services and Amazon S3 and Cloudfront plugins. There should now be another tab at the bottom that says \"AWS\". If your AWS User is setup correctly then they should both work immediately and allow you to connect to a bucket.
  18. \n\t
  19. Go into your wordpress folder and open a terminal session there.
  20. \n\t
  21. In your terminal type $ git init That'll initialize the whole thing as a git repository.
  22. \n\t
  23. In your terminal type git add . to get all the WP files ready to be committed. This will take a second or two.
  24. \n\t
  25. Now type git commit -m 'Add your own commit message here' Wait for the wall of text to stop running.
  26. \n\t
  27. Now type heroku create That'll create a new Heroku app from that directory.
  28. \n\t
  29. Type heroku addons:add cleardb If all goes well then you're almost ready to push your installation to Heroku.
  30. \n\t
  31. Copy the code below with the Unique Keys and Salts you got earlier:\n \t

    heroku config:set AUTH_KEY='put your unique phrase here'
    \n \tSECURE_AUTH_KEY='put your unique phrase here'
    \n \tLOGGED_IN_KEY='put your unique phrase here'
    \n \tNONCE_KEY='put your unique phrase here'
    \n \tAUTH_SALT='put your unique phrase here'
    \n \tSECURE_AUTH_SALT='put your unique phrase here'
    \n \tLOGGED_IN_SALT='put your unique phrase here'
    \n \tNONCE_SALT='put your unique phrase here'

    \n
  32. \n\t
  33. Again in the terminal type git checkout -b production You'll store your production environment variables here.
  34. \n\t
  35. Add this line to your wp-config.php file:\n\t

    $db = parse_url($_ENV[\"CLEARDB_DATABASE_URL\"]);

    \n
  36. \n\t
  37. Change your database information in wp-config.php to the code below:\n \t

    define('DB_NAME', trim($db[\"path\"],\"/\"));
    \n \tdefine('DB_USER', $db[\"user\"]);
    \n \tdefine('DB_PASSWORD', $db[\"pass\"]);
    \n \tdefine('DB_HOST', $db[\"host\"]);

    \n
  38. \n\t
  39. Change your Unthentication Unique Keys and Salts to the below:\n \t

    define('AUTH_KEY', getenv('AUTH_KEY'));
    \n \tdefine('SECURE_AUTH_KEY', getenv('SECURE_AUTH_KEY'));
    \n \tdefine('LOGGED_IN_KEY', getenv('LOGGED_IN_KEY'));
    \n \tdefine('NONCE_KEY', getenv('NONCE_KEY'));
    \n \tdefine('AUTH_SALT', getenv('AUTH_SALT'));
    \n \tdefine('SECURE_AUTH_SALT', getenv('SECURE_AUTH_SALT'));
    \n \tdefine('LOGGED_IN_SALT', getenv('LOGGED_IN_SALT'));
    \n \tdefine('NONCE_SALT', getenv('NONCE_SALT'));
    \n \tdefine('AWS_ACCESS_KEY_ID', getenv('AWS_ACCESS_KEY_ID'));
    \n \tdefine('AWS_SECRET_ACCESS_KEY', getenv('AWS_SECRET_ACCESS_KEY'));

    \n
  40. \n\t
  41. Now you're all set. Type git push heroku production:master and let it finish. When that's done you can go to \"http://yourwordpressapp.heroku.com\" and complete your remote installation.\n
      \n\t
    1. In order to check out your remote installation simply switch back to the master branch with git checkout master
    2. \n
    \n
  42. \n
\n

Updating Wordpress

\n\n

If you need to update Wordpress (mine updated twice while I was working on this) you’ll need to take a few steps:

\n
    \n\t
  1. In a terminal in the html folder run sudo chown -R www-data:www-data wordpress/ That'll let you update wordpress locally through the app.
  2. \n\t
  3. Make sure you're on the master branch and update WP via the dashboard.
  4. \n\t
  5. Once Wordpress is finished updating run sudo chown -R your_user:your_user wordpress/ Now you'll be able to edit the folder yourself again.
  6. \n\t
  7. Commit the changes made by the update.
  8. \n\t
  9. Switch to the production branch and merge with master by running git merge master This shouldn't create any conflicts (it didn't with me).
  10. \n\t
  11. The wp-config file should be untouched, but check it just in case. If it doesn't have your production settings, simply edit the file again, and commit changes.
  12. \n\t
  13. Now run git push heroku production:master again, wait and your remote installation will be updated.\n
      \n\t
    • Remember to switch back to the master branch to get your local installation working again.
    • \n
    \n
  14. \n
\n

Adding/updating themes and plugins

\n\n

Adding/updating themes and plugins is easy.

\n
    \n\t
  1. Download the theme or plugin.
  2. \n\t
  3. Make sure you're in your master branch. Unzip the theme/folder into it's respective folder.
  4. \n\t
  5. In your local installation active the theme or plugin.
  6. \n\t
  7. Commit the changes, then switch to production.
  8. \n\t
  9. Run git merge master This should not create any conflicts if the plugin/theme is new.\n
      \n\t
    • If you're updating a conflict might be caused. If so, then in the terminal type git reset --hard
    • \n\t
    • Delete the older plugin/theme and replace with the new one, then merge again.
    • \n
    \n
  10. \n\t
  11. The wp-config file should be untouched, but check it just in case. If it doesn't have your production settings, simply edit the file again, and commit changes.
  12. \n\t
  13. Now run git push heroku production:master again, wait and your remote installation should now have the plugin/theme.\n
      \n\t
    • Go to \"http://yourwordpressapp.heroku.com/wp-admin\" and Wordpress might ask you to update the database. Simply go ahead and everything should work fine.
    • \n
    \n
  14. \n
\n\n
\n
\n \n\n\n \n\n \n\n\n","content":"

Wordpress on Heroku is great, but difficult to setup. You will need to sign up for Amazon Web Services and Heroku. You’ll need to install the Heroku toolbelt on your machine using “wget -qO- https://toolbelt.heroku.com/install-ubuntu.sh | sh”. I’ll assume you’re running Linux for this, but I’ll see about a Windows tutorial as well later on. Setting up AWS is also not going to be covered right now in this tutorial.

\n
    \n\t
  1. The first thing to do is setup LAMP on your Linux machine.
  2. \n\t
  3. Next get the latest version of Wordpress. Download it and unzip the file into your \"/var/www/html/\" folder.
  4. \n\t
  5. Download Amazon Web Services and Amazon S3 and Cloudfront.
  6. \n\t
  7. Unzip both of Amazon Web Services and Amazon S3 and Cloudfront into the wp-content/plugins folder.
  8. \n\t
  9. You should have been given access keys for your AWS user. Add them to your wp-config.php file like this:\n \t

    // AWS Access Keys //
    \n \tdefine( 'AWS_ACCESS_KEY_ID', 'your_aws_access_key_id_here' );
    \n \tdefine( 'AWS_SECRET_ACCESS_KEY', 'your_aws_secret_access_key_here' );

    \n
  10. \n\t
  11. Go here and add your Unique Keys and Salts to your wp-config.php file like below:\n \t

    define('AUTH_KEY', 'put your unique phrase here');
    \n \tdefine('SECURE_AUTH_KEY', 'put your unique phrase here');
    \n \tdefine('LOGGED_IN_KEY', 'put your unique phrase here');
    \n \tdefine('NONCE_KEY', 'put your unique phrase here');
    \n \tdefine('AUTH_SALT', 'put your unique phrase here');
    \n \tdefine('SECURE_AUTH_SALT', 'put your unique phrase here');
    \n \tdefine('LOGGED_IN_SALT', 'put your unique phrase here');
    \n \tdefine('NONCE_SALT', 'put your unique phrase here');

    \n
  12. \n\t
  13. Go to localhost/wordpress/ and run through the installation using the MySQL credentials you setup while setting up your LAMP stack. Check here if you're not sure what to do.
  14. \n\t
  15. Go to your dashboard, and click on the plugins tab.
  16. \n\t
  17. Activate both the Amazon Web Services and Amazon S3 and Cloudfront plugins. There should now be another tab at the bottom that says \"AWS\". If your AWS User is setup correctly then they should both work immediately and allow you to connect to a bucket.
  18. \n\t
  19. Go into your wordpress folder and open a terminal session there.
  20. \n\t
  21. In your terminal type $ git init That'll initialize the whole thing as a git repository.
  22. \n\t
  23. In your terminal type git add . to get all the WP files ready to be committed. This will take a second or two.
  24. \n\t
  25. Now type git commit -m 'Add your own commit message here' Wait for the wall of text to stop running.
  26. \n\t
  27. Now type heroku create That'll create a new Heroku app from that directory.
  28. \n\t
  29. Type heroku addons:add cleardb If all goes well then you're almost ready to push your installation to Heroku.
  30. \n\t
  31. Copy the code below with the Unique Keys and Salts you got earlier:\n \t

    heroku config:set AUTH_KEY='put your unique phrase here'
    \n \tSECURE_AUTH_KEY='put your unique phrase here'
    \n \tLOGGED_IN_KEY='put your unique phrase here'
    \n \tNONCE_KEY='put your unique phrase here'
    \n \tAUTH_SALT='put your unique phrase here'
    \n \tSECURE_AUTH_SALT='put your unique phrase here'
    \n \tLOGGED_IN_SALT='put your unique phrase here'
    \n \tNONCE_SALT='put your unique phrase here'

    \n
  32. \n\t
  33. Again in the terminal type git checkout -b production You'll store your production environment variables here.
  34. \n\t
  35. Add this line to your wp-config.php file:\n\t

    $db = parse_url($_ENV[\"CLEARDB_DATABASE_URL\"]);

    \n
  36. \n\t
  37. Change your database information in wp-config.php to the code below:\n \t

    define('DB_NAME', trim($db[\"path\"],\"/\"));
    \n \tdefine('DB_USER', $db[\"user\"]);
    \n \tdefine('DB_PASSWORD', $db[\"pass\"]);
    \n \tdefine('DB_HOST', $db[\"host\"]);

    \n
  38. \n\t
  39. Change your Unthentication Unique Keys and Salts to the below:\n \t

    define('AUTH_KEY', getenv('AUTH_KEY'));
    \n \tdefine('SECURE_AUTH_KEY', getenv('SECURE_AUTH_KEY'));
    \n \tdefine('LOGGED_IN_KEY', getenv('LOGGED_IN_KEY'));
    \n \tdefine('NONCE_KEY', getenv('NONCE_KEY'));
    \n \tdefine('AUTH_SALT', getenv('AUTH_SALT'));
    \n \tdefine('SECURE_AUTH_SALT', getenv('SECURE_AUTH_SALT'));
    \n \tdefine('LOGGED_IN_SALT', getenv('LOGGED_IN_SALT'));
    \n \tdefine('NONCE_SALT', getenv('NONCE_SALT'));
    \n \tdefine('AWS_ACCESS_KEY_ID', getenv('AWS_ACCESS_KEY_ID'));
    \n \tdefine('AWS_SECRET_ACCESS_KEY', getenv('AWS_SECRET_ACCESS_KEY'));

    \n
  40. \n\t
  41. Now you're all set. Type git push heroku production:master and let it finish. When that's done you can go to \"http://yourwordpressapp.heroku.com\" and complete your remote installation.\n
      \n\t
    1. In order to check out your remote installation simply switch back to the master branch with git checkout master
    2. \n
    \n
  42. \n
\n

Updating Wordpress

\n\n

If you need to update Wordpress (mine updated twice while I was working on this) you’ll need to take a few steps:

\n
    \n\t
  1. In a terminal in the html folder run sudo chown -R www-data:www-data wordpress/ That'll let you update wordpress locally through the app.
  2. \n\t
  3. Make sure you're on the master branch and update WP via the dashboard.
  4. \n\t
  5. Once Wordpress is finished updating run sudo chown -R your_user:your_user wordpress/ Now you'll be able to edit the folder yourself again.
  6. \n\t
  7. Commit the changes made by the update.
  8. \n\t
  9. Switch to the production branch and merge with master by running git merge master This shouldn't create any conflicts (it didn't with me).
  10. \n\t
  11. The wp-config file should be untouched, but check it just in case. If it doesn't have your production settings, simply edit the file again, and commit changes.
  12. \n\t
  13. Now run git push heroku production:master again, wait and your remote installation will be updated.\n
      \n\t
    • Remember to switch back to the master branch to get your local installation working again.
    • \n
    \n
  14. \n
\n

Adding/updating themes and plugins

\n\n

Adding/updating themes and plugins is easy.

\n
    \n\t
  1. Download the theme or plugin.
  2. \n\t
  3. Make sure you're in your master branch. Unzip the theme/folder into it's respective folder.
  4. \n\t
  5. In your local installation active the theme or plugin.
  6. \n\t
  7. Commit the changes, then switch to production.
  8. \n\t
  9. Run git merge master This should not create any conflicts if the plugin/theme is new.\n
      \n\t
    • If you're updating a conflict might be caused. If so, then in the terminal type git reset --hard
    • \n\t
    • Delete the older plugin/theme and replace with the new one, then merge again.
    • \n
    \n
  10. \n\t
  11. The wp-config file should be untouched, but check it just in case. If it doesn't have your production settings, simply edit the file again, and commit changes.
  12. \n\t
  13. Now run git push heroku production:master again, wait and your remote installation should now have the plugin/theme.\n
      \n\t
    • Go to \"http://yourwordpressapp.heroku.com/wp-admin\" and Wordpress might ask you to update the database. Simply go ahead and everything should work fine.
    • \n
    \n
  14. \n
\n","relative_path":"_posts/2015-04-23-wordpress-on-heroku.md","previous":null,"url":"/blog/wordpress-on-heroku/","id":"/blog/wordpress-on-heroku","collection":"posts","excerpt":"Wordpress on Heroku is great, but difficult to setup...","draft":false,"categories":["tutorials"],"layout":"post","title":"Wordpress on Heroku","date":"2015-09-23 20:12:00 +0000","tags":["heroku","wordpress","wordpress on heroku","blogging"],"slug":"wordpress-on-heroku","ext":".md"},"url":"/blog/jekyll-is-awesome/","id":"/blog/jekyll-is-awesome","collection":"posts","excerpt":"Everything should be as simple as jekyll makes it","draft":false,"categories":["opinion pieces"],"layout":"post","title":"Jekyll is awesome","tags":["jekyll","blogging","static development"],"date":"2015-10-03 00:00:00 +0000","slug":"jekyll-is-awesome","ext":".md"}); posts.push({"next":{"next":{"next":{"path":"_posts/2019-06-18-bitwarden-vs-dashlane.md","relative_path":"_posts/2019-06-18-bitwarden-vs-dashlane.md","url":"/blog/bitwarden-vs-dashlane/","id":"/blog/bitwarden-vs-dashlane","collection":"posts","draft":false,"categories":["opinion pieces"],"layout":"post","title":"Bitwarden vs Dashlane","tags":["comparison","password manager"],"date":"2019-06-18 00:00:00 +0000","slug":"bitwarden-vs-dashlane","ext":".md"},"path":"_posts/2019-04-26-funkwhale.md","output":"\n\n\n \n \n \n \n \n \n\n Funkwhale\n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n\n\n\n \n\n
\n \n
\n\n\n
\n
\n

Funkwhale

\n

Apr 26, 2019 | |

\n
\n \n \n
\n \n\n\n \n\n \n\n\n","content":"

Funkwhale is an open source grooveshark clone that anyone can self host. Since it offers a docker installation, spinning up an intance shouldn’t be too difficult, and the modest hardware requirements mean hosting should’nt cost much more than a couple dollars a month.

\n","relative_path":"_posts/2019-04-26-funkwhale.md","previous":{"path":"_posts/2015-10-3-jekyll-is-awesome.md","relative_path":"_posts/2015-10-3-jekyll-is-awesome.md","url":"/blog/jekyll-is-awesome/","id":"/blog/jekyll-is-awesome","collection":"posts","draft":false,"categories":["opinion pieces"],"layout":"post","title":"Jekyll is awesome","tags":["jekyll","blogging","static development"],"date":"2015-10-03 00:00:00 +0000","slug":"jekyll-is-awesome","ext":".md"},"url":"/blog/funkwhale/","id":"/blog/funkwhale","collection":"posts","excerpt":"Funkwhale is what Grooveshark should've been","draft":false,"categories":["opinion pieces"],"layout":"post","title":"Funkwhale","tags":["ideas","music"],"date":"2019-04-26 00:00:00 +0000","slug":"funkwhale","ext":".md"},"path":"_posts/2015-10-3-jekyll-is-awesome.md","output":"\n\n\n \n \n \n \n \n \n\n Jekyll is awesome\n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n\n\n\n \n\n
\n \n
\n\n\n
\n
\n

Jekyll is awesome

\n

Oct 3, 2015 | |

\n
\n \n
\n

Wordpress is everybody’s favourite blogging platform. It’s simple, and you can be up and running within minutes. There’s a few caveats, though: your site isn’t as customizable as a self-hosted installation of wordpress can be and that can be a little more complicated to set up. Then once it’s setup you’ll end up with a slow-as-mud website and no upward scalability. What if in the future you wanted to add a rails application to your website and move the blog to a subdomain? Can’t do that here.

\n\n

Simplicity is the name of the game. With Jekyll your content is the first thing you start creating, then you have Jekyll build your site and you’re left with a completely static website that you can host almost anywhere. The advantages to this are great: since the site is static and doesn’t require a database, hosting it is a cynch. You might even be able to host it for free! Since there’s no database there’s nothing a naughty user can mess with to damage your site. Finally since there’s no database calls to be made your site becomes incredibly fast. I think the pros far outweight the cons. If you don’t mind your site’s code being public then you can host it completely for free on github pages, too. Then it’s just a matter of pointing your domain there, setting up your cname file (a painless and simple setup) and you’re done!

\n\n

Jekyll isn’t for everything, though. It’s not going to replace Ruby on Rails and you’re not about to build a large scale web application with it. The best fit for a Jekyll site is, I think, most often the one that needs it most: users that want to build a website, but don’t want to pay an arm and a leg to just get a simple message out there. Even if programming isn’t your thing setting Jekyll up is a breeze, and I can help you out with that.

\n\n
\n
\n \n\n\n \n\n \n\n\n","content":"

Wordpress is everybody’s favourite blogging platform. It’s simple, and you can be up and running within minutes. There’s a few caveats, though: your site isn’t as customizable as a self-hosted installation of wordpress can be and that can be a little more complicated to set up. Then once it’s setup you’ll end up with a slow-as-mud website and no upward scalability. What if in the future you wanted to add a rails application to your website and move the blog to a subdomain? Can’t do that here.

\n\n

Simplicity is the name of the game. With Jekyll your content is the first thing you start creating, then you have Jekyll build your site and you’re left with a completely static website that you can host almost anywhere. The advantages to this are great: since the site is static and doesn’t require a database, hosting it is a cynch. You might even be able to host it for free! Since there’s no database there’s nothing a naughty user can mess with to damage your site. Finally since there’s no database calls to be made your site becomes incredibly fast. I think the pros far outweight the cons. If you don’t mind your site’s code being public then you can host it completely for free on github pages, too. Then it’s just a matter of pointing your domain there, setting up your cname file (a painless and simple setup) and you’re done!

\n\n

Jekyll isn’t for everything, though. It’s not going to replace Ruby on Rails and you’re not about to build a large scale web application with it. The best fit for a Jekyll site is, I think, most often the one that needs it most: users that want to build a website, but don’t want to pay an arm and a leg to just get a simple message out there. Even if programming isn’t your thing setting Jekyll up is a breeze, and I can help you out with that.

\n","relative_path":"_posts/2015-10-3-jekyll-is-awesome.md","previous":{"next":{"path":"_posts/2015-10-3-jekyll-is-awesome.md","relative_path":"_posts/2015-10-3-jekyll-is-awesome.md","url":"/blog/jekyll-is-awesome/","id":"/blog/jekyll-is-awesome","collection":"posts","draft":false,"categories":["opinion pieces"],"layout":"post","title":"Jekyll is awesome","tags":["jekyll","blogging","static development"],"date":"2015-10-03 00:00:00 +0000","slug":"jekyll-is-awesome","ext":".md"},"path":"_posts/2015-04-23-wordpress-on-heroku.md","output":"\n\n\n \n \n \n \n \n \n\n Wordpress on Heroku\n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n\n\n\n \n\n
\n \n
\n\n\n
\n
\n

Wordpress on Heroku

\n

Sep 23, 2015 | |

\n
\n \n
\n

Wordpress on Heroku is great, but difficult to setup. You will need to sign up for Amazon Web Services and Heroku. You’ll need to install the Heroku toolbelt on your machine using “wget -qO- https://toolbelt.heroku.com/install-ubuntu.sh | sh”. I’ll assume you’re running Linux for this, but I’ll see about a Windows tutorial as well later on. Setting up AWS is also not going to be covered right now in this tutorial.

\n
    \n\t
  1. The first thing to do is setup LAMP on your Linux machine.
  2. \n\t
  3. Next get the latest version of Wordpress. Download it and unzip the file into your \"/var/www/html/\" folder.
  4. \n\t
  5. Download Amazon Web Services and Amazon S3 and Cloudfront.
  6. \n\t
  7. Unzip both of Amazon Web Services and Amazon S3 and Cloudfront into the wp-content/plugins folder.
  8. \n\t
  9. You should have been given access keys for your AWS user. Add them to your wp-config.php file like this:\n \t

    // AWS Access Keys //
    \n \tdefine( 'AWS_ACCESS_KEY_ID', 'your_aws_access_key_id_here' );
    \n \tdefine( 'AWS_SECRET_ACCESS_KEY', 'your_aws_secret_access_key_here' );

    \n
  10. \n\t
  11. Go here and add your Unique Keys and Salts to your wp-config.php file like below:\n \t

    define('AUTH_KEY', 'put your unique phrase here');
    \n \tdefine('SECURE_AUTH_KEY', 'put your unique phrase here');
    \n \tdefine('LOGGED_IN_KEY', 'put your unique phrase here');
    \n \tdefine('NONCE_KEY', 'put your unique phrase here');
    \n \tdefine('AUTH_SALT', 'put your unique phrase here');
    \n \tdefine('SECURE_AUTH_SALT', 'put your unique phrase here');
    \n \tdefine('LOGGED_IN_SALT', 'put your unique phrase here');
    \n \tdefine('NONCE_SALT', 'put your unique phrase here');

    \n
  12. \n\t
  13. Go to localhost/wordpress/ and run through the installation using the MySQL credentials you setup while setting up your LAMP stack. Check here if you're not sure what to do.
  14. \n\t
  15. Go to your dashboard, and click on the plugins tab.
  16. \n\t
  17. Activate both the Amazon Web Services and Amazon S3 and Cloudfront plugins. There should now be another tab at the bottom that says \"AWS\". If your AWS User is setup correctly then they should both work immediately and allow you to connect to a bucket.
  18. \n\t
  19. Go into your wordpress folder and open a terminal session there.
  20. \n\t
  21. In your terminal type $ git init That'll initialize the whole thing as a git repository.
  22. \n\t
  23. In your terminal type git add . to get all the WP files ready to be committed. This will take a second or two.
  24. \n\t
  25. Now type git commit -m 'Add your own commit message here' Wait for the wall of text to stop running.
  26. \n\t
  27. Now type heroku create That'll create a new Heroku app from that directory.
  28. \n\t
  29. Type heroku addons:add cleardb If all goes well then you're almost ready to push your installation to Heroku.
  30. \n\t
  31. Copy the code below with the Unique Keys and Salts you got earlier:\n \t

    heroku config:set AUTH_KEY='put your unique phrase here'
    \n \tSECURE_AUTH_KEY='put your unique phrase here'
    \n \tLOGGED_IN_KEY='put your unique phrase here'
    \n \tNONCE_KEY='put your unique phrase here'
    \n \tAUTH_SALT='put your unique phrase here'
    \n \tSECURE_AUTH_SALT='put your unique phrase here'
    \n \tLOGGED_IN_SALT='put your unique phrase here'
    \n \tNONCE_SALT='put your unique phrase here'

    \n
  32. \n\t
  33. Again in the terminal type git checkout -b production You'll store your production environment variables here.
  34. \n\t
  35. Add this line to your wp-config.php file:\n\t

    $db = parse_url($_ENV[\"CLEARDB_DATABASE_URL\"]);

    \n
  36. \n\t
  37. Change your database information in wp-config.php to the code below:\n \t

    define('DB_NAME', trim($db[\"path\"],\"/\"));
    \n \tdefine('DB_USER', $db[\"user\"]);
    \n \tdefine('DB_PASSWORD', $db[\"pass\"]);
    \n \tdefine('DB_HOST', $db[\"host\"]);

    \n
  38. \n\t
  39. Change your Unthentication Unique Keys and Salts to the below:\n \t

    define('AUTH_KEY', getenv('AUTH_KEY'));
    \n \tdefine('SECURE_AUTH_KEY', getenv('SECURE_AUTH_KEY'));
    \n \tdefine('LOGGED_IN_KEY', getenv('LOGGED_IN_KEY'));
    \n \tdefine('NONCE_KEY', getenv('NONCE_KEY'));
    \n \tdefine('AUTH_SALT', getenv('AUTH_SALT'));
    \n \tdefine('SECURE_AUTH_SALT', getenv('SECURE_AUTH_SALT'));
    \n \tdefine('LOGGED_IN_SALT', getenv('LOGGED_IN_SALT'));
    \n \tdefine('NONCE_SALT', getenv('NONCE_SALT'));
    \n \tdefine('AWS_ACCESS_KEY_ID', getenv('AWS_ACCESS_KEY_ID'));
    \n \tdefine('AWS_SECRET_ACCESS_KEY', getenv('AWS_SECRET_ACCESS_KEY'));

    \n
  40. \n\t
  41. Now you're all set. Type git push heroku production:master and let it finish. When that's done you can go to \"http://yourwordpressapp.heroku.com\" and complete your remote installation.\n
      \n\t
    1. In order to check out your remote installation simply switch back to the master branch with git checkout master
    2. \n
    \n
  42. \n
\n

Updating Wordpress

\n\n

If you need to update Wordpress (mine updated twice while I was working on this) you’ll need to take a few steps:

\n
    \n\t
  1. In a terminal in the html folder run sudo chown -R www-data:www-data wordpress/ That'll let you update wordpress locally through the app.
  2. \n\t
  3. Make sure you're on the master branch and update WP via the dashboard.
  4. \n\t
  5. Once Wordpress is finished updating run sudo chown -R your_user:your_user wordpress/ Now you'll be able to edit the folder yourself again.
  6. \n\t
  7. Commit the changes made by the update.
  8. \n\t
  9. Switch to the production branch and merge with master by running git merge master This shouldn't create any conflicts (it didn't with me).
  10. \n\t
  11. The wp-config file should be untouched, but check it just in case. If it doesn't have your production settings, simply edit the file again, and commit changes.
  12. \n\t
  13. Now run git push heroku production:master again, wait and your remote installation will be updated.\n
      \n\t
    • Remember to switch back to the master branch to get your local installation working again.
    • \n
    \n
  14. \n
\n

Adding/updating themes and plugins

\n\n

Adding/updating themes and plugins is easy.

\n
    \n\t
  1. Download the theme or plugin.
  2. \n\t
  3. Make sure you're in your master branch. Unzip the theme/folder into it's respective folder.
  4. \n\t
  5. In your local installation active the theme or plugin.
  6. \n\t
  7. Commit the changes, then switch to production.
  8. \n\t
  9. Run git merge master This should not create any conflicts if the plugin/theme is new.\n
      \n\t
    • If you're updating a conflict might be caused. If so, then in the terminal type git reset --hard
    • \n\t
    • Delete the older plugin/theme and replace with the new one, then merge again.
    • \n
    \n
  10. \n\t
  11. The wp-config file should be untouched, but check it just in case. If it doesn't have your production settings, simply edit the file again, and commit changes.
  12. \n\t
  13. Now run git push heroku production:master again, wait and your remote installation should now have the plugin/theme.\n
      \n\t
    • Go to \"http://yourwordpressapp.heroku.com/wp-admin\" and Wordpress might ask you to update the database. Simply go ahead and everything should work fine.
    • \n
    \n
  14. \n
\n\n
\n
\n \n\n\n \n\n \n\n\n","content":"

Wordpress on Heroku is great, but difficult to setup. You will need to sign up for Amazon Web Services and Heroku. You’ll need to install the Heroku toolbelt on your machine using “wget -qO- https://toolbelt.heroku.com/install-ubuntu.sh | sh”. I’ll assume you’re running Linux for this, but I’ll see about a Windows tutorial as well later on. Setting up AWS is also not going to be covered right now in this tutorial.

\n
    \n\t
  1. The first thing to do is setup LAMP on your Linux machine.
  2. \n\t
  3. Next get the latest version of Wordpress. Download it and unzip the file into your \"/var/www/html/\" folder.
  4. \n\t
  5. Download Amazon Web Services and Amazon S3 and Cloudfront.
  6. \n\t
  7. Unzip both of Amazon Web Services and Amazon S3 and Cloudfront into the wp-content/plugins folder.
  8. \n\t
  9. You should have been given access keys for your AWS user. Add them to your wp-config.php file like this:\n \t

    // AWS Access Keys //
    \n \tdefine( 'AWS_ACCESS_KEY_ID', 'your_aws_access_key_id_here' );
    \n \tdefine( 'AWS_SECRET_ACCESS_KEY', 'your_aws_secret_access_key_here' );

    \n
  10. \n\t
  11. Go here and add your Unique Keys and Salts to your wp-config.php file like below:\n \t

    define('AUTH_KEY', 'put your unique phrase here');
    \n \tdefine('SECURE_AUTH_KEY', 'put your unique phrase here');
    \n \tdefine('LOGGED_IN_KEY', 'put your unique phrase here');
    \n \tdefine('NONCE_KEY', 'put your unique phrase here');
    \n \tdefine('AUTH_SALT', 'put your unique phrase here');
    \n \tdefine('SECURE_AUTH_SALT', 'put your unique phrase here');
    \n \tdefine('LOGGED_IN_SALT', 'put your unique phrase here');
    \n \tdefine('NONCE_SALT', 'put your unique phrase here');

    \n
  12. \n\t
  13. Go to localhost/wordpress/ and run through the installation using the MySQL credentials you setup while setting up your LAMP stack. Check here if you're not sure what to do.
  14. \n\t
  15. Go to your dashboard, and click on the plugins tab.
  16. \n\t
  17. Activate both the Amazon Web Services and Amazon S3 and Cloudfront plugins. There should now be another tab at the bottom that says \"AWS\". If your AWS User is setup correctly then they should both work immediately and allow you to connect to a bucket.
  18. \n\t
  19. Go into your wordpress folder and open a terminal session there.
  20. \n\t
  21. In your terminal type $ git init That'll initialize the whole thing as a git repository.
  22. \n\t
  23. In your terminal type git add . to get all the WP files ready to be committed. This will take a second or two.
  24. \n\t
  25. Now type git commit -m 'Add your own commit message here' Wait for the wall of text to stop running.
  26. \n\t
  27. Now type heroku create That'll create a new Heroku app from that directory.
  28. \n\t
  29. Type heroku addons:add cleardb If all goes well then you're almost ready to push your installation to Heroku.
  30. \n\t
  31. Copy the code below with the Unique Keys and Salts you got earlier:\n \t

    heroku config:set AUTH_KEY='put your unique phrase here'
    \n \tSECURE_AUTH_KEY='put your unique phrase here'
    \n \tLOGGED_IN_KEY='put your unique phrase here'
    \n \tNONCE_KEY='put your unique phrase here'
    \n \tAUTH_SALT='put your unique phrase here'
    \n \tSECURE_AUTH_SALT='put your unique phrase here'
    \n \tLOGGED_IN_SALT='put your unique phrase here'
    \n \tNONCE_SALT='put your unique phrase here'

    \n
  32. \n\t
  33. Again in the terminal type git checkout -b production You'll store your production environment variables here.
  34. \n\t
  35. Add this line to your wp-config.php file:\n\t

    $db = parse_url($_ENV[\"CLEARDB_DATABASE_URL\"]);

    \n
  36. \n\t
  37. Change your database information in wp-config.php to the code below:\n \t

    define('DB_NAME', trim($db[\"path\"],\"/\"));
    \n \tdefine('DB_USER', $db[\"user\"]);
    \n \tdefine('DB_PASSWORD', $db[\"pass\"]);
    \n \tdefine('DB_HOST', $db[\"host\"]);

    \n
  38. \n\t
  39. Change your Unthentication Unique Keys and Salts to the below:\n \t

    define('AUTH_KEY', getenv('AUTH_KEY'));
    \n \tdefine('SECURE_AUTH_KEY', getenv('SECURE_AUTH_KEY'));
    \n \tdefine('LOGGED_IN_KEY', getenv('LOGGED_IN_KEY'));
    \n \tdefine('NONCE_KEY', getenv('NONCE_KEY'));
    \n \tdefine('AUTH_SALT', getenv('AUTH_SALT'));
    \n \tdefine('SECURE_AUTH_SALT', getenv('SECURE_AUTH_SALT'));
    \n \tdefine('LOGGED_IN_SALT', getenv('LOGGED_IN_SALT'));
    \n \tdefine('NONCE_SALT', getenv('NONCE_SALT'));
    \n \tdefine('AWS_ACCESS_KEY_ID', getenv('AWS_ACCESS_KEY_ID'));
    \n \tdefine('AWS_SECRET_ACCESS_KEY', getenv('AWS_SECRET_ACCESS_KEY'));

    \n
  40. \n\t
  41. Now you're all set. Type git push heroku production:master and let it finish. When that's done you can go to \"http://yourwordpressapp.heroku.com\" and complete your remote installation.\n
      \n\t
    1. In order to check out your remote installation simply switch back to the master branch with git checkout master
    2. \n
    \n
  42. \n
\n

Updating Wordpress

\n\n

If you need to update Wordpress (mine updated twice while I was working on this) you’ll need to take a few steps:

\n
    \n\t
  1. In a terminal in the html folder run sudo chown -R www-data:www-data wordpress/ That'll let you update wordpress locally through the app.
  2. \n\t
  3. Make sure you're on the master branch and update WP via the dashboard.
  4. \n\t
  5. Once Wordpress is finished updating run sudo chown -R your_user:your_user wordpress/ Now you'll be able to edit the folder yourself again.
  6. \n\t
  7. Commit the changes made by the update.
  8. \n\t
  9. Switch to the production branch and merge with master by running git merge master This shouldn't create any conflicts (it didn't with me).
  10. \n\t
  11. The wp-config file should be untouched, but check it just in case. If it doesn't have your production settings, simply edit the file again, and commit changes.
  12. \n\t
  13. Now run git push heroku production:master again, wait and your remote installation will be updated.\n
      \n\t
    • Remember to switch back to the master branch to get your local installation working again.
    • \n
    \n
  14. \n
\n

Adding/updating themes and plugins

\n\n

Adding/updating themes and plugins is easy.

\n
    \n\t
  1. Download the theme or plugin.
  2. \n\t
  3. Make sure you're in your master branch. Unzip the theme/folder into it's respective folder.
  4. \n\t
  5. In your local installation active the theme or plugin.
  6. \n\t
  7. Commit the changes, then switch to production.
  8. \n\t
  9. Run git merge master This should not create any conflicts if the plugin/theme is new.\n
      \n\t
    • If you're updating a conflict might be caused. If so, then in the terminal type git reset --hard
    • \n\t
    • Delete the older plugin/theme and replace with the new one, then merge again.
    • \n
    \n
  10. \n\t
  11. The wp-config file should be untouched, but check it just in case. If it doesn't have your production settings, simply edit the file again, and commit changes.
  12. \n\t
  13. Now run git push heroku production:master again, wait and your remote installation should now have the plugin/theme.\n
      \n\t
    • Go to \"http://yourwordpressapp.heroku.com/wp-admin\" and Wordpress might ask you to update the database. Simply go ahead and everything should work fine.
    • \n
    \n
  14. \n
\n","relative_path":"_posts/2015-04-23-wordpress-on-heroku.md","previous":null,"url":"/blog/wordpress-on-heroku/","id":"/blog/wordpress-on-heroku","collection":"posts","excerpt":"Wordpress on Heroku is great, but difficult to setup...","draft":false,"categories":["tutorials"],"layout":"post","title":"Wordpress on Heroku","date":"2015-09-23 20:12:00 +0000","tags":["heroku","wordpress","wordpress on heroku","blogging"],"slug":"wordpress-on-heroku","ext":".md"},"url":"/blog/jekyll-is-awesome/","id":"/blog/jekyll-is-awesome","collection":"posts","excerpt":"Everything should be as simple as jekyll makes it","draft":false,"categories":["opinion pieces"],"layout":"post","title":"Jekyll is awesome","tags":["jekyll","blogging","static development"],"date":"2015-10-03 00:00:00 +0000","slug":"jekyll-is-awesome","ext":".md"},"path":"_posts/2015-04-23-wordpress-on-heroku.md","output":"\n\n\n \n \n \n \n \n \n\n Wordpress on Heroku\n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n\n\n\n \n\n
\n \n
\n\n\n
\n
\n

Wordpress on Heroku

\n

Sep 23, 2015 | |

\n
\n \n
\n

Wordpress on Heroku is great, but difficult to setup. You will need to sign up for Amazon Web Services and Heroku. You’ll need to install the Heroku toolbelt on your machine using “wget -qO- https://toolbelt.heroku.com/install-ubuntu.sh | sh”. I’ll assume you’re running Linux for this, but I’ll see about a Windows tutorial as well later on. Setting up AWS is also not going to be covered right now in this tutorial.

\n
    \n\t
  1. The first thing to do is setup LAMP on your Linux machine.
  2. \n\t
  3. Next get the latest version of Wordpress. Download it and unzip the file into your \"/var/www/html/\" folder.
  4. \n\t
  5. Download Amazon Web Services and Amazon S3 and Cloudfront.
  6. \n\t
  7. Unzip both of Amazon Web Services and Amazon S3 and Cloudfront into the wp-content/plugins folder.
  8. \n\t
  9. You should have been given access keys for your AWS user. Add them to your wp-config.php file like this:\n \t

    // AWS Access Keys //
    \n \tdefine( 'AWS_ACCESS_KEY_ID', 'your_aws_access_key_id_here' );
    \n \tdefine( 'AWS_SECRET_ACCESS_KEY', 'your_aws_secret_access_key_here' );

    \n
  10. \n\t
  11. Go here and add your Unique Keys and Salts to your wp-config.php file like below:\n \t

    define('AUTH_KEY', 'put your unique phrase here');
    \n \tdefine('SECURE_AUTH_KEY', 'put your unique phrase here');
    \n \tdefine('LOGGED_IN_KEY', 'put your unique phrase here');
    \n \tdefine('NONCE_KEY', 'put your unique phrase here');
    \n \tdefine('AUTH_SALT', 'put your unique phrase here');
    \n \tdefine('SECURE_AUTH_SALT', 'put your unique phrase here');
    \n \tdefine('LOGGED_IN_SALT', 'put your unique phrase here');
    \n \tdefine('NONCE_SALT', 'put your unique phrase here');

    \n
  12. \n\t
  13. Go to localhost/wordpress/ and run through the installation using the MySQL credentials you setup while setting up your LAMP stack. Check here if you're not sure what to do.
  14. \n\t
  15. Go to your dashboard, and click on the plugins tab.
  16. \n\t
  17. Activate both the Amazon Web Services and Amazon S3 and Cloudfront plugins. There should now be another tab at the bottom that says \"AWS\". If your AWS User is setup correctly then they should both work immediately and allow you to connect to a bucket.
  18. \n\t
  19. Go into your wordpress folder and open a terminal session there.
  20. \n\t
  21. In your terminal type $ git init That'll initialize the whole thing as a git repository.
  22. \n\t
  23. In your terminal type git add . to get all the WP files ready to be committed. This will take a second or two.
  24. \n\t
  25. Now type git commit -m 'Add your own commit message here' Wait for the wall of text to stop running.
  26. \n\t
  27. Now type heroku create That'll create a new Heroku app from that directory.
  28. \n\t
  29. Type heroku addons:add cleardb If all goes well then you're almost ready to push your installation to Heroku.
  30. \n\t
  31. Copy the code below with the Unique Keys and Salts you got earlier:\n \t

    heroku config:set AUTH_KEY='put your unique phrase here'
    \n \tSECURE_AUTH_KEY='put your unique phrase here'
    \n \tLOGGED_IN_KEY='put your unique phrase here'
    \n \tNONCE_KEY='put your unique phrase here'
    \n \tAUTH_SALT='put your unique phrase here'
    \n \tSECURE_AUTH_SALT='put your unique phrase here'
    \n \tLOGGED_IN_SALT='put your unique phrase here'
    \n \tNONCE_SALT='put your unique phrase here'

    \n
  32. \n\t
  33. Again in the terminal type git checkout -b production You'll store your production environment variables here.
  34. \n\t
  35. Add this line to your wp-config.php file:\n\t

    $db = parse_url($_ENV[\"CLEARDB_DATABASE_URL\"]);

    \n
  36. \n\t
  37. Change your database information in wp-config.php to the code below:\n \t

    define('DB_NAME', trim($db[\"path\"],\"/\"));
    \n \tdefine('DB_USER', $db[\"user\"]);
    \n \tdefine('DB_PASSWORD', $db[\"pass\"]);
    \n \tdefine('DB_HOST', $db[\"host\"]);

    \n
  38. \n\t
  39. Change your Unthentication Unique Keys and Salts to the below:\n \t

    define('AUTH_KEY', getenv('AUTH_KEY'));
    \n \tdefine('SECURE_AUTH_KEY', getenv('SECURE_AUTH_KEY'));
    \n \tdefine('LOGGED_IN_KEY', getenv('LOGGED_IN_KEY'));
    \n \tdefine('NONCE_KEY', getenv('NONCE_KEY'));
    \n \tdefine('AUTH_SALT', getenv('AUTH_SALT'));
    \n \tdefine('SECURE_AUTH_SALT', getenv('SECURE_AUTH_SALT'));
    \n \tdefine('LOGGED_IN_SALT', getenv('LOGGED_IN_SALT'));
    \n \tdefine('NONCE_SALT', getenv('NONCE_SALT'));
    \n \tdefine('AWS_ACCESS_KEY_ID', getenv('AWS_ACCESS_KEY_ID'));
    \n \tdefine('AWS_SECRET_ACCESS_KEY', getenv('AWS_SECRET_ACCESS_KEY'));

    \n
  40. \n\t
  41. Now you're all set. Type git push heroku production:master and let it finish. When that's done you can go to \"http://yourwordpressapp.heroku.com\" and complete your remote installation.\n
      \n\t
    1. In order to check out your remote installation simply switch back to the master branch with git checkout master
    2. \n
    \n
  42. \n
\n

Updating Wordpress

\n\n

If you need to update Wordpress (mine updated twice while I was working on this) you’ll need to take a few steps:

\n
    \n\t
  1. In a terminal in the html folder run sudo chown -R www-data:www-data wordpress/ That'll let you update wordpress locally through the app.
  2. \n\t
  3. Make sure you're on the master branch and update WP via the dashboard.
  4. \n\t
  5. Once Wordpress is finished updating run sudo chown -R your_user:your_user wordpress/ Now you'll be able to edit the folder yourself again.
  6. \n\t
  7. Commit the changes made by the update.
  8. \n\t
  9. Switch to the production branch and merge with master by running git merge master This shouldn't create any conflicts (it didn't with me).
  10. \n\t
  11. The wp-config file should be untouched, but check it just in case. If it doesn't have your production settings, simply edit the file again, and commit changes.
  12. \n\t
  13. Now run git push heroku production:master again, wait and your remote installation will be updated.\n
      \n\t
    • Remember to switch back to the master branch to get your local installation working again.
    • \n
    \n
  14. \n
\n

Adding/updating themes and plugins

\n\n

Adding/updating themes and plugins is easy.

\n
    \n\t
  1. Download the theme or plugin.
  2. \n\t
  3. Make sure you're in your master branch. Unzip the theme/folder into it's respective folder.
  4. \n\t
  5. In your local installation active the theme or plugin.
  6. \n\t
  7. Commit the changes, then switch to production.
  8. \n\t
  9. Run git merge master This should not create any conflicts if the plugin/theme is new.\n
      \n\t
    • If you're updating a conflict might be caused. If so, then in the terminal type git reset --hard
    • \n\t
    • Delete the older plugin/theme and replace with the new one, then merge again.
    • \n
    \n
  10. \n\t
  11. The wp-config file should be untouched, but check it just in case. If it doesn't have your production settings, simply edit the file again, and commit changes.
  12. \n\t
  13. Now run git push heroku production:master again, wait and your remote installation should now have the plugin/theme.\n
      \n\t
    • Go to \"http://yourwordpressapp.heroku.com/wp-admin\" and Wordpress might ask you to update the database. Simply go ahead and everything should work fine.
    • \n
    \n
  14. \n
\n\n
\n
\n \n\n\n \n\n \n\n\n","content":"

Wordpress on Heroku is great, but difficult to setup. You will need to sign up for Amazon Web Services and Heroku. You’ll need to install the Heroku toolbelt on your machine using “wget -qO- https://toolbelt.heroku.com/install-ubuntu.sh | sh”. I’ll assume you’re running Linux for this, but I’ll see about a Windows tutorial as well later on. Setting up AWS is also not going to be covered right now in this tutorial.

\n
    \n\t
  1. The first thing to do is setup LAMP on your Linux machine.
  2. \n\t
  3. Next get the latest version of Wordpress. Download it and unzip the file into your \"/var/www/html/\" folder.
  4. \n\t
  5. Download Amazon Web Services and Amazon S3 and Cloudfront.
  6. \n\t
  7. Unzip both of Amazon Web Services and Amazon S3 and Cloudfront into the wp-content/plugins folder.
  8. \n\t
  9. You should have been given access keys for your AWS user. Add them to your wp-config.php file like this:\n \t

    // AWS Access Keys //
    \n \tdefine( 'AWS_ACCESS_KEY_ID', 'your_aws_access_key_id_here' );
    \n \tdefine( 'AWS_SECRET_ACCESS_KEY', 'your_aws_secret_access_key_here' );

    \n
  10. \n\t
  11. Go here and add your Unique Keys and Salts to your wp-config.php file like below:\n \t

    define('AUTH_KEY', 'put your unique phrase here');
    \n \tdefine('SECURE_AUTH_KEY', 'put your unique phrase here');
    \n \tdefine('LOGGED_IN_KEY', 'put your unique phrase here');
    \n \tdefine('NONCE_KEY', 'put your unique phrase here');
    \n \tdefine('AUTH_SALT', 'put your unique phrase here');
    \n \tdefine('SECURE_AUTH_SALT', 'put your unique phrase here');
    \n \tdefine('LOGGED_IN_SALT', 'put your unique phrase here');
    \n \tdefine('NONCE_SALT', 'put your unique phrase here');

    \n
  12. \n\t
  13. Go to localhost/wordpress/ and run through the installation using the MySQL credentials you setup while setting up your LAMP stack. Check here if you're not sure what to do.
  14. \n\t
  15. Go to your dashboard, and click on the plugins tab.
  16. \n\t
  17. Activate both the Amazon Web Services and Amazon S3 and Cloudfront plugins. There should now be another tab at the bottom that says \"AWS\". If your AWS User is setup correctly then they should both work immediately and allow you to connect to a bucket.
  18. \n\t
  19. Go into your wordpress folder and open a terminal session there.
  20. \n\t
  21. In your terminal type $ git init That'll initialize the whole thing as a git repository.
  22. \n\t
  23. In your terminal type git add . to get all the WP files ready to be committed. This will take a second or two.
  24. \n\t
  25. Now type git commit -m 'Add your own commit message here' Wait for the wall of text to stop running.
  26. \n\t
  27. Now type heroku create That'll create a new Heroku app from that directory.
  28. \n\t
  29. Type heroku addons:add cleardb If all goes well then you're almost ready to push your installation to Heroku.
  30. \n\t
  31. Copy the code below with the Unique Keys and Salts you got earlier:\n \t

    heroku config:set AUTH_KEY='put your unique phrase here'
    \n \tSECURE_AUTH_KEY='put your unique phrase here'
    \n \tLOGGED_IN_KEY='put your unique phrase here'
    \n \tNONCE_KEY='put your unique phrase here'
    \n \tAUTH_SALT='put your unique phrase here'
    \n \tSECURE_AUTH_SALT='put your unique phrase here'
    \n \tLOGGED_IN_SALT='put your unique phrase here'
    \n \tNONCE_SALT='put your unique phrase here'

    \n
  32. \n\t
  33. Again in the terminal type git checkout -b production You'll store your production environment variables here.
  34. \n\t
  35. Add this line to your wp-config.php file:\n\t

    $db = parse_url($_ENV[\"CLEARDB_DATABASE_URL\"]);

    \n
  36. \n\t
  37. Change your database information in wp-config.php to the code below:\n \t

    define('DB_NAME', trim($db[\"path\"],\"/\"));
    \n \tdefine('DB_USER', $db[\"user\"]);
    \n \tdefine('DB_PASSWORD', $db[\"pass\"]);
    \n \tdefine('DB_HOST', $db[\"host\"]);

    \n
  38. \n\t
  39. Change your Unthentication Unique Keys and Salts to the below:\n \t

    define('AUTH_KEY', getenv('AUTH_KEY'));
    \n \tdefine('SECURE_AUTH_KEY', getenv('SECURE_AUTH_KEY'));
    \n \tdefine('LOGGED_IN_KEY', getenv('LOGGED_IN_KEY'));
    \n \tdefine('NONCE_KEY', getenv('NONCE_KEY'));
    \n \tdefine('AUTH_SALT', getenv('AUTH_SALT'));
    \n \tdefine('SECURE_AUTH_SALT', getenv('SECURE_AUTH_SALT'));
    \n \tdefine('LOGGED_IN_SALT', getenv('LOGGED_IN_SALT'));
    \n \tdefine('NONCE_SALT', getenv('NONCE_SALT'));
    \n \tdefine('AWS_ACCESS_KEY_ID', getenv('AWS_ACCESS_KEY_ID'));
    \n \tdefine('AWS_SECRET_ACCESS_KEY', getenv('AWS_SECRET_ACCESS_KEY'));

    \n
  40. \n\t
  41. Now you're all set. Type git push heroku production:master and let it finish. When that's done you can go to \"http://yourwordpressapp.heroku.com\" and complete your remote installation.\n
      \n\t
    1. In order to check out your remote installation simply switch back to the master branch with git checkout master
    2. \n
    \n
  42. \n
\n

Updating Wordpress

\n\n

If you need to update Wordpress (mine updated twice while I was working on this) you’ll need to take a few steps:

\n
    \n\t
  1. In a terminal in the html folder run sudo chown -R www-data:www-data wordpress/ That'll let you update wordpress locally through the app.
  2. \n\t
  3. Make sure you're on the master branch and update WP via the dashboard.
  4. \n\t
  5. Once Wordpress is finished updating run sudo chown -R your_user:your_user wordpress/ Now you'll be able to edit the folder yourself again.
  6. \n\t
  7. Commit the changes made by the update.
  8. \n\t
  9. Switch to the production branch and merge with master by running git merge master This shouldn't create any conflicts (it didn't with me).
  10. \n\t
  11. The wp-config file should be untouched, but check it just in case. If it doesn't have your production settings, simply edit the file again, and commit changes.
  12. \n\t
  13. Now run git push heroku production:master again, wait and your remote installation will be updated.\n
      \n\t
    • Remember to switch back to the master branch to get your local installation working again.
    • \n
    \n
  14. \n
\n

Adding/updating themes and plugins

\n\n

Adding/updating themes and plugins is easy.

\n
    \n\t
  1. Download the theme or plugin.
  2. \n\t
  3. Make sure you're in your master branch. Unzip the theme/folder into it's respective folder.
  4. \n\t
  5. In your local installation active the theme or plugin.
  6. \n\t
  7. Commit the changes, then switch to production.
  8. \n\t
  9. Run git merge master This should not create any conflicts if the plugin/theme is new.\n
      \n\t
    • If you're updating a conflict might be caused. If so, then in the terminal type git reset --hard
    • \n\t
    • Delete the older plugin/theme and replace with the new one, then merge again.
    • \n
    \n
  10. \n\t
  11. The wp-config file should be untouched, but check it just in case. If it doesn't have your production settings, simply edit the file again, and commit changes.
  12. \n\t
  13. Now run git push heroku production:master again, wait and your remote installation should now have the plugin/theme.\n
      \n\t
    • Go to \"http://yourwordpressapp.heroku.com/wp-admin\" and Wordpress might ask you to update the database. Simply go ahead and everything should work fine.
    • \n
    \n
  14. \n
\n","relative_path":"_posts/2015-04-23-wordpress-on-heroku.md","previous":null,"url":"/blog/wordpress-on-heroku/","id":"/blog/wordpress-on-heroku","collection":"posts","excerpt":"Wordpress on Heroku is great, but difficult to setup...","draft":false,"categories":["tutorials"],"layout":"post","title":"Wordpress on Heroku","date":"2015-09-23 20:12:00 +0000","tags":["heroku","wordpress","wordpress on heroku","blogging"],"slug":"wordpress-on-heroku","ext":".md"}); tags['blogging'] = posts; var posts = [] posts.push({"next":{"next":{"next":{"path":"_posts/2019-07-11-ledger-is-simply-amazing.md","relative_path":"_posts/2019-07-11-ledger-is-simply-amazing.md","url":"/blog/ledger-is-simply-amazing/","id":"/blog/ledger-is-simply-amazing","collection":"posts","draft":false,"categories":["gush"],"layout":"post","title":"Ledger is amazing","tags":["finance","money manager"],"date":"2019-07-11 00:00:00 +0000","slug":"ledger-is-simply-amazing","ext":".md"},"path":"_posts/2019-06-18-bitwarden-vs-dashlane.md","output":"\n\n\n \n \n \n \n \n \n\n Bitwarden vs Dashlane\n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n\n\n\n \n\n
\n \n
\n\n\n
\n
\n

Bitwarden vs Dashlane

\n

Jun 18, 2019 | |

\n
\n \n
\n

Bitwarden does everything Dashlane does, better.

\n

That’s the end of the post. You can go home, now.

\n\n
\n\n

If you want a further breakdown, consider these points:

\n\n

Security, most important, most overlooked

\n

From a pure security standpoint, it’s a toss-up between Dashlane and Bitwarden. Both offer best-in-class security, so your passwords are safe on both.

\n\n

Bitwarden offers 2FA auditing at the organization level for business users, while Dashlane does not. Enforcing is on the roadmap.

\n\n

I would add that Bitwarden can offer a little more peace of mind for two reasons:

\n\n

1. It’s open source.

\n

A great many of you just sighed, but it being open source means it can be checked constantly for issues. The source for all their software is here: http://github.com/bitwarden/

\n\n

This also means that if Bitwarden doesn’t have a feature you like, or something works in a way you don’t like, you can just change it.

\n\n

2. It’s self-hostable.

\n

Some hacker is far more likely to attack the behemoth that is Dashlane with it’s millions of user passwords, than they are to attack your little server with your 1000 passwords (at best). This also means that you are in control of your data, which is good news for the tin-foil hat wearers out there.

\n\n

You can even get Bitwarden’s paid features for the price of hosting your server by following this guide: https://www.reddit.com/r/selfhosted/comments/8usixz/let_me_introduce_you_to_bitwarden_rs_selfhosted/

\n\n
\n\n

Nobody cares about security, though, right? So let’s move on to the good stuff:

\n\n

Features, the good stuff (also price)

\n\n

Bitwarden offers every feature Dashlane does with loads more on top of those, and more of them for free. It’s paid version is also cheaper than Dashlane’s.

\n\n

Here’s a table I stole, that compares both service’s features:

\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
FeatureDashlaneBitwarden
Chrome supportyesyes
Firefox supportyesyes
Edge supportyesyes
Safari supportyesyes
Mac OS, Windows supportyesyes
Linux supportpooryes
Mac OS command-line clientnoyes
Windows command-line clientnoyes
Linux command-line clientnoyes
Android support, including auto-fillyesyes
Android auto-fill in Chromeyesyes
Auto-fill in Android work profileyesyes (1)
Android auto-fill shows full usernamesyesyes
iOS support, including auto-fillyesyes
Two-factor authenticationyesyes
YubiKey support in browser (Enterprise)noyes ($)
YubiKey support in browser (Personal)noyes ($)
YubiKey support in Androidnoyes ($)
YubiKey support in iOSnoyes ($)
Saved password in Android, iOSyesyes
Fingerprint login in Android, iOSyesyes
Synchronization across devicesyesyes
Import from LastPassyesyes
LastPass import distinguishes work from personal itemsnono
Preserves LastPass folders in some way when importingdoubtfulyes
Personal linked account support (or the equivalent)pooryes
Save location (personal vs. work) specified at creation timenoyes
Save location (folder / collection / space) editable in web appnoyes
Sensible password quality checks for master passwordnoyes
Password history on Linuxnoyes
Password history on Windows, Mac OSyesyes
Secure notesyesyes
Attachments on notes on Linuxnoyes
Attachments on notes on Windows, Mac OSyesyes
Shared folders with access control on Linuxnoyes
Shared folders with access control on Windowsyesyes
Shared folders with access control on Mac OSyesyes
Items can exist in multiple groups with distinct access controlnoyes
Nested foldersnoyes
Resists auto-filling invisible formsyesyes
Browser plugin only fills selected formunknownno
Browser plugin displays icon in form fieldsyesno
Browser plugin prompts to save new sites on Linuxyesyes
Browser plugin prompts to save new sites on Windows, Mac OSyesyes
2FA integrated into login entries in vault (Mac OS, Windows, iOS, Android)noyes
2FA integrated into login entries in vault (Linux)noyes
Auto-fill in browser disabled by defaultnoyes
Auto-fill in browser can be disabled by preferencenoyes
Admins can reset passwordsyesno
Admins can access other people’s unshared credentialsnono
Admins can reset other people’s 2fanono
2fa can be enforced at the organization levelnono (3)
2fa can be audited at the organization levelnoyes
Exporting items on Linuxnoyes
Exporting items on Windows, Mac OSyesyes
Password health reportsyesyes ($)
App export includes attachmentsunknownno
CLI export includes attachmentsnopoor (2)
Responsive to bug reports and feature requestsunknownyes
Open sourcenoyes
Option to self-hostnoyes
Users can delete own account (customer service not needed)yesyes
Admins can delete business account (customer service not needed)yesyes
Has a useful status page that can be subscribed toyesno
Number of outages in the past six months (since December, 2018)120
Enterprise price per user per month43
Personal price per user per month (no Attachments or YubiKey)4.990
Personal price per user per month (w/Attachments & YubiKey)4.990.84
\n\n

Note 1: In work profile apps Bitwarden might not pop up a dialog automatically inviting you to auto-fill, but it’ll display a notification you can tap to do it.

\n\n

Note 2: CLI allows individual attachments to be exported. The user would have to write a script to iterate through and export all of them.

\n\n

Note 3: On the product roadmap, not yet implemented as of writing (Click to see the feature request)

\n\n
\n
\n \n\n\n \n\n \n\n\n","content":"

Bitwarden does everything Dashlane does, better.

\n

That’s the end of the post. You can go home, now.

\n\n
\n\n

If you want a further breakdown, consider these points:

\n\n

Security, most important, most overlooked

\n

From a pure security standpoint, it’s a toss-up between Dashlane and Bitwarden. Both offer best-in-class security, so your passwords are safe on both.

\n\n

Bitwarden offers 2FA auditing at the organization level for business users, while Dashlane does not. Enforcing is on the roadmap.

\n\n

I would add that Bitwarden can offer a little more peace of mind for two reasons:

\n\n

1. It’s open source.

\n

A great many of you just sighed, but it being open source means it can be checked constantly for issues. The source for all their software is here: http://github.com/bitwarden/

\n\n

This also means that if Bitwarden doesn’t have a feature you like, or something works in a way you don’t like, you can just change it.

\n\n

2. It’s self-hostable.

\n

Some hacker is far more likely to attack the behemoth that is Dashlane with it’s millions of user passwords, than they are to attack your little server with your 1000 passwords (at best). This also means that you are in control of your data, which is good news for the tin-foil hat wearers out there.

\n\n

You can even get Bitwarden’s paid features for the price of hosting your server by following this guide: https://www.reddit.com/r/selfhosted/comments/8usixz/let_me_introduce_you_to_bitwarden_rs_selfhosted/

\n\n
\n\n

Nobody cares about security, though, right? So let’s move on to the good stuff:

\n\n

Features, the good stuff (also price)

\n\n

Bitwarden offers every feature Dashlane does with loads more on top of those, and more of them for free. It’s paid version is also cheaper than Dashlane’s.

\n\n

Here’s a table I stole, that compares both service’s features:

\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
FeatureDashlaneBitwarden
Chrome supportyesyes
Firefox supportyesyes
Edge supportyesyes
Safari supportyesyes
Mac OS, Windows supportyesyes
Linux supportpooryes
Mac OS command-line clientnoyes
Windows command-line clientnoyes
Linux command-line clientnoyes
Android support, including auto-fillyesyes
Android auto-fill in Chromeyesyes
Auto-fill in Android work profileyesyes (1)
Android auto-fill shows full usernamesyesyes
iOS support, including auto-fillyesyes
Two-factor authenticationyesyes
YubiKey support in browser (Enterprise)noyes ($)
YubiKey support in browser (Personal)noyes ($)
YubiKey support in Androidnoyes ($)
YubiKey support in iOSnoyes ($)
Saved password in Android, iOSyesyes
Fingerprint login in Android, iOSyesyes
Synchronization across devicesyesyes
Import from LastPassyesyes
LastPass import distinguishes work from personal itemsnono
Preserves LastPass folders in some way when importingdoubtfulyes
Personal linked account support (or the equivalent)pooryes
Save location (personal vs. work) specified at creation timenoyes
Save location (folder / collection / space) editable in web appnoyes
Sensible password quality checks for master passwordnoyes
Password history on Linuxnoyes
Password history on Windows, Mac OSyesyes
Secure notesyesyes
Attachments on notes on Linuxnoyes
Attachments on notes on Windows, Mac OSyesyes
Shared folders with access control on Linuxnoyes
Shared folders with access control on Windowsyesyes
Shared folders with access control on Mac OSyesyes
Items can exist in multiple groups with distinct access controlnoyes
Nested foldersnoyes
Resists auto-filling invisible formsyesyes
Browser plugin only fills selected formunknownno
Browser plugin displays icon in form fieldsyesno
Browser plugin prompts to save new sites on Linuxyesyes
Browser plugin prompts to save new sites on Windows, Mac OSyesyes
2FA integrated into login entries in vault (Mac OS, Windows, iOS, Android)noyes
2FA integrated into login entries in vault (Linux)noyes
Auto-fill in browser disabled by defaultnoyes
Auto-fill in browser can be disabled by preferencenoyes
Admins can reset passwordsyesno
Admins can access other people’s unshared credentialsnono
Admins can reset other people’s 2fanono
2fa can be enforced at the organization levelnono (3)
2fa can be audited at the organization levelnoyes
Exporting items on Linuxnoyes
Exporting items on Windows, Mac OSyesyes
Password health reportsyesyes ($)
App export includes attachmentsunknownno
CLI export includes attachmentsnopoor (2)
Responsive to bug reports and feature requestsunknownyes
Open sourcenoyes
Option to self-hostnoyes
Users can delete own account (customer service not needed)yesyes
Admins can delete business account (customer service not needed)yesyes
Has a useful status page that can be subscribed toyesno
Number of outages in the past six months (since December, 2018)120
Enterprise price per user per month43
Personal price per user per month (no Attachments or YubiKey)4.990
Personal price per user per month (w/Attachments & YubiKey)4.990.84
\n\n

Note 1: In work profile apps Bitwarden might not pop up a dialog automatically inviting you to auto-fill, but it’ll display a notification you can tap to do it.

\n\n

Note 2: CLI allows individual attachments to be exported. The user would have to write a script to iterate through and export all of them.

\n\n

Note 3: On the product roadmap, not yet implemented as of writing (Click to see the feature request)

\n","relative_path":"_posts/2019-06-18-bitwarden-vs-dashlane.md","previous":{"path":"_posts/2019-04-26-funkwhale.md","relative_path":"_posts/2019-04-26-funkwhale.md","url":"/blog/funkwhale/","id":"/blog/funkwhale","collection":"posts","draft":false,"categories":["opinion pieces"],"layout":"post","title":"Funkwhale","tags":["ideas","music"],"date":"2019-04-26 00:00:00 +0000","slug":"funkwhale","ext":".md"},"url":"/blog/bitwarden-vs-dashlane/","id":"/blog/bitwarden-vs-dashlane","collection":"posts","excerpt":"Bitwarden does everything Dashlane does, better","draft":false,"categories":["opinion pieces"],"layout":"post","title":"Bitwarden vs Dashlane","tags":["comparison","password manager"],"date":"2019-06-18 00:00:00 +0000","slug":"bitwarden-vs-dashlane","ext":".md"},"path":"_posts/2019-04-26-funkwhale.md","output":"\n\n\n \n \n \n \n \n \n\n Funkwhale\n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n\n\n\n \n\n
\n \n
\n\n\n
\n
\n

Funkwhale

\n

Apr 26, 2019 | |

\n
\n \n \n
\n \n\n\n \n\n \n\n\n","content":"

Funkwhale is an open source grooveshark clone that anyone can self host. Since it offers a docker installation, spinning up an intance shouldn’t be too difficult, and the modest hardware requirements mean hosting should’nt cost much more than a couple dollars a month.

\n","relative_path":"_posts/2019-04-26-funkwhale.md","previous":{"next":{"path":"_posts/2019-04-26-funkwhale.md","relative_path":"_posts/2019-04-26-funkwhale.md","url":"/blog/funkwhale/","id":"/blog/funkwhale","collection":"posts","draft":false,"categories":["opinion pieces"],"layout":"post","title":"Funkwhale","tags":["ideas","music"],"date":"2019-04-26 00:00:00 +0000","slug":"funkwhale","ext":".md"},"path":"_posts/2015-10-3-jekyll-is-awesome.md","output":"\n\n\n \n \n \n \n \n \n\n Jekyll is awesome\n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n\n\n\n \n\n
\n \n
\n\n\n
\n
\n

Jekyll is awesome

\n

Oct 3, 2015 | |

\n
\n \n
\n

Wordpress is everybody’s favourite blogging platform. It’s simple, and you can be up and running within minutes. There’s a few caveats, though: your site isn’t as customizable as a self-hosted installation of wordpress can be and that can be a little more complicated to set up. Then once it’s setup you’ll end up with a slow-as-mud website and no upward scalability. What if in the future you wanted to add a rails application to your website and move the blog to a subdomain? Can’t do that here.

\n\n

Simplicity is the name of the game. With Jekyll your content is the first thing you start creating, then you have Jekyll build your site and you’re left with a completely static website that you can host almost anywhere. The advantages to this are great: since the site is static and doesn’t require a database, hosting it is a cynch. You might even be able to host it for free! Since there’s no database there’s nothing a naughty user can mess with to damage your site. Finally since there’s no database calls to be made your site becomes incredibly fast. I think the pros far outweight the cons. If you don’t mind your site’s code being public then you can host it completely for free on github pages, too. Then it’s just a matter of pointing your domain there, setting up your cname file (a painless and simple setup) and you’re done!

\n\n

Jekyll isn’t for everything, though. It’s not going to replace Ruby on Rails and you’re not about to build a large scale web application with it. The best fit for a Jekyll site is, I think, most often the one that needs it most: users that want to build a website, but don’t want to pay an arm and a leg to just get a simple message out there. Even if programming isn’t your thing setting Jekyll up is a breeze, and I can help you out with that.

\n\n
\n
\n \n\n\n \n\n \n\n\n","content":"

Wordpress is everybody’s favourite blogging platform. It’s simple, and you can be up and running within minutes. There’s a few caveats, though: your site isn’t as customizable as a self-hosted installation of wordpress can be and that can be a little more complicated to set up. Then once it’s setup you’ll end up with a slow-as-mud website and no upward scalability. What if in the future you wanted to add a rails application to your website and move the blog to a subdomain? Can’t do that here.

\n\n

Simplicity is the name of the game. With Jekyll your content is the first thing you start creating, then you have Jekyll build your site and you’re left with a completely static website that you can host almost anywhere. The advantages to this are great: since the site is static and doesn’t require a database, hosting it is a cynch. You might even be able to host it for free! Since there’s no database there’s nothing a naughty user can mess with to damage your site. Finally since there’s no database calls to be made your site becomes incredibly fast. I think the pros far outweight the cons. If you don’t mind your site’s code being public then you can host it completely for free on github pages, too. Then it’s just a matter of pointing your domain there, setting up your cname file (a painless and simple setup) and you’re done!

\n\n

Jekyll isn’t for everything, though. It’s not going to replace Ruby on Rails and you’re not about to build a large scale web application with it. The best fit for a Jekyll site is, I think, most often the one that needs it most: users that want to build a website, but don’t want to pay an arm and a leg to just get a simple message out there. Even if programming isn’t your thing setting Jekyll up is a breeze, and I can help you out with that.

\n","relative_path":"_posts/2015-10-3-jekyll-is-awesome.md","previous":{"path":"_posts/2015-04-23-wordpress-on-heroku.md","relative_path":"_posts/2015-04-23-wordpress-on-heroku.md","url":"/blog/wordpress-on-heroku/","id":"/blog/wordpress-on-heroku","collection":"posts","draft":false,"categories":["tutorials"],"layout":"post","title":"Wordpress on Heroku","date":"2015-09-23 20:12:00 +0000","tags":["heroku","wordpress","wordpress on heroku","blogging"],"slug":"wordpress-on-heroku","ext":".md"},"url":"/blog/jekyll-is-awesome/","id":"/blog/jekyll-is-awesome","collection":"posts","excerpt":"Everything should be as simple as jekyll makes it","draft":false,"categories":["opinion pieces"],"layout":"post","title":"Jekyll is awesome","tags":["jekyll","blogging","static development"],"date":"2015-10-03 00:00:00 +0000","slug":"jekyll-is-awesome","ext":".md"},"url":"/blog/funkwhale/","id":"/blog/funkwhale","collection":"posts","excerpt":"Funkwhale is what Grooveshark should've been","draft":false,"categories":["opinion pieces"],"layout":"post","title":"Funkwhale","tags":["ideas","music"],"date":"2019-04-26 00:00:00 +0000","slug":"funkwhale","ext":".md"},"path":"_posts/2015-10-3-jekyll-is-awesome.md","output":"\n\n\n \n \n \n \n \n \n\n Jekyll is awesome\n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n\n\n\n \n\n
\n \n
\n\n\n
\n
\n

Jekyll is awesome

\n

Oct 3, 2015 | |

\n
\n \n
\n

Wordpress is everybody’s favourite blogging platform. It’s simple, and you can be up and running within minutes. There’s a few caveats, though: your site isn’t as customizable as a self-hosted installation of wordpress can be and that can be a little more complicated to set up. Then once it’s setup you’ll end up with a slow-as-mud website and no upward scalability. What if in the future you wanted to add a rails application to your website and move the blog to a subdomain? Can’t do that here.

\n\n

Simplicity is the name of the game. With Jekyll your content is the first thing you start creating, then you have Jekyll build your site and you’re left with a completely static website that you can host almost anywhere. The advantages to this are great: since the site is static and doesn’t require a database, hosting it is a cynch. You might even be able to host it for free! Since there’s no database there’s nothing a naughty user can mess with to damage your site. Finally since there’s no database calls to be made your site becomes incredibly fast. I think the pros far outweight the cons. If you don’t mind your site’s code being public then you can host it completely for free on github pages, too. Then it’s just a matter of pointing your domain there, setting up your cname file (a painless and simple setup) and you’re done!

\n\n

Jekyll isn’t for everything, though. It’s not going to replace Ruby on Rails and you’re not about to build a large scale web application with it. The best fit for a Jekyll site is, I think, most often the one that needs it most: users that want to build a website, but don’t want to pay an arm and a leg to just get a simple message out there. Even if programming isn’t your thing setting Jekyll up is a breeze, and I can help you out with that.

\n\n
\n
\n \n\n\n \n\n \n\n\n","content":"

Wordpress is everybody’s favourite blogging platform. It’s simple, and you can be up and running within minutes. There’s a few caveats, though: your site isn’t as customizable as a self-hosted installation of wordpress can be and that can be a little more complicated to set up. Then once it’s setup you’ll end up with a slow-as-mud website and no upward scalability. What if in the future you wanted to add a rails application to your website and move the blog to a subdomain? Can’t do that here.

\n\n

Simplicity is the name of the game. With Jekyll your content is the first thing you start creating, then you have Jekyll build your site and you’re left with a completely static website that you can host almost anywhere. The advantages to this are great: since the site is static and doesn’t require a database, hosting it is a cynch. You might even be able to host it for free! Since there’s no database there’s nothing a naughty user can mess with to damage your site. Finally since there’s no database calls to be made your site becomes incredibly fast. I think the pros far outweight the cons. If you don’t mind your site’s code being public then you can host it completely for free on github pages, too. Then it’s just a matter of pointing your domain there, setting up your cname file (a painless and simple setup) and you’re done!

\n\n

Jekyll isn’t for everything, though. It’s not going to replace Ruby on Rails and you’re not about to build a large scale web application with it. The best fit for a Jekyll site is, I think, most often the one that needs it most: users that want to build a website, but don’t want to pay an arm and a leg to just get a simple message out there. Even if programming isn’t your thing setting Jekyll up is a breeze, and I can help you out with that.

\n","relative_path":"_posts/2015-10-3-jekyll-is-awesome.md","previous":{"next":{"next":{"path":"_posts/2019-04-26-funkwhale.md","relative_path":"_posts/2019-04-26-funkwhale.md","url":"/blog/funkwhale/","id":"/blog/funkwhale","collection":"posts","draft":false,"categories":["opinion pieces"],"layout":"post","title":"Funkwhale","tags":["ideas","music"],"date":"2019-04-26 00:00:00 +0000","slug":"funkwhale","ext":".md"},"path":"_posts/2015-10-3-jekyll-is-awesome.md","output":"\n\n\n \n \n \n \n \n \n\n Jekyll is awesome\n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n\n\n\n \n\n
\n \n
\n\n\n
\n
\n

Jekyll is awesome

\n

Oct 3, 2015 | |

\n
\n \n
\n

Wordpress is everybody’s favourite blogging platform. It’s simple, and you can be up and running within minutes. There’s a few caveats, though: your site isn’t as customizable as a self-hosted installation of wordpress can be and that can be a little more complicated to set up. Then once it’s setup you’ll end up with a slow-as-mud website and no upward scalability. What if in the future you wanted to add a rails application to your website and move the blog to a subdomain? Can’t do that here.

\n\n

Simplicity is the name of the game. With Jekyll your content is the first thing you start creating, then you have Jekyll build your site and you’re left with a completely static website that you can host almost anywhere. The advantages to this are great: since the site is static and doesn’t require a database, hosting it is a cynch. You might even be able to host it for free! Since there’s no database there’s nothing a naughty user can mess with to damage your site. Finally since there’s no database calls to be made your site becomes incredibly fast. I think the pros far outweight the cons. If you don’t mind your site’s code being public then you can host it completely for free on github pages, too. Then it’s just a matter of pointing your domain there, setting up your cname file (a painless and simple setup) and you’re done!

\n\n

Jekyll isn’t for everything, though. It’s not going to replace Ruby on Rails and you’re not about to build a large scale web application with it. The best fit for a Jekyll site is, I think, most often the one that needs it most: users that want to build a website, but don’t want to pay an arm and a leg to just get a simple message out there. Even if programming isn’t your thing setting Jekyll up is a breeze, and I can help you out with that.

\n\n
\n
\n \n\n\n \n\n \n\n\n","content":"

Wordpress is everybody’s favourite blogging platform. It’s simple, and you can be up and running within minutes. There’s a few caveats, though: your site isn’t as customizable as a self-hosted installation of wordpress can be and that can be a little more complicated to set up. Then once it’s setup you’ll end up with a slow-as-mud website and no upward scalability. What if in the future you wanted to add a rails application to your website and move the blog to a subdomain? Can’t do that here.

\n\n

Simplicity is the name of the game. With Jekyll your content is the first thing you start creating, then you have Jekyll build your site and you’re left with a completely static website that you can host almost anywhere. The advantages to this are great: since the site is static and doesn’t require a database, hosting it is a cynch. You might even be able to host it for free! Since there’s no database there’s nothing a naughty user can mess with to damage your site. Finally since there’s no database calls to be made your site becomes incredibly fast. I think the pros far outweight the cons. If you don’t mind your site’s code being public then you can host it completely for free on github pages, too. Then it’s just a matter of pointing your domain there, setting up your cname file (a painless and simple setup) and you’re done!

\n\n

Jekyll isn’t for everything, though. It’s not going to replace Ruby on Rails and you’re not about to build a large scale web application with it. The best fit for a Jekyll site is, I think, most often the one that needs it most: users that want to build a website, but don’t want to pay an arm and a leg to just get a simple message out there. Even if programming isn’t your thing setting Jekyll up is a breeze, and I can help you out with that.

\n","relative_path":"_posts/2015-10-3-jekyll-is-awesome.md","previous":{"path":"_posts/2015-04-23-wordpress-on-heroku.md","relative_path":"_posts/2015-04-23-wordpress-on-heroku.md","url":"/blog/wordpress-on-heroku/","id":"/blog/wordpress-on-heroku","collection":"posts","draft":false,"categories":["tutorials"],"layout":"post","title":"Wordpress on Heroku","date":"2015-09-23 20:12:00 +0000","tags":["heroku","wordpress","wordpress on heroku","blogging"],"slug":"wordpress-on-heroku","ext":".md"},"url":"/blog/jekyll-is-awesome/","id":"/blog/jekyll-is-awesome","collection":"posts","excerpt":"Everything should be as simple as jekyll makes it","draft":false,"categories":["opinion pieces"],"layout":"post","title":"Jekyll is awesome","tags":["jekyll","blogging","static development"],"date":"2015-10-03 00:00:00 +0000","slug":"jekyll-is-awesome","ext":".md"},"path":"_posts/2015-04-23-wordpress-on-heroku.md","output":"\n\n\n \n \n \n \n \n \n\n Wordpress on Heroku\n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n\n\n\n \n\n
\n \n
\n\n\n
\n
\n

Wordpress on Heroku

\n

Sep 23, 2015 | |

\n
\n \n
\n

Wordpress on Heroku is great, but difficult to setup. You will need to sign up for Amazon Web Services and Heroku. You’ll need to install the Heroku toolbelt on your machine using “wget -qO- https://toolbelt.heroku.com/install-ubuntu.sh | sh”. I’ll assume you’re running Linux for this, but I’ll see about a Windows tutorial as well later on. Setting up AWS is also not going to be covered right now in this tutorial.

\n
    \n\t
  1. The first thing to do is setup LAMP on your Linux machine.
  2. \n\t
  3. Next get the latest version of Wordpress. Download it and unzip the file into your \"/var/www/html/\" folder.
  4. \n\t
  5. Download Amazon Web Services and Amazon S3 and Cloudfront.
  6. \n\t
  7. Unzip both of Amazon Web Services and Amazon S3 and Cloudfront into the wp-content/plugins folder.
  8. \n\t
  9. You should have been given access keys for your AWS user. Add them to your wp-config.php file like this:\n \t

    // AWS Access Keys //
    \n \tdefine( 'AWS_ACCESS_KEY_ID', 'your_aws_access_key_id_here' );
    \n \tdefine( 'AWS_SECRET_ACCESS_KEY', 'your_aws_secret_access_key_here' );

    \n
  10. \n\t
  11. Go here and add your Unique Keys and Salts to your wp-config.php file like below:\n \t

    define('AUTH_KEY', 'put your unique phrase here');
    \n \tdefine('SECURE_AUTH_KEY', 'put your unique phrase here');
    \n \tdefine('LOGGED_IN_KEY', 'put your unique phrase here');
    \n \tdefine('NONCE_KEY', 'put your unique phrase here');
    \n \tdefine('AUTH_SALT', 'put your unique phrase here');
    \n \tdefine('SECURE_AUTH_SALT', 'put your unique phrase here');
    \n \tdefine('LOGGED_IN_SALT', 'put your unique phrase here');
    \n \tdefine('NONCE_SALT', 'put your unique phrase here');

    \n
  12. \n\t
  13. Go to localhost/wordpress/ and run through the installation using the MySQL credentials you setup while setting up your LAMP stack. Check here if you're not sure what to do.
  14. \n\t
  15. Go to your dashboard, and click on the plugins tab.
  16. \n\t
  17. Activate both the Amazon Web Services and Amazon S3 and Cloudfront plugins. There should now be another tab at the bottom that says \"AWS\". If your AWS User is setup correctly then they should both work immediately and allow you to connect to a bucket.
  18. \n\t
  19. Go into your wordpress folder and open a terminal session there.
  20. \n\t
  21. In your terminal type $ git init That'll initialize the whole thing as a git repository.
  22. \n\t
  23. In your terminal type git add . to get all the WP files ready to be committed. This will take a second or two.
  24. \n\t
  25. Now type git commit -m 'Add your own commit message here' Wait for the wall of text to stop running.
  26. \n\t
  27. Now type heroku create That'll create a new Heroku app from that directory.
  28. \n\t
  29. Type heroku addons:add cleardb If all goes well then you're almost ready to push your installation to Heroku.
  30. \n\t
  31. Copy the code below with the Unique Keys and Salts you got earlier:\n \t

    heroku config:set AUTH_KEY='put your unique phrase here'
    \n \tSECURE_AUTH_KEY='put your unique phrase here'
    \n \tLOGGED_IN_KEY='put your unique phrase here'
    \n \tNONCE_KEY='put your unique phrase here'
    \n \tAUTH_SALT='put your unique phrase here'
    \n \tSECURE_AUTH_SALT='put your unique phrase here'
    \n \tLOGGED_IN_SALT='put your unique phrase here'
    \n \tNONCE_SALT='put your unique phrase here'

    \n
  32. \n\t
  33. Again in the terminal type git checkout -b production You'll store your production environment variables here.
  34. \n\t
  35. Add this line to your wp-config.php file:\n\t

    $db = parse_url($_ENV[\"CLEARDB_DATABASE_URL\"]);

    \n
  36. \n\t
  37. Change your database information in wp-config.php to the code below:\n \t

    define('DB_NAME', trim($db[\"path\"],\"/\"));
    \n \tdefine('DB_USER', $db[\"user\"]);
    \n \tdefine('DB_PASSWORD', $db[\"pass\"]);
    \n \tdefine('DB_HOST', $db[\"host\"]);

    \n
  38. \n\t
  39. Change your Unthentication Unique Keys and Salts to the below:\n \t

    define('AUTH_KEY', getenv('AUTH_KEY'));
    \n \tdefine('SECURE_AUTH_KEY', getenv('SECURE_AUTH_KEY'));
    \n \tdefine('LOGGED_IN_KEY', getenv('LOGGED_IN_KEY'));
    \n \tdefine('NONCE_KEY', getenv('NONCE_KEY'));
    \n \tdefine('AUTH_SALT', getenv('AUTH_SALT'));
    \n \tdefine('SECURE_AUTH_SALT', getenv('SECURE_AUTH_SALT'));
    \n \tdefine('LOGGED_IN_SALT', getenv('LOGGED_IN_SALT'));
    \n \tdefine('NONCE_SALT', getenv('NONCE_SALT'));
    \n \tdefine('AWS_ACCESS_KEY_ID', getenv('AWS_ACCESS_KEY_ID'));
    \n \tdefine('AWS_SECRET_ACCESS_KEY', getenv('AWS_SECRET_ACCESS_KEY'));

    \n
  40. \n\t
  41. Now you're all set. Type git push heroku production:master and let it finish. When that's done you can go to \"http://yourwordpressapp.heroku.com\" and complete your remote installation.\n
      \n\t
    1. In order to check out your remote installation simply switch back to the master branch with git checkout master
    2. \n
    \n
  42. \n
\n

Updating Wordpress

\n\n

If you need to update Wordpress (mine updated twice while I was working on this) you’ll need to take a few steps:

\n
    \n\t
  1. In a terminal in the html folder run sudo chown -R www-data:www-data wordpress/ That'll let you update wordpress locally through the app.
  2. \n\t
  3. Make sure you're on the master branch and update WP via the dashboard.
  4. \n\t
  5. Once Wordpress is finished updating run sudo chown -R your_user:your_user wordpress/ Now you'll be able to edit the folder yourself again.
  6. \n\t
  7. Commit the changes made by the update.
  8. \n\t
  9. Switch to the production branch and merge with master by running git merge master This shouldn't create any conflicts (it didn't with me).
  10. \n\t
  11. The wp-config file should be untouched, but check it just in case. If it doesn't have your production settings, simply edit the file again, and commit changes.
  12. \n\t
  13. Now run git push heroku production:master again, wait and your remote installation will be updated.\n
      \n\t
    • Remember to switch back to the master branch to get your local installation working again.
    • \n
    \n
  14. \n
\n

Adding/updating themes and plugins

\n\n

Adding/updating themes and plugins is easy.

\n
    \n\t
  1. Download the theme or plugin.
  2. \n\t
  3. Make sure you're in your master branch. Unzip the theme/folder into it's respective folder.
  4. \n\t
  5. In your local installation active the theme or plugin.
  6. \n\t
  7. Commit the changes, then switch to production.
  8. \n\t
  9. Run git merge master This should not create any conflicts if the plugin/theme is new.\n
      \n\t
    • If you're updating a conflict might be caused. If so, then in the terminal type git reset --hard
    • \n\t
    • Delete the older plugin/theme and replace with the new one, then merge again.
    • \n
    \n
  10. \n\t
  11. The wp-config file should be untouched, but check it just in case. If it doesn't have your production settings, simply edit the file again, and commit changes.
  12. \n\t
  13. Now run git push heroku production:master again, wait and your remote installation should now have the plugin/theme.\n
      \n\t
    • Go to \"http://yourwordpressapp.heroku.com/wp-admin\" and Wordpress might ask you to update the database. Simply go ahead and everything should work fine.
    • \n
    \n
  14. \n
\n\n
\n
\n \n\n\n \n\n \n\n\n","content":"

Wordpress on Heroku is great, but difficult to setup. You will need to sign up for Amazon Web Services and Heroku. You’ll need to install the Heroku toolbelt on your machine using “wget -qO- https://toolbelt.heroku.com/install-ubuntu.sh | sh”. I’ll assume you’re running Linux for this, but I’ll see about a Windows tutorial as well later on. Setting up AWS is also not going to be covered right now in this tutorial.

\n
    \n\t
  1. The first thing to do is setup LAMP on your Linux machine.
  2. \n\t
  3. Next get the latest version of Wordpress. Download it and unzip the file into your \"/var/www/html/\" folder.
  4. \n\t
  5. Download Amazon Web Services and Amazon S3 and Cloudfront.
  6. \n\t
  7. Unzip both of Amazon Web Services and Amazon S3 and Cloudfront into the wp-content/plugins folder.
  8. \n\t
  9. You should have been given access keys for your AWS user. Add them to your wp-config.php file like this:\n \t

    // AWS Access Keys //
    \n \tdefine( 'AWS_ACCESS_KEY_ID', 'your_aws_access_key_id_here' );
    \n \tdefine( 'AWS_SECRET_ACCESS_KEY', 'your_aws_secret_access_key_here' );

    \n
  10. \n\t
  11. Go here and add your Unique Keys and Salts to your wp-config.php file like below:\n \t

    define('AUTH_KEY', 'put your unique phrase here');
    \n \tdefine('SECURE_AUTH_KEY', 'put your unique phrase here');
    \n \tdefine('LOGGED_IN_KEY', 'put your unique phrase here');
    \n \tdefine('NONCE_KEY', 'put your unique phrase here');
    \n \tdefine('AUTH_SALT', 'put your unique phrase here');
    \n \tdefine('SECURE_AUTH_SALT', 'put your unique phrase here');
    \n \tdefine('LOGGED_IN_SALT', 'put your unique phrase here');
    \n \tdefine('NONCE_SALT', 'put your unique phrase here');

    \n
  12. \n\t
  13. Go to localhost/wordpress/ and run through the installation using the MySQL credentials you setup while setting up your LAMP stack. Check here if you're not sure what to do.
  14. \n\t
  15. Go to your dashboard, and click on the plugins tab.
  16. \n\t
  17. Activate both the Amazon Web Services and Amazon S3 and Cloudfront plugins. There should now be another tab at the bottom that says \"AWS\". If your AWS User is setup correctly then they should both work immediately and allow you to connect to a bucket.
  18. \n\t
  19. Go into your wordpress folder and open a terminal session there.
  20. \n\t
  21. In your terminal type $ git init That'll initialize the whole thing as a git repository.
  22. \n\t
  23. In your terminal type git add . to get all the WP files ready to be committed. This will take a second or two.
  24. \n\t
  25. Now type git commit -m 'Add your own commit message here' Wait for the wall of text to stop running.
  26. \n\t
  27. Now type heroku create That'll create a new Heroku app from that directory.
  28. \n\t
  29. Type heroku addons:add cleardb If all goes well then you're almost ready to push your installation to Heroku.
  30. \n\t
  31. Copy the code below with the Unique Keys and Salts you got earlier:\n \t

    heroku config:set AUTH_KEY='put your unique phrase here'
    \n \tSECURE_AUTH_KEY='put your unique phrase here'
    \n \tLOGGED_IN_KEY='put your unique phrase here'
    \n \tNONCE_KEY='put your unique phrase here'
    \n \tAUTH_SALT='put your unique phrase here'
    \n \tSECURE_AUTH_SALT='put your unique phrase here'
    \n \tLOGGED_IN_SALT='put your unique phrase here'
    \n \tNONCE_SALT='put your unique phrase here'

    \n
  32. \n\t
  33. Again in the terminal type git checkout -b production You'll store your production environment variables here.
  34. \n\t
  35. Add this line to your wp-config.php file:\n\t

    $db = parse_url($_ENV[\"CLEARDB_DATABASE_URL\"]);

    \n
  36. \n\t
  37. Change your database information in wp-config.php to the code below:\n \t

    define('DB_NAME', trim($db[\"path\"],\"/\"));
    \n \tdefine('DB_USER', $db[\"user\"]);
    \n \tdefine('DB_PASSWORD', $db[\"pass\"]);
    \n \tdefine('DB_HOST', $db[\"host\"]);

    \n
  38. \n\t
  39. Change your Unthentication Unique Keys and Salts to the below:\n \t

    define('AUTH_KEY', getenv('AUTH_KEY'));
    \n \tdefine('SECURE_AUTH_KEY', getenv('SECURE_AUTH_KEY'));
    \n \tdefine('LOGGED_IN_KEY', getenv('LOGGED_IN_KEY'));
    \n \tdefine('NONCE_KEY', getenv('NONCE_KEY'));
    \n \tdefine('AUTH_SALT', getenv('AUTH_SALT'));
    \n \tdefine('SECURE_AUTH_SALT', getenv('SECURE_AUTH_SALT'));
    \n \tdefine('LOGGED_IN_SALT', getenv('LOGGED_IN_SALT'));
    \n \tdefine('NONCE_SALT', getenv('NONCE_SALT'));
    \n \tdefine('AWS_ACCESS_KEY_ID', getenv('AWS_ACCESS_KEY_ID'));
    \n \tdefine('AWS_SECRET_ACCESS_KEY', getenv('AWS_SECRET_ACCESS_KEY'));

    \n
  40. \n\t
  41. Now you're all set. Type git push heroku production:master and let it finish. When that's done you can go to \"http://yourwordpressapp.heroku.com\" and complete your remote installation.\n
      \n\t
    1. In order to check out your remote installation simply switch back to the master branch with git checkout master
    2. \n
    \n
  42. \n
\n

Updating Wordpress

\n\n

If you need to update Wordpress (mine updated twice while I was working on this) you’ll need to take a few steps:

\n
    \n\t
  1. In a terminal in the html folder run sudo chown -R www-data:www-data wordpress/ That'll let you update wordpress locally through the app.
  2. \n\t
  3. Make sure you're on the master branch and update WP via the dashboard.
  4. \n\t
  5. Once Wordpress is finished updating run sudo chown -R your_user:your_user wordpress/ Now you'll be able to edit the folder yourself again.
  6. \n\t
  7. Commit the changes made by the update.
  8. \n\t
  9. Switch to the production branch and merge with master by running git merge master This shouldn't create any conflicts (it didn't with me).
  10. \n\t
  11. The wp-config file should be untouched, but check it just in case. If it doesn't have your production settings, simply edit the file again, and commit changes.
  12. \n\t
  13. Now run git push heroku production:master again, wait and your remote installation will be updated.\n
      \n\t
    • Remember to switch back to the master branch to get your local installation working again.
    • \n
    \n
  14. \n
\n

Adding/updating themes and plugins

\n\n

Adding/updating themes and plugins is easy.

\n
    \n\t
  1. Download the theme or plugin.
  2. \n\t
  3. Make sure you're in your master branch. Unzip the theme/folder into it's respective folder.
  4. \n\t
  5. In your local installation active the theme or plugin.
  6. \n\t
  7. Commit the changes, then switch to production.
  8. \n\t
  9. Run git merge master This should not create any conflicts if the plugin/theme is new.\n
      \n\t
    • If you're updating a conflict might be caused. If so, then in the terminal type git reset --hard
    • \n\t
    • Delete the older plugin/theme and replace with the new one, then merge again.
    • \n
    \n
  10. \n\t
  11. The wp-config file should be untouched, but check it just in case. If it doesn't have your production settings, simply edit the file again, and commit changes.
  12. \n\t
  13. Now run git push heroku production:master again, wait and your remote installation should now have the plugin/theme.\n
      \n\t
    • Go to \"http://yourwordpressapp.heroku.com/wp-admin\" and Wordpress might ask you to update the database. Simply go ahead and everything should work fine.
    • \n
    \n
  14. \n
\n","relative_path":"_posts/2015-04-23-wordpress-on-heroku.md","previous":null,"url":"/blog/wordpress-on-heroku/","id":"/blog/wordpress-on-heroku","collection":"posts","excerpt":"Wordpress on Heroku is great, but difficult to setup...","draft":false,"categories":["tutorials"],"layout":"post","title":"Wordpress on Heroku","date":"2015-09-23 20:12:00 +0000","tags":["heroku","wordpress","wordpress on heroku","blogging"],"slug":"wordpress-on-heroku","ext":".md"},"url":"/blog/jekyll-is-awesome/","id":"/blog/jekyll-is-awesome","collection":"posts","excerpt":"Everything should be as simple as jekyll makes it","draft":false,"categories":["opinion pieces"],"layout":"post","title":"Jekyll is awesome","tags":["jekyll","blogging","static development"],"date":"2015-10-03 00:00:00 +0000","slug":"jekyll-is-awesome","ext":".md"}); tags['jekyll'] = posts; var posts = [] posts.push({"next":{"next":{"next":{"path":"_posts/2019-07-11-ledger-is-simply-amazing.md","relative_path":"_posts/2019-07-11-ledger-is-simply-amazing.md","url":"/blog/ledger-is-simply-amazing/","id":"/blog/ledger-is-simply-amazing","collection":"posts","draft":false,"categories":["gush"],"layout":"post","title":"Ledger is amazing","tags":["finance","money manager"],"date":"2019-07-11 00:00:00 +0000","slug":"ledger-is-simply-amazing","ext":".md"},"path":"_posts/2019-06-18-bitwarden-vs-dashlane.md","output":"\n\n\n \n \n \n \n \n \n\n Bitwarden vs Dashlane\n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n\n\n\n \n\n
\n \n
\n\n\n
\n
\n

Bitwarden vs Dashlane

\n

Jun 18, 2019 | |

\n
\n \n
\n

Bitwarden does everything Dashlane does, better.

\n

That’s the end of the post. You can go home, now.

\n\n
\n\n

If you want a further breakdown, consider these points:

\n\n

Security, most important, most overlooked

\n

From a pure security standpoint, it’s a toss-up between Dashlane and Bitwarden. Both offer best-in-class security, so your passwords are safe on both.

\n\n

Bitwarden offers 2FA auditing at the organization level for business users, while Dashlane does not. Enforcing is on the roadmap.

\n\n

I would add that Bitwarden can offer a little more peace of mind for two reasons:

\n\n

1. It’s open source.

\n

A great many of you just sighed, but it being open source means it can be checked constantly for issues. The source for all their software is here: http://github.com/bitwarden/

\n\n

This also means that if Bitwarden doesn’t have a feature you like, or something works in a way you don’t like, you can just change it.

\n\n

2. It’s self-hostable.

\n

Some hacker is far more likely to attack the behemoth that is Dashlane with it’s millions of user passwords, than they are to attack your little server with your 1000 passwords (at best). This also means that you are in control of your data, which is good news for the tin-foil hat wearers out there.

\n\n

You can even get Bitwarden’s paid features for the price of hosting your server by following this guide: https://www.reddit.com/r/selfhosted/comments/8usixz/let_me_introduce_you_to_bitwarden_rs_selfhosted/

\n\n
\n\n

Nobody cares about security, though, right? So let’s move on to the good stuff:

\n\n

Features, the good stuff (also price)

\n\n

Bitwarden offers every feature Dashlane does with loads more on top of those, and more of them for free. It’s paid version is also cheaper than Dashlane’s.

\n\n

Here’s a table I stole, that compares both service’s features:

\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
FeatureDashlaneBitwarden
Chrome supportyesyes
Firefox supportyesyes
Edge supportyesyes
Safari supportyesyes
Mac OS, Windows supportyesyes
Linux supportpooryes
Mac OS command-line clientnoyes
Windows command-line clientnoyes
Linux command-line clientnoyes
Android support, including auto-fillyesyes
Android auto-fill in Chromeyesyes
Auto-fill in Android work profileyesyes (1)
Android auto-fill shows full usernamesyesyes
iOS support, including auto-fillyesyes
Two-factor authenticationyesyes
YubiKey support in browser (Enterprise)noyes ($)
YubiKey support in browser (Personal)noyes ($)
YubiKey support in Androidnoyes ($)
YubiKey support in iOSnoyes ($)
Saved password in Android, iOSyesyes
Fingerprint login in Android, iOSyesyes
Synchronization across devicesyesyes
Import from LastPassyesyes
LastPass import distinguishes work from personal itemsnono
Preserves LastPass folders in some way when importingdoubtfulyes
Personal linked account support (or the equivalent)pooryes
Save location (personal vs. work) specified at creation timenoyes
Save location (folder / collection / space) editable in web appnoyes
Sensible password quality checks for master passwordnoyes
Password history on Linuxnoyes
Password history on Windows, Mac OSyesyes
Secure notesyesyes
Attachments on notes on Linuxnoyes
Attachments on notes on Windows, Mac OSyesyes
Shared folders with access control on Linuxnoyes
Shared folders with access control on Windowsyesyes
Shared folders with access control on Mac OSyesyes
Items can exist in multiple groups with distinct access controlnoyes
Nested foldersnoyes
Resists auto-filling invisible formsyesyes
Browser plugin only fills selected formunknownno
Browser plugin displays icon in form fieldsyesno
Browser plugin prompts to save new sites on Linuxyesyes
Browser plugin prompts to save new sites on Windows, Mac OSyesyes
2FA integrated into login entries in vault (Mac OS, Windows, iOS, Android)noyes
2FA integrated into login entries in vault (Linux)noyes
Auto-fill in browser disabled by defaultnoyes
Auto-fill in browser can be disabled by preferencenoyes
Admins can reset passwordsyesno
Admins can access other people’s unshared credentialsnono
Admins can reset other people’s 2fanono
2fa can be enforced at the organization levelnono (3)
2fa can be audited at the organization levelnoyes
Exporting items on Linuxnoyes
Exporting items on Windows, Mac OSyesyes
Password health reportsyesyes ($)
App export includes attachmentsunknownno
CLI export includes attachmentsnopoor (2)
Responsive to bug reports and feature requestsunknownyes
Open sourcenoyes
Option to self-hostnoyes
Users can delete own account (customer service not needed)yesyes
Admins can delete business account (customer service not needed)yesyes
Has a useful status page that can be subscribed toyesno
Number of outages in the past six months (since December, 2018)120
Enterprise price per user per month43
Personal price per user per month (no Attachments or YubiKey)4.990
Personal price per user per month (w/Attachments & YubiKey)4.990.84
\n\n

Note 1: In work profile apps Bitwarden might not pop up a dialog automatically inviting you to auto-fill, but it’ll display a notification you can tap to do it.

\n\n

Note 2: CLI allows individual attachments to be exported. The user would have to write a script to iterate through and export all of them.

\n\n

Note 3: On the product roadmap, not yet implemented as of writing (Click to see the feature request)

\n\n
\n
\n \n\n\n \n\n \n\n\n","content":"

Bitwarden does everything Dashlane does, better.

\n

That’s the end of the post. You can go home, now.

\n\n
\n\n

If you want a further breakdown, consider these points:

\n\n

Security, most important, most overlooked

\n

From a pure security standpoint, it’s a toss-up between Dashlane and Bitwarden. Both offer best-in-class security, so your passwords are safe on both.

\n\n

Bitwarden offers 2FA auditing at the organization level for business users, while Dashlane does not. Enforcing is on the roadmap.

\n\n

I would add that Bitwarden can offer a little more peace of mind for two reasons:

\n\n

1. It’s open source.

\n

A great many of you just sighed, but it being open source means it can be checked constantly for issues. The source for all their software is here: http://github.com/bitwarden/

\n\n

This also means that if Bitwarden doesn’t have a feature you like, or something works in a way you don’t like, you can just change it.

\n\n

2. It’s self-hostable.

\n

Some hacker is far more likely to attack the behemoth that is Dashlane with it’s millions of user passwords, than they are to attack your little server with your 1000 passwords (at best). This also means that you are in control of your data, which is good news for the tin-foil hat wearers out there.

\n\n

You can even get Bitwarden’s paid features for the price of hosting your server by following this guide: https://www.reddit.com/r/selfhosted/comments/8usixz/let_me_introduce_you_to_bitwarden_rs_selfhosted/

\n\n
\n\n

Nobody cares about security, though, right? So let’s move on to the good stuff:

\n\n

Features, the good stuff (also price)

\n\n

Bitwarden offers every feature Dashlane does with loads more on top of those, and more of them for free. It’s paid version is also cheaper than Dashlane’s.

\n\n

Here’s a table I stole, that compares both service’s features:

\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
FeatureDashlaneBitwarden
Chrome supportyesyes
Firefox supportyesyes
Edge supportyesyes
Safari supportyesyes
Mac OS, Windows supportyesyes
Linux supportpooryes
Mac OS command-line clientnoyes
Windows command-line clientnoyes
Linux command-line clientnoyes
Android support, including auto-fillyesyes
Android auto-fill in Chromeyesyes
Auto-fill in Android work profileyesyes (1)
Android auto-fill shows full usernamesyesyes
iOS support, including auto-fillyesyes
Two-factor authenticationyesyes
YubiKey support in browser (Enterprise)noyes ($)
YubiKey support in browser (Personal)noyes ($)
YubiKey support in Androidnoyes ($)
YubiKey support in iOSnoyes ($)
Saved password in Android, iOSyesyes
Fingerprint login in Android, iOSyesyes
Synchronization across devicesyesyes
Import from LastPassyesyes
LastPass import distinguishes work from personal itemsnono
Preserves LastPass folders in some way when importingdoubtfulyes
Personal linked account support (or the equivalent)pooryes
Save location (personal vs. work) specified at creation timenoyes
Save location (folder / collection / space) editable in web appnoyes
Sensible password quality checks for master passwordnoyes
Password history on Linuxnoyes
Password history on Windows, Mac OSyesyes
Secure notesyesyes
Attachments on notes on Linuxnoyes
Attachments on notes on Windows, Mac OSyesyes
Shared folders with access control on Linuxnoyes
Shared folders with access control on Windowsyesyes
Shared folders with access control on Mac OSyesyes
Items can exist in multiple groups with distinct access controlnoyes
Nested foldersnoyes
Resists auto-filling invisible formsyesyes
Browser plugin only fills selected formunknownno
Browser plugin displays icon in form fieldsyesno
Browser plugin prompts to save new sites on Linuxyesyes
Browser plugin prompts to save new sites on Windows, Mac OSyesyes
2FA integrated into login entries in vault (Mac OS, Windows, iOS, Android)noyes
2FA integrated into login entries in vault (Linux)noyes
Auto-fill in browser disabled by defaultnoyes
Auto-fill in browser can be disabled by preferencenoyes
Admins can reset passwordsyesno
Admins can access other people’s unshared credentialsnono
Admins can reset other people’s 2fanono
2fa can be enforced at the organization levelnono (3)
2fa can be audited at the organization levelnoyes
Exporting items on Linuxnoyes
Exporting items on Windows, Mac OSyesyes
Password health reportsyesyes ($)
App export includes attachmentsunknownno
CLI export includes attachmentsnopoor (2)
Responsive to bug reports and feature requestsunknownyes
Open sourcenoyes
Option to self-hostnoyes
Users can delete own account (customer service not needed)yesyes
Admins can delete business account (customer service not needed)yesyes
Has a useful status page that can be subscribed toyesno
Number of outages in the past six months (since December, 2018)120
Enterprise price per user per month43
Personal price per user per month (no Attachments or YubiKey)4.990
Personal price per user per month (w/Attachments & YubiKey)4.990.84
\n\n

Note 1: In work profile apps Bitwarden might not pop up a dialog automatically inviting you to auto-fill, but it’ll display a notification you can tap to do it.

\n\n

Note 2: CLI allows individual attachments to be exported. The user would have to write a script to iterate through and export all of them.

\n\n

Note 3: On the product roadmap, not yet implemented as of writing (Click to see the feature request)

\n","relative_path":"_posts/2019-06-18-bitwarden-vs-dashlane.md","previous":{"path":"_posts/2019-04-26-funkwhale.md","relative_path":"_posts/2019-04-26-funkwhale.md","url":"/blog/funkwhale/","id":"/blog/funkwhale","collection":"posts","draft":false,"categories":["opinion pieces"],"layout":"post","title":"Funkwhale","tags":["ideas","music"],"date":"2019-04-26 00:00:00 +0000","slug":"funkwhale","ext":".md"},"url":"/blog/bitwarden-vs-dashlane/","id":"/blog/bitwarden-vs-dashlane","collection":"posts","excerpt":"Bitwarden does everything Dashlane does, better","draft":false,"categories":["opinion pieces"],"layout":"post","title":"Bitwarden vs Dashlane","tags":["comparison","password manager"],"date":"2019-06-18 00:00:00 +0000","slug":"bitwarden-vs-dashlane","ext":".md"},"path":"_posts/2019-04-26-funkwhale.md","output":"\n\n\n \n \n \n \n \n \n\n Funkwhale\n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n\n\n\n \n\n
\n \n
\n\n\n
\n
\n

Funkwhale

\n

Apr 26, 2019 | |

\n
\n \n \n
\n \n\n\n \n\n \n\n\n","content":"

Funkwhale is an open source grooveshark clone that anyone can self host. Since it offers a docker installation, spinning up an intance shouldn’t be too difficult, and the modest hardware requirements mean hosting should’nt cost much more than a couple dollars a month.

\n","relative_path":"_posts/2019-04-26-funkwhale.md","previous":{"next":{"path":"_posts/2019-04-26-funkwhale.md","relative_path":"_posts/2019-04-26-funkwhale.md","url":"/blog/funkwhale/","id":"/blog/funkwhale","collection":"posts","draft":false,"categories":["opinion pieces"],"layout":"post","title":"Funkwhale","tags":["ideas","music"],"date":"2019-04-26 00:00:00 +0000","slug":"funkwhale","ext":".md"},"path":"_posts/2015-10-3-jekyll-is-awesome.md","output":"\n\n\n \n \n \n \n \n \n\n Jekyll is awesome\n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n\n\n\n \n\n
\n \n
\n\n\n
\n
\n

Jekyll is awesome

\n

Oct 3, 2015 | |

\n
\n \n
\n

Wordpress is everybody’s favourite blogging platform. It’s simple, and you can be up and running within minutes. There’s a few caveats, though: your site isn’t as customizable as a self-hosted installation of wordpress can be and that can be a little more complicated to set up. Then once it’s setup you’ll end up with a slow-as-mud website and no upward scalability. What if in the future you wanted to add a rails application to your website and move the blog to a subdomain? Can’t do that here.

\n\n

Simplicity is the name of the game. With Jekyll your content is the first thing you start creating, then you have Jekyll build your site and you’re left with a completely static website that you can host almost anywhere. The advantages to this are great: since the site is static and doesn’t require a database, hosting it is a cynch. You might even be able to host it for free! Since there’s no database there’s nothing a naughty user can mess with to damage your site. Finally since there’s no database calls to be made your site becomes incredibly fast. I think the pros far outweight the cons. If you don’t mind your site’s code being public then you can host it completely for free on github pages, too. Then it’s just a matter of pointing your domain there, setting up your cname file (a painless and simple setup) and you’re done!

\n\n

Jekyll isn’t for everything, though. It’s not going to replace Ruby on Rails and you’re not about to build a large scale web application with it. The best fit for a Jekyll site is, I think, most often the one that needs it most: users that want to build a website, but don’t want to pay an arm and a leg to just get a simple message out there. Even if programming isn’t your thing setting Jekyll up is a breeze, and I can help you out with that.

\n\n
\n
\n \n\n\n \n\n \n\n\n","content":"

Wordpress is everybody’s favourite blogging platform. It’s simple, and you can be up and running within minutes. There’s a few caveats, though: your site isn’t as customizable as a self-hosted installation of wordpress can be and that can be a little more complicated to set up. Then once it’s setup you’ll end up with a slow-as-mud website and no upward scalability. What if in the future you wanted to add a rails application to your website and move the blog to a subdomain? Can’t do that here.

\n\n

Simplicity is the name of the game. With Jekyll your content is the first thing you start creating, then you have Jekyll build your site and you’re left with a completely static website that you can host almost anywhere. The advantages to this are great: since the site is static and doesn’t require a database, hosting it is a cynch. You might even be able to host it for free! Since there’s no database there’s nothing a naughty user can mess with to damage your site. Finally since there’s no database calls to be made your site becomes incredibly fast. I think the pros far outweight the cons. If you don’t mind your site’s code being public then you can host it completely for free on github pages, too. Then it’s just a matter of pointing your domain there, setting up your cname file (a painless and simple setup) and you’re done!

\n\n

Jekyll isn’t for everything, though. It’s not going to replace Ruby on Rails and you’re not about to build a large scale web application with it. The best fit for a Jekyll site is, I think, most often the one that needs it most: users that want to build a website, but don’t want to pay an arm and a leg to just get a simple message out there. Even if programming isn’t your thing setting Jekyll up is a breeze, and I can help you out with that.

\n","relative_path":"_posts/2015-10-3-jekyll-is-awesome.md","previous":{"path":"_posts/2015-04-23-wordpress-on-heroku.md","relative_path":"_posts/2015-04-23-wordpress-on-heroku.md","url":"/blog/wordpress-on-heroku/","id":"/blog/wordpress-on-heroku","collection":"posts","draft":false,"categories":["tutorials"],"layout":"post","title":"Wordpress on Heroku","date":"2015-09-23 20:12:00 +0000","tags":["heroku","wordpress","wordpress on heroku","blogging"],"slug":"wordpress-on-heroku","ext":".md"},"url":"/blog/jekyll-is-awesome/","id":"/blog/jekyll-is-awesome","collection":"posts","excerpt":"Everything should be as simple as jekyll makes it","draft":false,"categories":["opinion pieces"],"layout":"post","title":"Jekyll is awesome","tags":["jekyll","blogging","static development"],"date":"2015-10-03 00:00:00 +0000","slug":"jekyll-is-awesome","ext":".md"},"url":"/blog/funkwhale/","id":"/blog/funkwhale","collection":"posts","excerpt":"Funkwhale is what Grooveshark should've been","draft":false,"categories":["opinion pieces"],"layout":"post","title":"Funkwhale","tags":["ideas","music"],"date":"2019-04-26 00:00:00 +0000","slug":"funkwhale","ext":".md"},"path":"_posts/2015-10-3-jekyll-is-awesome.md","output":"\n\n\n \n \n \n \n \n \n\n Jekyll is awesome\n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n\n\n\n \n\n
\n \n
\n\n\n
\n
\n

Jekyll is awesome

\n

Oct 3, 2015 | |

\n
\n \n
\n

Wordpress is everybody’s favourite blogging platform. It’s simple, and you can be up and running within minutes. There’s a few caveats, though: your site isn’t as customizable as a self-hosted installation of wordpress can be and that can be a little more complicated to set up. Then once it’s setup you’ll end up with a slow-as-mud website and no upward scalability. What if in the future you wanted to add a rails application to your website and move the blog to a subdomain? Can’t do that here.

\n\n

Simplicity is the name of the game. With Jekyll your content is the first thing you start creating, then you have Jekyll build your site and you’re left with a completely static website that you can host almost anywhere. The advantages to this are great: since the site is static and doesn’t require a database, hosting it is a cynch. You might even be able to host it for free! Since there’s no database there’s nothing a naughty user can mess with to damage your site. Finally since there’s no database calls to be made your site becomes incredibly fast. I think the pros far outweight the cons. If you don’t mind your site’s code being public then you can host it completely for free on github pages, too. Then it’s just a matter of pointing your domain there, setting up your cname file (a painless and simple setup) and you’re done!

\n\n

Jekyll isn’t for everything, though. It’s not going to replace Ruby on Rails and you’re not about to build a large scale web application with it. The best fit for a Jekyll site is, I think, most often the one that needs it most: users that want to build a website, but don’t want to pay an arm and a leg to just get a simple message out there. Even if programming isn’t your thing setting Jekyll up is a breeze, and I can help you out with that.

\n\n
\n
\n \n\n\n \n\n \n\n\n","content":"

Wordpress is everybody’s favourite blogging platform. It’s simple, and you can be up and running within minutes. There’s a few caveats, though: your site isn’t as customizable as a self-hosted installation of wordpress can be and that can be a little more complicated to set up. Then once it’s setup you’ll end up with a slow-as-mud website and no upward scalability. What if in the future you wanted to add a rails application to your website and move the blog to a subdomain? Can’t do that here.

\n\n

Simplicity is the name of the game. With Jekyll your content is the first thing you start creating, then you have Jekyll build your site and you’re left with a completely static website that you can host almost anywhere. The advantages to this are great: since the site is static and doesn’t require a database, hosting it is a cynch. You might even be able to host it for free! Since there’s no database there’s nothing a naughty user can mess with to damage your site. Finally since there’s no database calls to be made your site becomes incredibly fast. I think the pros far outweight the cons. If you don’t mind your site’s code being public then you can host it completely for free on github pages, too. Then it’s just a matter of pointing your domain there, setting up your cname file (a painless and simple setup) and you’re done!

\n\n

Jekyll isn’t for everything, though. It’s not going to replace Ruby on Rails and you’re not about to build a large scale web application with it. The best fit for a Jekyll site is, I think, most often the one that needs it most: users that want to build a website, but don’t want to pay an arm and a leg to just get a simple message out there. Even if programming isn’t your thing setting Jekyll up is a breeze, and I can help you out with that.

\n","relative_path":"_posts/2015-10-3-jekyll-is-awesome.md","previous":{"next":{"next":{"path":"_posts/2019-04-26-funkwhale.md","relative_path":"_posts/2019-04-26-funkwhale.md","url":"/blog/funkwhale/","id":"/blog/funkwhale","collection":"posts","draft":false,"categories":["opinion pieces"],"layout":"post","title":"Funkwhale","tags":["ideas","music"],"date":"2019-04-26 00:00:00 +0000","slug":"funkwhale","ext":".md"},"path":"_posts/2015-10-3-jekyll-is-awesome.md","output":"\n\n\n \n \n \n \n \n \n\n Jekyll is awesome\n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n\n\n\n \n\n
\n \n
\n\n\n
\n
\n

Jekyll is awesome

\n

Oct 3, 2015 | |

\n
\n \n
\n

Wordpress is everybody’s favourite blogging platform. It’s simple, and you can be up and running within minutes. There’s a few caveats, though: your site isn’t as customizable as a self-hosted installation of wordpress can be and that can be a little more complicated to set up. Then once it’s setup you’ll end up with a slow-as-mud website and no upward scalability. What if in the future you wanted to add a rails application to your website and move the blog to a subdomain? Can’t do that here.

\n\n

Simplicity is the name of the game. With Jekyll your content is the first thing you start creating, then you have Jekyll build your site and you’re left with a completely static website that you can host almost anywhere. The advantages to this are great: since the site is static and doesn’t require a database, hosting it is a cynch. You might even be able to host it for free! Since there’s no database there’s nothing a naughty user can mess with to damage your site. Finally since there’s no database calls to be made your site becomes incredibly fast. I think the pros far outweight the cons. If you don’t mind your site’s code being public then you can host it completely for free on github pages, too. Then it’s just a matter of pointing your domain there, setting up your cname file (a painless and simple setup) and you’re done!

\n\n

Jekyll isn’t for everything, though. It’s not going to replace Ruby on Rails and you’re not about to build a large scale web application with it. The best fit for a Jekyll site is, I think, most often the one that needs it most: users that want to build a website, but don’t want to pay an arm and a leg to just get a simple message out there. Even if programming isn’t your thing setting Jekyll up is a breeze, and I can help you out with that.

\n\n
\n
\n \n\n\n \n\n \n\n\n","content":"

Wordpress is everybody’s favourite blogging platform. It’s simple, and you can be up and running within minutes. There’s a few caveats, though: your site isn’t as customizable as a self-hosted installation of wordpress can be and that can be a little more complicated to set up. Then once it’s setup you’ll end up with a slow-as-mud website and no upward scalability. What if in the future you wanted to add a rails application to your website and move the blog to a subdomain? Can’t do that here.

\n\n

Simplicity is the name of the game. With Jekyll your content is the first thing you start creating, then you have Jekyll build your site and you’re left with a completely static website that you can host almost anywhere. The advantages to this are great: since the site is static and doesn’t require a database, hosting it is a cynch. You might even be able to host it for free! Since there’s no database there’s nothing a naughty user can mess with to damage your site. Finally since there’s no database calls to be made your site becomes incredibly fast. I think the pros far outweight the cons. If you don’t mind your site’s code being public then you can host it completely for free on github pages, too. Then it’s just a matter of pointing your domain there, setting up your cname file (a painless and simple setup) and you’re done!

\n\n

Jekyll isn’t for everything, though. It’s not going to replace Ruby on Rails and you’re not about to build a large scale web application with it. The best fit for a Jekyll site is, I think, most often the one that needs it most: users that want to build a website, but don’t want to pay an arm and a leg to just get a simple message out there. Even if programming isn’t your thing setting Jekyll up is a breeze, and I can help you out with that.

\n","relative_path":"_posts/2015-10-3-jekyll-is-awesome.md","previous":{"path":"_posts/2015-04-23-wordpress-on-heroku.md","relative_path":"_posts/2015-04-23-wordpress-on-heroku.md","url":"/blog/wordpress-on-heroku/","id":"/blog/wordpress-on-heroku","collection":"posts","draft":false,"categories":["tutorials"],"layout":"post","title":"Wordpress on Heroku","date":"2015-09-23 20:12:00 +0000","tags":["heroku","wordpress","wordpress on heroku","blogging"],"slug":"wordpress-on-heroku","ext":".md"},"url":"/blog/jekyll-is-awesome/","id":"/blog/jekyll-is-awesome","collection":"posts","excerpt":"Everything should be as simple as jekyll makes it","draft":false,"categories":["opinion pieces"],"layout":"post","title":"Jekyll is awesome","tags":["jekyll","blogging","static development"],"date":"2015-10-03 00:00:00 +0000","slug":"jekyll-is-awesome","ext":".md"},"path":"_posts/2015-04-23-wordpress-on-heroku.md","output":"\n\n\n \n \n \n \n \n \n\n Wordpress on Heroku\n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n\n\n\n \n\n
\n \n
\n\n\n
\n
\n

Wordpress on Heroku

\n

Sep 23, 2015 | |

\n
\n \n
\n

Wordpress on Heroku is great, but difficult to setup. You will need to sign up for Amazon Web Services and Heroku. You’ll need to install the Heroku toolbelt on your machine using “wget -qO- https://toolbelt.heroku.com/install-ubuntu.sh | sh”. I’ll assume you’re running Linux for this, but I’ll see about a Windows tutorial as well later on. Setting up AWS is also not going to be covered right now in this tutorial.

\n
    \n\t
  1. The first thing to do is setup LAMP on your Linux machine.
  2. \n\t
  3. Next get the latest version of Wordpress. Download it and unzip the file into your \"/var/www/html/\" folder.
  4. \n\t
  5. Download Amazon Web Services and Amazon S3 and Cloudfront.
  6. \n\t
  7. Unzip both of Amazon Web Services and Amazon S3 and Cloudfront into the wp-content/plugins folder.
  8. \n\t
  9. You should have been given access keys for your AWS user. Add them to your wp-config.php file like this:\n \t

    // AWS Access Keys //
    \n \tdefine( 'AWS_ACCESS_KEY_ID', 'your_aws_access_key_id_here' );
    \n \tdefine( 'AWS_SECRET_ACCESS_KEY', 'your_aws_secret_access_key_here' );

    \n
  10. \n\t
  11. Go here and add your Unique Keys and Salts to your wp-config.php file like below:\n \t

    define('AUTH_KEY', 'put your unique phrase here');
    \n \tdefine('SECURE_AUTH_KEY', 'put your unique phrase here');
    \n \tdefine('LOGGED_IN_KEY', 'put your unique phrase here');
    \n \tdefine('NONCE_KEY', 'put your unique phrase here');
    \n \tdefine('AUTH_SALT', 'put your unique phrase here');
    \n \tdefine('SECURE_AUTH_SALT', 'put your unique phrase here');
    \n \tdefine('LOGGED_IN_SALT', 'put your unique phrase here');
    \n \tdefine('NONCE_SALT', 'put your unique phrase here');

    \n
  12. \n\t
  13. Go to localhost/wordpress/ and run through the installation using the MySQL credentials you setup while setting up your LAMP stack. Check here if you're not sure what to do.
  14. \n\t
  15. Go to your dashboard, and click on the plugins tab.
  16. \n\t
  17. Activate both the Amazon Web Services and Amazon S3 and Cloudfront plugins. There should now be another tab at the bottom that says \"AWS\". If your AWS User is setup correctly then they should both work immediately and allow you to connect to a bucket.
  18. \n\t
  19. Go into your wordpress folder and open a terminal session there.
  20. \n\t
  21. In your terminal type $ git init That'll initialize the whole thing as a git repository.
  22. \n\t
  23. In your terminal type git add . to get all the WP files ready to be committed. This will take a second or two.
  24. \n\t
  25. Now type git commit -m 'Add your own commit message here' Wait for the wall of text to stop running.
  26. \n\t
  27. Now type heroku create That'll create a new Heroku app from that directory.
  28. \n\t
  29. Type heroku addons:add cleardb If all goes well then you're almost ready to push your installation to Heroku.
  30. \n\t
  31. Copy the code below with the Unique Keys and Salts you got earlier:\n \t

    heroku config:set AUTH_KEY='put your unique phrase here'
    \n \tSECURE_AUTH_KEY='put your unique phrase here'
    \n \tLOGGED_IN_KEY='put your unique phrase here'
    \n \tNONCE_KEY='put your unique phrase here'
    \n \tAUTH_SALT='put your unique phrase here'
    \n \tSECURE_AUTH_SALT='put your unique phrase here'
    \n \tLOGGED_IN_SALT='put your unique phrase here'
    \n \tNONCE_SALT='put your unique phrase here'

    \n
  32. \n\t
  33. Again in the terminal type git checkout -b production You'll store your production environment variables here.
  34. \n\t
  35. Add this line to your wp-config.php file:\n\t

    $db = parse_url($_ENV[\"CLEARDB_DATABASE_URL\"]);

    \n
  36. \n\t
  37. Change your database information in wp-config.php to the code below:\n \t

    define('DB_NAME', trim($db[\"path\"],\"/\"));
    \n \tdefine('DB_USER', $db[\"user\"]);
    \n \tdefine('DB_PASSWORD', $db[\"pass\"]);
    \n \tdefine('DB_HOST', $db[\"host\"]);

    \n
  38. \n\t
  39. Change your Unthentication Unique Keys and Salts to the below:\n \t

    define('AUTH_KEY', getenv('AUTH_KEY'));
    \n \tdefine('SECURE_AUTH_KEY', getenv('SECURE_AUTH_KEY'));
    \n \tdefine('LOGGED_IN_KEY', getenv('LOGGED_IN_KEY'));
    \n \tdefine('NONCE_KEY', getenv('NONCE_KEY'));
    \n \tdefine('AUTH_SALT', getenv('AUTH_SALT'));
    \n \tdefine('SECURE_AUTH_SALT', getenv('SECURE_AUTH_SALT'));
    \n \tdefine('LOGGED_IN_SALT', getenv('LOGGED_IN_SALT'));
    \n \tdefine('NONCE_SALT', getenv('NONCE_SALT'));
    \n \tdefine('AWS_ACCESS_KEY_ID', getenv('AWS_ACCESS_KEY_ID'));
    \n \tdefine('AWS_SECRET_ACCESS_KEY', getenv('AWS_SECRET_ACCESS_KEY'));

    \n
  40. \n\t
  41. Now you're all set. Type git push heroku production:master and let it finish. When that's done you can go to \"http://yourwordpressapp.heroku.com\" and complete your remote installation.\n
      \n\t
    1. In order to check out your remote installation simply switch back to the master branch with git checkout master
    2. \n
    \n
  42. \n
\n

Updating Wordpress

\n\n

If you need to update Wordpress (mine updated twice while I was working on this) you’ll need to take a few steps:

\n
    \n\t
  1. In a terminal in the html folder run sudo chown -R www-data:www-data wordpress/ That'll let you update wordpress locally through the app.
  2. \n\t
  3. Make sure you're on the master branch and update WP via the dashboard.
  4. \n\t
  5. Once Wordpress is finished updating run sudo chown -R your_user:your_user wordpress/ Now you'll be able to edit the folder yourself again.
  6. \n\t
  7. Commit the changes made by the update.
  8. \n\t
  9. Switch to the production branch and merge with master by running git merge master This shouldn't create any conflicts (it didn't with me).
  10. \n\t
  11. The wp-config file should be untouched, but check it just in case. If it doesn't have your production settings, simply edit the file again, and commit changes.
  12. \n\t
  13. Now run git push heroku production:master again, wait and your remote installation will be updated.\n
      \n\t
    • Remember to switch back to the master branch to get your local installation working again.
    • \n
    \n
  14. \n
\n

Adding/updating themes and plugins

\n\n

Adding/updating themes and plugins is easy.

\n
    \n\t
  1. Download the theme or plugin.
  2. \n\t
  3. Make sure you're in your master branch. Unzip the theme/folder into it's respective folder.
  4. \n\t
  5. In your local installation active the theme or plugin.
  6. \n\t
  7. Commit the changes, then switch to production.
  8. \n\t
  9. Run git merge master This should not create any conflicts if the plugin/theme is new.\n
      \n\t
    • If you're updating a conflict might be caused. If so, then in the terminal type git reset --hard
    • \n\t
    • Delete the older plugin/theme and replace with the new one, then merge again.
    • \n
    \n
  10. \n\t
  11. The wp-config file should be untouched, but check it just in case. If it doesn't have your production settings, simply edit the file again, and commit changes.
  12. \n\t
  13. Now run git push heroku production:master again, wait and your remote installation should now have the plugin/theme.\n
      \n\t
    • Go to \"http://yourwordpressapp.heroku.com/wp-admin\" and Wordpress might ask you to update the database. Simply go ahead and everything should work fine.
    • \n
    \n
  14. \n
\n\n
\n
\n \n\n\n \n\n \n\n\n","content":"

Wordpress on Heroku is great, but difficult to setup. You will need to sign up for Amazon Web Services and Heroku. You’ll need to install the Heroku toolbelt on your machine using “wget -qO- https://toolbelt.heroku.com/install-ubuntu.sh | sh”. I’ll assume you’re running Linux for this, but I’ll see about a Windows tutorial as well later on. Setting up AWS is also not going to be covered right now in this tutorial.

\n
    \n\t
  1. The first thing to do is setup LAMP on your Linux machine.
  2. \n\t
  3. Next get the latest version of Wordpress. Download it and unzip the file into your \"/var/www/html/\" folder.
  4. \n\t
  5. Download Amazon Web Services and Amazon S3 and Cloudfront.
  6. \n\t
  7. Unzip both of Amazon Web Services and Amazon S3 and Cloudfront into the wp-content/plugins folder.
  8. \n\t
  9. You should have been given access keys for your AWS user. Add them to your wp-config.php file like this:\n \t

    // AWS Access Keys //
    \n \tdefine( 'AWS_ACCESS_KEY_ID', 'your_aws_access_key_id_here' );
    \n \tdefine( 'AWS_SECRET_ACCESS_KEY', 'your_aws_secret_access_key_here' );

    \n
  10. \n\t
  11. Go here and add your Unique Keys and Salts to your wp-config.php file like below:\n \t

    define('AUTH_KEY', 'put your unique phrase here');
    \n \tdefine('SECURE_AUTH_KEY', 'put your unique phrase here');
    \n \tdefine('LOGGED_IN_KEY', 'put your unique phrase here');
    \n \tdefine('NONCE_KEY', 'put your unique phrase here');
    \n \tdefine('AUTH_SALT', 'put your unique phrase here');
    \n \tdefine('SECURE_AUTH_SALT', 'put your unique phrase here');
    \n \tdefine('LOGGED_IN_SALT', 'put your unique phrase here');
    \n \tdefine('NONCE_SALT', 'put your unique phrase here');

    \n
  12. \n\t
  13. Go to localhost/wordpress/ and run through the installation using the MySQL credentials you setup while setting up your LAMP stack. Check here if you're not sure what to do.
  14. \n\t
  15. Go to your dashboard, and click on the plugins tab.
  16. \n\t
  17. Activate both the Amazon Web Services and Amazon S3 and Cloudfront plugins. There should now be another tab at the bottom that says \"AWS\". If your AWS User is setup correctly then they should both work immediately and allow you to connect to a bucket.
  18. \n\t
  19. Go into your wordpress folder and open a terminal session there.
  20. \n\t
  21. In your terminal type $ git init That'll initialize the whole thing as a git repository.
  22. \n\t
  23. In your terminal type git add . to get all the WP files ready to be committed. This will take a second or two.
  24. \n\t
  25. Now type git commit -m 'Add your own commit message here' Wait for the wall of text to stop running.
  26. \n\t
  27. Now type heroku create That'll create a new Heroku app from that directory.
  28. \n\t
  29. Type heroku addons:add cleardb If all goes well then you're almost ready to push your installation to Heroku.
  30. \n\t
  31. Copy the code below with the Unique Keys and Salts you got earlier:\n \t

    heroku config:set AUTH_KEY='put your unique phrase here'
    \n \tSECURE_AUTH_KEY='put your unique phrase here'
    \n \tLOGGED_IN_KEY='put your unique phrase here'
    \n \tNONCE_KEY='put your unique phrase here'
    \n \tAUTH_SALT='put your unique phrase here'
    \n \tSECURE_AUTH_SALT='put your unique phrase here'
    \n \tLOGGED_IN_SALT='put your unique phrase here'
    \n \tNONCE_SALT='put your unique phrase here'

    \n
  32. \n\t
  33. Again in the terminal type git checkout -b production You'll store your production environment variables here.
  34. \n\t
  35. Add this line to your wp-config.php file:\n\t

    $db = parse_url($_ENV[\"CLEARDB_DATABASE_URL\"]);

    \n
  36. \n\t
  37. Change your database information in wp-config.php to the code below:\n \t

    define('DB_NAME', trim($db[\"path\"],\"/\"));
    \n \tdefine('DB_USER', $db[\"user\"]);
    \n \tdefine('DB_PASSWORD', $db[\"pass\"]);
    \n \tdefine('DB_HOST', $db[\"host\"]);

    \n
  38. \n\t
  39. Change your Unthentication Unique Keys and Salts to the below:\n \t

    define('AUTH_KEY', getenv('AUTH_KEY'));
    \n \tdefine('SECURE_AUTH_KEY', getenv('SECURE_AUTH_KEY'));
    \n \tdefine('LOGGED_IN_KEY', getenv('LOGGED_IN_KEY'));
    \n \tdefine('NONCE_KEY', getenv('NONCE_KEY'));
    \n \tdefine('AUTH_SALT', getenv('AUTH_SALT'));
    \n \tdefine('SECURE_AUTH_SALT', getenv('SECURE_AUTH_SALT'));
    \n \tdefine('LOGGED_IN_SALT', getenv('LOGGED_IN_SALT'));
    \n \tdefine('NONCE_SALT', getenv('NONCE_SALT'));
    \n \tdefine('AWS_ACCESS_KEY_ID', getenv('AWS_ACCESS_KEY_ID'));
    \n \tdefine('AWS_SECRET_ACCESS_KEY', getenv('AWS_SECRET_ACCESS_KEY'));

    \n
  40. \n\t
  41. Now you're all set. Type git push heroku production:master and let it finish. When that's done you can go to \"http://yourwordpressapp.heroku.com\" and complete your remote installation.\n
      \n\t
    1. In order to check out your remote installation simply switch back to the master branch with git checkout master
    2. \n
    \n
  42. \n
\n

Updating Wordpress

\n\n

If you need to update Wordpress (mine updated twice while I was working on this) you’ll need to take a few steps:

\n
    \n\t
  1. In a terminal in the html folder run sudo chown -R www-data:www-data wordpress/ That'll let you update wordpress locally through the app.
  2. \n\t
  3. Make sure you're on the master branch and update WP via the dashboard.
  4. \n\t
  5. Once Wordpress is finished updating run sudo chown -R your_user:your_user wordpress/ Now you'll be able to edit the folder yourself again.
  6. \n\t
  7. Commit the changes made by the update.
  8. \n\t
  9. Switch to the production branch and merge with master by running git merge master This shouldn't create any conflicts (it didn't with me).
  10. \n\t
  11. The wp-config file should be untouched, but check it just in case. If it doesn't have your production settings, simply edit the file again, and commit changes.
  12. \n\t
  13. Now run git push heroku production:master again, wait and your remote installation will be updated.\n
      \n\t
    • Remember to switch back to the master branch to get your local installation working again.
    • \n
    \n
  14. \n
\n

Adding/updating themes and plugins

\n\n

Adding/updating themes and plugins is easy.

\n
    \n\t
  1. Download the theme or plugin.
  2. \n\t
  3. Make sure you're in your master branch. Unzip the theme/folder into it's respective folder.
  4. \n\t
  5. In your local installation active the theme or plugin.
  6. \n\t
  7. Commit the changes, then switch to production.
  8. \n\t
  9. Run git merge master This should not create any conflicts if the plugin/theme is new.\n
      \n\t
    • If you're updating a conflict might be caused. If so, then in the terminal type git reset --hard
    • \n\t
    • Delete the older plugin/theme and replace with the new one, then merge again.
    • \n
    \n
  10. \n\t
  11. The wp-config file should be untouched, but check it just in case. If it doesn't have your production settings, simply edit the file again, and commit changes.
  12. \n\t
  13. Now run git push heroku production:master again, wait and your remote installation should now have the plugin/theme.\n
      \n\t
    • Go to \"http://yourwordpressapp.heroku.com/wp-admin\" and Wordpress might ask you to update the database. Simply go ahead and everything should work fine.
    • \n
    \n
  14. \n
\n","relative_path":"_posts/2015-04-23-wordpress-on-heroku.md","previous":null,"url":"/blog/wordpress-on-heroku/","id":"/blog/wordpress-on-heroku","collection":"posts","excerpt":"Wordpress on Heroku is great, but difficult to setup...","draft":false,"categories":["tutorials"],"layout":"post","title":"Wordpress on Heroku","date":"2015-09-23 20:12:00 +0000","tags":["heroku","wordpress","wordpress on heroku","blogging"],"slug":"wordpress-on-heroku","ext":".md"},"url":"/blog/jekyll-is-awesome/","id":"/blog/jekyll-is-awesome","collection":"posts","excerpt":"Everything should be as simple as jekyll makes it","draft":false,"categories":["opinion pieces"],"layout":"post","title":"Jekyll is awesome","tags":["jekyll","blogging","static development"],"date":"2015-10-03 00:00:00 +0000","slug":"jekyll-is-awesome","ext":".md"}); tags['static development'] = posts; var posts = [] posts.push({"next":{"next":{"next":null,"path":"_posts/2019-07-11-ledger-is-simply-amazing.md","output":"\n\n\n \n \n \n \n \n \n\n Ledger is amazing\n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n\n\n\n \n\n
\n \n
\n\n\n
\n
\n

Ledger is amazing

\n

Jul 11, 2019 | |

\n
\n \n
\n

Ledger is so simple it’s amazing!

\n\n

I’ve been through many money manager applications: GnuCash, MoneyLover, Firefly, YNAB (briefly). \nI’ve even tried to build my own, but was too lazy.

\n\n

They all lacked something that I really wanted (MoneyLover, Firefly), or were too expensive for me (YNAB), finicky/problematic (MoneyLover) or difficult for me to use across all my devices (GnuCash).

\n\n

Before Ledger I thought Firefly would be the one: it’s a FOSS laravel application, which is something I have loads of experience with, so I figured if it can’t do what I want right now, I’ll just make it do what I want. I never got around to that, and, now, I’ve fallen in love with something else.

\n\n

Why, though? What’s so great about Ledger?

\n\n

Naturally, it’s FOSS, but like I said it’s simple. So simple, that I can show how it works right now:

\n\n

Open a text file, and type this into it:

\n\n
2019/07/11  Amazon\n    expenses:gatorade           500\n    assets:wallet               -500\n
\n\n

That’s a transaction in ledger. That may not seem like much, and it isn’t. Ledger truly shines when you get the CLI tool, that allows you to perform queries on your ledger file. Like show your balance with ledger -f ledger.txt bal.

\n\n

That’s still not a lot, admitidely, but there’s more. Ledger allows for handling your commodities instead of just money. Think of it this way: you bought a Gatorade somewhere, and paid for it with some money. The exchanged one commodity for another. In other words, the transaction above can now look like this:

\n\n
2019/07/11  Amazon\n    expenses:gatorade           1 Gatorade\n    assets:wallet               -500 GYD\n
\n\n

You can read that as “Bought 1 Gatorade for 500 Guyana Dollars”. What that allows you to do, now, is a two things:

\n\n
    \n
  1. Keep track of how many Gatorade you’ve bought
  2. \n
  3. Keep track of the price of Gatorade over time (more on that later)
  4. \n
  5. Do silly things like calculate how many Gatorades you can buy with the money in your wallet (ledger -f ledger.txt bal wal -X Gatorade)
  6. \n
\n\n

This feature is something I’ve wanted to be able to do forever, and none of the other applications I’ve used have included it.

\n\n

Since ledger is a double-entry system, your transactions can get even fancier. Say your friend helped you pay for the Gatorade. Now your posting (that’s what transactions are called in ledger) looks like this:

\n\n
2019/07/11  Amazon\n    expenses:gatorade           1 Gatorade\n    liabilities:debt:Joe        -200 GYD\n    assets:wallet               -300 GYD\n
\n\n

This will now allow you to see how much you owe Joe, without having to do multiple transactions, like some applications would have you do.

\n\n

Now comes the part that’s usually hardest, or costs money: using ledger on multiple devices. With Firefly, this meant running a relational database somewhere (costs money), or with GnuCash this meant synchronizing their database file across devices, finding an application on each operating system that’ll open it and allow me to add stuff to it… you see my dilema. With Ledger this is comically simple since it’s a text file:

\n\n
    \n
  • Sync across my devices with anything from Google Drive to Syncthing to some custom S3 solution.
  • \n
  • Put it in git (this is what I did, because that let’s me do some other cool stuff).
  • \n
\n\n

Since it’s just text, it’s editable from basically anywhere, so making entries isn’t much of a problem anywhere.

\n\n

Now, you may be thinking it sounds rather annoying to have to edit a text file on my phone. What happens if I’m in the middle of something, and just want to make a quick entry?

\n\n

That’s where the community comes in:\nSee, I’m not the only crazy person out here. I’m far from the smartest, too. Ledger, and what’s called “plain text accounting” is already popular enough that there’s a subreddit and a website, not to mention the ledger website has exceptional documentation on how much you can do: https://www.ledger-cli.org/3.0/doc/ledger3.html.

\n\n

There are a couple Android and iOS apps out there, and countless ports or forks to choose from, as well as some nice web options.

\n\n

One more thing!

\n\n

Something I’ve wanted to do, but haven’t been able to: keep track of my taxes. More specifically, keep track of how much I owe the tax-man when I get paid for something, and then keep track of how much I can deduct when I buy stuff. Ledger can do it, rather easily. See an explanation here: https://www.ledger-cli.org/3.0/doc/ledger3.html#Concrete-Example-of-Automated-Transactions

\n\n
\n
\n \n\n\n \n\n \n\n\n","content":"

Ledger is so simple it’s amazing!

\n\n

I’ve been through many money manager applications: GnuCash, MoneyLover, Firefly, YNAB (briefly). \nI’ve even tried to build my own, but was too lazy.

\n\n

They all lacked something that I really wanted (MoneyLover, Firefly), or were too expensive for me (YNAB), finicky/problematic (MoneyLover) or difficult for me to use across all my devices (GnuCash).

\n\n

Before Ledger I thought Firefly would be the one: it’s a FOSS laravel application, which is something I have loads of experience with, so I figured if it can’t do what I want right now, I’ll just make it do what I want. I never got around to that, and, now, I’ve fallen in love with something else.

\n\n

Why, though? What’s so great about Ledger?

\n\n

Naturally, it’s FOSS, but like I said it’s simple. So simple, that I can show how it works right now:

\n\n

Open a text file, and type this into it:

\n\n
2019/07/11  Amazon\n    expenses:gatorade           500\n    assets:wallet               -500\n
\n\n

That’s a transaction in ledger. That may not seem like much, and it isn’t. Ledger truly shines when you get the CLI tool, that allows you to perform queries on your ledger file. Like show your balance with ledger -f ledger.txt bal.

\n\n

That’s still not a lot, admitidely, but there’s more. Ledger allows for handling your commodities instead of just money. Think of it this way: you bought a Gatorade somewhere, and paid for it with some money. The exchanged one commodity for another. In other words, the transaction above can now look like this:

\n\n
2019/07/11  Amazon\n    expenses:gatorade           1 Gatorade\n    assets:wallet               -500 GYD\n
\n\n

You can read that as “Bought 1 Gatorade for 500 Guyana Dollars”. What that allows you to do, now, is a two things:

\n\n
    \n
  1. Keep track of how many Gatorade you’ve bought
  2. \n
  3. Keep track of the price of Gatorade over time (more on that later)
  4. \n
  5. Do silly things like calculate how many Gatorades you can buy with the money in your wallet (ledger -f ledger.txt bal wal -X Gatorade)
  6. \n
\n\n

This feature is something I’ve wanted to be able to do forever, and none of the other applications I’ve used have included it.

\n\n

Since ledger is a double-entry system, your transactions can get even fancier. Say your friend helped you pay for the Gatorade. Now your posting (that’s what transactions are called in ledger) looks like this:

\n\n
2019/07/11  Amazon\n    expenses:gatorade           1 Gatorade\n    liabilities:debt:Joe        -200 GYD\n    assets:wallet               -300 GYD\n
\n\n

This will now allow you to see how much you owe Joe, without having to do multiple transactions, like some applications would have you do.

\n\n

Now comes the part that’s usually hardest, or costs money: using ledger on multiple devices. With Firefly, this meant running a relational database somewhere (costs money), or with GnuCash this meant synchronizing their database file across devices, finding an application on each operating system that’ll open it and allow me to add stuff to it… you see my dilema. With Ledger this is comically simple since it’s a text file:

\n\n\n\n

Since it’s just text, it’s editable from basically anywhere, so making entries isn’t much of a problem anywhere.

\n\n

Now, you may be thinking it sounds rather annoying to have to edit a text file on my phone. What happens if I’m in the middle of something, and just want to make a quick entry?

\n\n

That’s where the community comes in:\nSee, I’m not the only crazy person out here. I’m far from the smartest, too. Ledger, and what’s called “plain text accounting” is already popular enough that there’s a subreddit and a website, not to mention the ledger website has exceptional documentation on how much you can do: https://www.ledger-cli.org/3.0/doc/ledger3.html.

\n\n

There are a couple Android and iOS apps out there, and countless ports or forks to choose from, as well as some nice web options.

\n\n

One more thing!

\n\n

Something I’ve wanted to do, but haven’t been able to: keep track of my taxes. More specifically, keep track of how much I owe the tax-man when I get paid for something, and then keep track of how much I can deduct when I buy stuff. Ledger can do it, rather easily. See an explanation here: https://www.ledger-cli.org/3.0/doc/ledger3.html#Concrete-Example-of-Automated-Transactions

\n","relative_path":"_posts/2019-07-11-ledger-is-simply-amazing.md","previous":{"path":"_posts/2019-06-18-bitwarden-vs-dashlane.md","relative_path":"_posts/2019-06-18-bitwarden-vs-dashlane.md","url":"/blog/bitwarden-vs-dashlane/","id":"/blog/bitwarden-vs-dashlane","collection":"posts","draft":false,"categories":["opinion pieces"],"layout":"post","title":"Bitwarden vs Dashlane","tags":["comparison","password manager"],"date":"2019-06-18 00:00:00 +0000","slug":"bitwarden-vs-dashlane","ext":".md"},"url":"/blog/ledger-is-simply-amazing/","id":"/blog/ledger-is-simply-amazing","collection":"posts","excerpt":"Simplicity is highly underrated","draft":false,"categories":["gush"],"layout":"post","title":"Ledger is amazing","tags":["finance","money manager"],"date":"2019-07-11 00:00:00 +0000","slug":"ledger-is-simply-amazing","ext":".md"},"path":"_posts/2019-06-18-bitwarden-vs-dashlane.md","output":"\n\n\n \n \n \n \n \n \n\n Bitwarden vs Dashlane\n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n\n\n\n \n\n
\n \n
\n\n\n
\n
\n

Bitwarden vs Dashlane

\n

Jun 18, 2019 | |

\n
\n \n
\n

Bitwarden does everything Dashlane does, better.

\n

That’s the end of the post. You can go home, now.

\n\n
\n\n

If you want a further breakdown, consider these points:

\n\n

Security, most important, most overlooked

\n

From a pure security standpoint, it’s a toss-up between Dashlane and Bitwarden. Both offer best-in-class security, so your passwords are safe on both.

\n\n

Bitwarden offers 2FA auditing at the organization level for business users, while Dashlane does not. Enforcing is on the roadmap.

\n\n

I would add that Bitwarden can offer a little more peace of mind for two reasons:

\n\n

1. It’s open source.

\n

A great many of you just sighed, but it being open source means it can be checked constantly for issues. The source for all their software is here: http://github.com/bitwarden/

\n\n

This also means that if Bitwarden doesn’t have a feature you like, or something works in a way you don’t like, you can just change it.

\n\n

2. It’s self-hostable.

\n

Some hacker is far more likely to attack the behemoth that is Dashlane with it’s millions of user passwords, than they are to attack your little server with your 1000 passwords (at best). This also means that you are in control of your data, which is good news for the tin-foil hat wearers out there.

\n\n

You can even get Bitwarden’s paid features for the price of hosting your server by following this guide: https://www.reddit.com/r/selfhosted/comments/8usixz/let_me_introduce_you_to_bitwarden_rs_selfhosted/

\n\n
\n\n

Nobody cares about security, though, right? So let’s move on to the good stuff:

\n\n

Features, the good stuff (also price)

\n\n

Bitwarden offers every feature Dashlane does with loads more on top of those, and more of them for free. It’s paid version is also cheaper than Dashlane’s.

\n\n

Here’s a table I stole, that compares both service’s features:

\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
FeatureDashlaneBitwarden
Chrome supportyesyes
Firefox supportyesyes
Edge supportyesyes
Safari supportyesyes
Mac OS, Windows supportyesyes
Linux supportpooryes
Mac OS command-line clientnoyes
Windows command-line clientnoyes
Linux command-line clientnoyes
Android support, including auto-fillyesyes
Android auto-fill in Chromeyesyes
Auto-fill in Android work profileyesyes (1)
Android auto-fill shows full usernamesyesyes
iOS support, including auto-fillyesyes
Two-factor authenticationyesyes
YubiKey support in browser (Enterprise)noyes ($)
YubiKey support in browser (Personal)noyes ($)
YubiKey support in Androidnoyes ($)
YubiKey support in iOSnoyes ($)
Saved password in Android, iOSyesyes
Fingerprint login in Android, iOSyesyes
Synchronization across devicesyesyes
Import from LastPassyesyes
LastPass import distinguishes work from personal itemsnono
Preserves LastPass folders in some way when importingdoubtfulyes
Personal linked account support (or the equivalent)pooryes
Save location (personal vs. work) specified at creation timenoyes
Save location (folder / collection / space) editable in web appnoyes
Sensible password quality checks for master passwordnoyes
Password history on Linuxnoyes
Password history on Windows, Mac OSyesyes
Secure notesyesyes
Attachments on notes on Linuxnoyes
Attachments on notes on Windows, Mac OSyesyes
Shared folders with access control on Linuxnoyes
Shared folders with access control on Windowsyesyes
Shared folders with access control on Mac OSyesyes
Items can exist in multiple groups with distinct access controlnoyes
Nested foldersnoyes
Resists auto-filling invisible formsyesyes
Browser plugin only fills selected formunknownno
Browser plugin displays icon in form fieldsyesno
Browser plugin prompts to save new sites on Linuxyesyes
Browser plugin prompts to save new sites on Windows, Mac OSyesyes
2FA integrated into login entries in vault (Mac OS, Windows, iOS, Android)noyes
2FA integrated into login entries in vault (Linux)noyes
Auto-fill in browser disabled by defaultnoyes
Auto-fill in browser can be disabled by preferencenoyes
Admins can reset passwordsyesno
Admins can access other people’s unshared credentialsnono
Admins can reset other people’s 2fanono
2fa can be enforced at the organization levelnono (3)
2fa can be audited at the organization levelnoyes
Exporting items on Linuxnoyes
Exporting items on Windows, Mac OSyesyes
Password health reportsyesyes ($)
App export includes attachmentsunknownno
CLI export includes attachmentsnopoor (2)
Responsive to bug reports and feature requestsunknownyes
Open sourcenoyes
Option to self-hostnoyes
Users can delete own account (customer service not needed)yesyes
Admins can delete business account (customer service not needed)yesyes
Has a useful status page that can be subscribed toyesno
Number of outages in the past six months (since December, 2018)120
Enterprise price per user per month43
Personal price per user per month (no Attachments or YubiKey)4.990
Personal price per user per month (w/Attachments & YubiKey)4.990.84
\n\n

Note 1: In work profile apps Bitwarden might not pop up a dialog automatically inviting you to auto-fill, but it’ll display a notification you can tap to do it.

\n\n

Note 2: CLI allows individual attachments to be exported. The user would have to write a script to iterate through and export all of them.

\n\n

Note 3: On the product roadmap, not yet implemented as of writing (Click to see the feature request)

\n\n
\n
\n \n\n\n \n\n \n\n\n","content":"

Bitwarden does everything Dashlane does, better.

\n

That’s the end of the post. You can go home, now.

\n\n
\n\n

If you want a further breakdown, consider these points:

\n\n

Security, most important, most overlooked

\n

From a pure security standpoint, it’s a toss-up between Dashlane and Bitwarden. Both offer best-in-class security, so your passwords are safe on both.

\n\n

Bitwarden offers 2FA auditing at the organization level for business users, while Dashlane does not. Enforcing is on the roadmap.

\n\n

I would add that Bitwarden can offer a little more peace of mind for two reasons:

\n\n

1. It’s open source.

\n

A great many of you just sighed, but it being open source means it can be checked constantly for issues. The source for all their software is here: http://github.com/bitwarden/

\n\n

This also means that if Bitwarden doesn’t have a feature you like, or something works in a way you don’t like, you can just change it.

\n\n

2. It’s self-hostable.

\n

Some hacker is far more likely to attack the behemoth that is Dashlane with it’s millions of user passwords, than they are to attack your little server with your 1000 passwords (at best). This also means that you are in control of your data, which is good news for the tin-foil hat wearers out there.

\n\n

You can even get Bitwarden’s paid features for the price of hosting your server by following this guide: https://www.reddit.com/r/selfhosted/comments/8usixz/let_me_introduce_you_to_bitwarden_rs_selfhosted/

\n\n
\n\n

Nobody cares about security, though, right? So let’s move on to the good stuff:

\n\n

Features, the good stuff (also price)

\n\n

Bitwarden offers every feature Dashlane does with loads more on top of those, and more of them for free. It’s paid version is also cheaper than Dashlane’s.

\n\n

Here’s a table I stole, that compares both service’s features:

\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
FeatureDashlaneBitwarden
Chrome supportyesyes
Firefox supportyesyes
Edge supportyesyes
Safari supportyesyes
Mac OS, Windows supportyesyes
Linux supportpooryes
Mac OS command-line clientnoyes
Windows command-line clientnoyes
Linux command-line clientnoyes
Android support, including auto-fillyesyes
Android auto-fill in Chromeyesyes
Auto-fill in Android work profileyesyes (1)
Android auto-fill shows full usernamesyesyes
iOS support, including auto-fillyesyes
Two-factor authenticationyesyes
YubiKey support in browser (Enterprise)noyes ($)
YubiKey support in browser (Personal)noyes ($)
YubiKey support in Androidnoyes ($)
YubiKey support in iOSnoyes ($)
Saved password in Android, iOSyesyes
Fingerprint login in Android, iOSyesyes
Synchronization across devicesyesyes
Import from LastPassyesyes
LastPass import distinguishes work from personal itemsnono
Preserves LastPass folders in some way when importingdoubtfulyes
Personal linked account support (or the equivalent)pooryes
Save location (personal vs. work) specified at creation timenoyes
Save location (folder / collection / space) editable in web appnoyes
Sensible password quality checks for master passwordnoyes
Password history on Linuxnoyes
Password history on Windows, Mac OSyesyes
Secure notesyesyes
Attachments on notes on Linuxnoyes
Attachments on notes on Windows, Mac OSyesyes
Shared folders with access control on Linuxnoyes
Shared folders with access control on Windowsyesyes
Shared folders with access control on Mac OSyesyes
Items can exist in multiple groups with distinct access controlnoyes
Nested foldersnoyes
Resists auto-filling invisible formsyesyes
Browser plugin only fills selected formunknownno
Browser plugin displays icon in form fieldsyesno
Browser plugin prompts to save new sites on Linuxyesyes
Browser plugin prompts to save new sites on Windows, Mac OSyesyes
2FA integrated into login entries in vault (Mac OS, Windows, iOS, Android)noyes
2FA integrated into login entries in vault (Linux)noyes
Auto-fill in browser disabled by defaultnoyes
Auto-fill in browser can be disabled by preferencenoyes
Admins can reset passwordsyesno
Admins can access other people’s unshared credentialsnono
Admins can reset other people’s 2fanono
2fa can be enforced at the organization levelnono (3)
2fa can be audited at the organization levelnoyes
Exporting items on Linuxnoyes
Exporting items on Windows, Mac OSyesyes
Password health reportsyesyes ($)
App export includes attachmentsunknownno
CLI export includes attachmentsnopoor (2)
Responsive to bug reports and feature requestsunknownyes
Open sourcenoyes
Option to self-hostnoyes
Users can delete own account (customer service not needed)yesyes
Admins can delete business account (customer service not needed)yesyes
Has a useful status page that can be subscribed toyesno
Number of outages in the past six months (since December, 2018)120
Enterprise price per user per month43
Personal price per user per month (no Attachments or YubiKey)4.990
Personal price per user per month (w/Attachments & YubiKey)4.990.84
\n\n

Note 1: In work profile apps Bitwarden might not pop up a dialog automatically inviting you to auto-fill, but it’ll display a notification you can tap to do it.

\n\n

Note 2: CLI allows individual attachments to be exported. The user would have to write a script to iterate through and export all of them.

\n\n

Note 3: On the product roadmap, not yet implemented as of writing (Click to see the feature request)

\n","relative_path":"_posts/2019-06-18-bitwarden-vs-dashlane.md","previous":{"next":{"path":"_posts/2019-06-18-bitwarden-vs-dashlane.md","relative_path":"_posts/2019-06-18-bitwarden-vs-dashlane.md","url":"/blog/bitwarden-vs-dashlane/","id":"/blog/bitwarden-vs-dashlane","collection":"posts","draft":false,"categories":["opinion pieces"],"layout":"post","title":"Bitwarden vs Dashlane","tags":["comparison","password manager"],"date":"2019-06-18 00:00:00 +0000","slug":"bitwarden-vs-dashlane","ext":".md"},"path":"_posts/2019-04-26-funkwhale.md","output":"\n\n\n \n \n \n \n \n \n\n Funkwhale\n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n\n\n\n \n\n
\n \n
\n\n\n
\n
\n

Funkwhale

\n

Apr 26, 2019 | |

\n
\n \n \n
\n \n\n\n \n\n \n\n\n","content":"

Funkwhale is an open source grooveshark clone that anyone can self host. Since it offers a docker installation, spinning up an intance shouldn’t be too difficult, and the modest hardware requirements mean hosting should’nt cost much more than a couple dollars a month.

\n","relative_path":"_posts/2019-04-26-funkwhale.md","previous":{"path":"_posts/2015-10-3-jekyll-is-awesome.md","relative_path":"_posts/2015-10-3-jekyll-is-awesome.md","url":"/blog/jekyll-is-awesome/","id":"/blog/jekyll-is-awesome","collection":"posts","draft":false,"categories":["opinion pieces"],"layout":"post","title":"Jekyll is awesome","tags":["jekyll","blogging","static development"],"date":"2015-10-03 00:00:00 +0000","slug":"jekyll-is-awesome","ext":".md"},"url":"/blog/funkwhale/","id":"/blog/funkwhale","collection":"posts","excerpt":"Funkwhale is what Grooveshark should've been","draft":false,"categories":["opinion pieces"],"layout":"post","title":"Funkwhale","tags":["ideas","music"],"date":"2019-04-26 00:00:00 +0000","slug":"funkwhale","ext":".md"},"url":"/blog/bitwarden-vs-dashlane/","id":"/blog/bitwarden-vs-dashlane","collection":"posts","excerpt":"Bitwarden does everything Dashlane does, better","draft":false,"categories":["opinion pieces"],"layout":"post","title":"Bitwarden vs Dashlane","tags":["comparison","password manager"],"date":"2019-06-18 00:00:00 +0000","slug":"bitwarden-vs-dashlane","ext":".md"},"path":"_posts/2019-04-26-funkwhale.md","output":"\n\n\n \n \n \n \n \n \n\n Funkwhale\n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n\n\n\n \n\n
\n \n
\n\n\n
\n
\n

Funkwhale

\n

Apr 26, 2019 | |

\n
\n \n \n
\n \n\n\n \n\n \n\n\n","content":"

Funkwhale is an open source grooveshark clone that anyone can self host. Since it offers a docker installation, spinning up an intance shouldn’t be too difficult, and the modest hardware requirements mean hosting should’nt cost much more than a couple dollars a month.

\n","relative_path":"_posts/2019-04-26-funkwhale.md","previous":{"next":{"next":{"path":"_posts/2019-06-18-bitwarden-vs-dashlane.md","relative_path":"_posts/2019-06-18-bitwarden-vs-dashlane.md","url":"/blog/bitwarden-vs-dashlane/","id":"/blog/bitwarden-vs-dashlane","collection":"posts","draft":false,"categories":["opinion pieces"],"layout":"post","title":"Bitwarden vs Dashlane","tags":["comparison","password manager"],"date":"2019-06-18 00:00:00 +0000","slug":"bitwarden-vs-dashlane","ext":".md"},"path":"_posts/2019-04-26-funkwhale.md","output":"\n\n\n \n \n \n \n \n \n\n Funkwhale\n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n\n\n\n \n\n
\n \n
\n\n\n
\n
\n

Funkwhale

\n

Apr 26, 2019 | |

\n
\n \n \n
\n \n\n\n \n\n \n\n\n","content":"

Funkwhale is an open source grooveshark clone that anyone can self host. Since it offers a docker installation, spinning up an intance shouldn’t be too difficult, and the modest hardware requirements mean hosting should’nt cost much more than a couple dollars a month.

\n","relative_path":"_posts/2019-04-26-funkwhale.md","previous":{"path":"_posts/2015-10-3-jekyll-is-awesome.md","relative_path":"_posts/2015-10-3-jekyll-is-awesome.md","url":"/blog/jekyll-is-awesome/","id":"/blog/jekyll-is-awesome","collection":"posts","draft":false,"categories":["opinion pieces"],"layout":"post","title":"Jekyll is awesome","tags":["jekyll","blogging","static development"],"date":"2015-10-03 00:00:00 +0000","slug":"jekyll-is-awesome","ext":".md"},"url":"/blog/funkwhale/","id":"/blog/funkwhale","collection":"posts","excerpt":"Funkwhale is what Grooveshark should've been","draft":false,"categories":["opinion pieces"],"layout":"post","title":"Funkwhale","tags":["ideas","music"],"date":"2019-04-26 00:00:00 +0000","slug":"funkwhale","ext":".md"},"path":"_posts/2015-10-3-jekyll-is-awesome.md","output":"\n\n\n \n \n \n \n \n \n\n Jekyll is awesome\n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n\n\n\n \n\n
\n \n
\n\n\n
\n
\n

Jekyll is awesome

\n

Oct 3, 2015 | |

\n
\n \n
\n

Wordpress is everybody’s favourite blogging platform. It’s simple, and you can be up and running within minutes. There’s a few caveats, though: your site isn’t as customizable as a self-hosted installation of wordpress can be and that can be a little more complicated to set up. Then once it’s setup you’ll end up with a slow-as-mud website and no upward scalability. What if in the future you wanted to add a rails application to your website and move the blog to a subdomain? Can’t do that here.

\n\n

Simplicity is the name of the game. With Jekyll your content is the first thing you start creating, then you have Jekyll build your site and you’re left with a completely static website that you can host almost anywhere. The advantages to this are great: since the site is static and doesn’t require a database, hosting it is a cynch. You might even be able to host it for free! Since there’s no database there’s nothing a naughty user can mess with to damage your site. Finally since there’s no database calls to be made your site becomes incredibly fast. I think the pros far outweight the cons. If you don’t mind your site’s code being public then you can host it completely for free on github pages, too. Then it’s just a matter of pointing your domain there, setting up your cname file (a painless and simple setup) and you’re done!

\n\n

Jekyll isn’t for everything, though. It’s not going to replace Ruby on Rails and you’re not about to build a large scale web application with it. The best fit for a Jekyll site is, I think, most often the one that needs it most: users that want to build a website, but don’t want to pay an arm and a leg to just get a simple message out there. Even if programming isn’t your thing setting Jekyll up is a breeze, and I can help you out with that.

\n\n
\n
\n \n\n\n \n\n \n\n\n","content":"

Wordpress is everybody’s favourite blogging platform. It’s simple, and you can be up and running within minutes. There’s a few caveats, though: your site isn’t as customizable as a self-hosted installation of wordpress can be and that can be a little more complicated to set up. Then once it’s setup you’ll end up with a slow-as-mud website and no upward scalability. What if in the future you wanted to add a rails application to your website and move the blog to a subdomain? Can’t do that here.

\n\n

Simplicity is the name of the game. With Jekyll your content is the first thing you start creating, then you have Jekyll build your site and you’re left with a completely static website that you can host almost anywhere. The advantages to this are great: since the site is static and doesn’t require a database, hosting it is a cynch. You might even be able to host it for free! Since there’s no database there’s nothing a naughty user can mess with to damage your site. Finally since there’s no database calls to be made your site becomes incredibly fast. I think the pros far outweight the cons. If you don’t mind your site’s code being public then you can host it completely for free on github pages, too. Then it’s just a matter of pointing your domain there, setting up your cname file (a painless and simple setup) and you’re done!

\n\n

Jekyll isn’t for everything, though. It’s not going to replace Ruby on Rails and you’re not about to build a large scale web application with it. The best fit for a Jekyll site is, I think, most often the one that needs it most: users that want to build a website, but don’t want to pay an arm and a leg to just get a simple message out there. Even if programming isn’t your thing setting Jekyll up is a breeze, and I can help you out with that.

\n","relative_path":"_posts/2015-10-3-jekyll-is-awesome.md","previous":{"next":{"path":"_posts/2015-10-3-jekyll-is-awesome.md","relative_path":"_posts/2015-10-3-jekyll-is-awesome.md","url":"/blog/jekyll-is-awesome/","id":"/blog/jekyll-is-awesome","collection":"posts","draft":false,"categories":["opinion pieces"],"layout":"post","title":"Jekyll is awesome","tags":["jekyll","blogging","static development"],"date":"2015-10-03 00:00:00 +0000","slug":"jekyll-is-awesome","ext":".md"},"path":"_posts/2015-04-23-wordpress-on-heroku.md","output":"\n\n\n \n \n \n \n \n \n\n Wordpress on Heroku\n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n\n\n\n \n\n
\n \n
\n\n\n
\n
\n

Wordpress on Heroku

\n

Sep 23, 2015 | |

\n
\n \n
\n

Wordpress on Heroku is great, but difficult to setup. You will need to sign up for Amazon Web Services and Heroku. You’ll need to install the Heroku toolbelt on your machine using “wget -qO- https://toolbelt.heroku.com/install-ubuntu.sh | sh”. I’ll assume you’re running Linux for this, but I’ll see about a Windows tutorial as well later on. Setting up AWS is also not going to be covered right now in this tutorial.

\n
    \n\t
  1. The first thing to do is setup LAMP on your Linux machine.
  2. \n\t
  3. Next get the latest version of Wordpress. Download it and unzip the file into your \"/var/www/html/\" folder.
  4. \n\t
  5. Download Amazon Web Services and Amazon S3 and Cloudfront.
  6. \n\t
  7. Unzip both of Amazon Web Services and Amazon S3 and Cloudfront into the wp-content/plugins folder.
  8. \n\t
  9. You should have been given access keys for your AWS user. Add them to your wp-config.php file like this:\n \t

    // AWS Access Keys //
    \n \tdefine( 'AWS_ACCESS_KEY_ID', 'your_aws_access_key_id_here' );
    \n \tdefine( 'AWS_SECRET_ACCESS_KEY', 'your_aws_secret_access_key_here' );

    \n
  10. \n\t
  11. Go here and add your Unique Keys and Salts to your wp-config.php file like below:\n \t

    define('AUTH_KEY', 'put your unique phrase here');
    \n \tdefine('SECURE_AUTH_KEY', 'put your unique phrase here');
    \n \tdefine('LOGGED_IN_KEY', 'put your unique phrase here');
    \n \tdefine('NONCE_KEY', 'put your unique phrase here');
    \n \tdefine('AUTH_SALT', 'put your unique phrase here');
    \n \tdefine('SECURE_AUTH_SALT', 'put your unique phrase here');
    \n \tdefine('LOGGED_IN_SALT', 'put your unique phrase here');
    \n \tdefine('NONCE_SALT', 'put your unique phrase here');

    \n
  12. \n\t
  13. Go to localhost/wordpress/ and run through the installation using the MySQL credentials you setup while setting up your LAMP stack. Check here if you're not sure what to do.
  14. \n\t
  15. Go to your dashboard, and click on the plugins tab.
  16. \n\t
  17. Activate both the Amazon Web Services and Amazon S3 and Cloudfront plugins. There should now be another tab at the bottom that says \"AWS\". If your AWS User is setup correctly then they should both work immediately and allow you to connect to a bucket.
  18. \n\t
  19. Go into your wordpress folder and open a terminal session there.
  20. \n\t
  21. In your terminal type $ git init That'll initialize the whole thing as a git repository.
  22. \n\t
  23. In your terminal type git add . to get all the WP files ready to be committed. This will take a second or two.
  24. \n\t
  25. Now type git commit -m 'Add your own commit message here' Wait for the wall of text to stop running.
  26. \n\t
  27. Now type heroku create That'll create a new Heroku app from that directory.
  28. \n\t
  29. Type heroku addons:add cleardb If all goes well then you're almost ready to push your installation to Heroku.
  30. \n\t
  31. Copy the code below with the Unique Keys and Salts you got earlier:\n \t

    heroku config:set AUTH_KEY='put your unique phrase here'
    \n \tSECURE_AUTH_KEY='put your unique phrase here'
    \n \tLOGGED_IN_KEY='put your unique phrase here'
    \n \tNONCE_KEY='put your unique phrase here'
    \n \tAUTH_SALT='put your unique phrase here'
    \n \tSECURE_AUTH_SALT='put your unique phrase here'
    \n \tLOGGED_IN_SALT='put your unique phrase here'
    \n \tNONCE_SALT='put your unique phrase here'

    \n
  32. \n\t
  33. Again in the terminal type git checkout -b production You'll store your production environment variables here.
  34. \n\t
  35. Add this line to your wp-config.php file:\n\t

    $db = parse_url($_ENV[\"CLEARDB_DATABASE_URL\"]);

    \n
  36. \n\t
  37. Change your database information in wp-config.php to the code below:\n \t

    define('DB_NAME', trim($db[\"path\"],\"/\"));
    \n \tdefine('DB_USER', $db[\"user\"]);
    \n \tdefine('DB_PASSWORD', $db[\"pass\"]);
    \n \tdefine('DB_HOST', $db[\"host\"]);

    \n
  38. \n\t
  39. Change your Unthentication Unique Keys and Salts to the below:\n \t

    define('AUTH_KEY', getenv('AUTH_KEY'));
    \n \tdefine('SECURE_AUTH_KEY', getenv('SECURE_AUTH_KEY'));
    \n \tdefine('LOGGED_IN_KEY', getenv('LOGGED_IN_KEY'));
    \n \tdefine('NONCE_KEY', getenv('NONCE_KEY'));
    \n \tdefine('AUTH_SALT', getenv('AUTH_SALT'));
    \n \tdefine('SECURE_AUTH_SALT', getenv('SECURE_AUTH_SALT'));
    \n \tdefine('LOGGED_IN_SALT', getenv('LOGGED_IN_SALT'));
    \n \tdefine('NONCE_SALT', getenv('NONCE_SALT'));
    \n \tdefine('AWS_ACCESS_KEY_ID', getenv('AWS_ACCESS_KEY_ID'));
    \n \tdefine('AWS_SECRET_ACCESS_KEY', getenv('AWS_SECRET_ACCESS_KEY'));

    \n
  40. \n\t
  41. Now you're all set. Type git push heroku production:master and let it finish. When that's done you can go to \"http://yourwordpressapp.heroku.com\" and complete your remote installation.\n
      \n\t
    1. In order to check out your remote installation simply switch back to the master branch with git checkout master
    2. \n
    \n
  42. \n
\n

Updating Wordpress

\n\n

If you need to update Wordpress (mine updated twice while I was working on this) you’ll need to take a few steps:

\n
    \n\t
  1. In a terminal in the html folder run sudo chown -R www-data:www-data wordpress/ That'll let you update wordpress locally through the app.
  2. \n\t
  3. Make sure you're on the master branch and update WP via the dashboard.
  4. \n\t
  5. Once Wordpress is finished updating run sudo chown -R your_user:your_user wordpress/ Now you'll be able to edit the folder yourself again.
  6. \n\t
  7. Commit the changes made by the update.
  8. \n\t
  9. Switch to the production branch and merge with master by running git merge master This shouldn't create any conflicts (it didn't with me).
  10. \n\t
  11. The wp-config file should be untouched, but check it just in case. If it doesn't have your production settings, simply edit the file again, and commit changes.
  12. \n\t
  13. Now run git push heroku production:master again, wait and your remote installation will be updated.\n
      \n\t
    • Remember to switch back to the master branch to get your local installation working again.
    • \n
    \n
  14. \n
\n

Adding/updating themes and plugins

\n\n

Adding/updating themes and plugins is easy.

\n
    \n\t
  1. Download the theme or plugin.
  2. \n\t
  3. Make sure you're in your master branch. Unzip the theme/folder into it's respective folder.
  4. \n\t
  5. In your local installation active the theme or plugin.
  6. \n\t
  7. Commit the changes, then switch to production.
  8. \n\t
  9. Run git merge master This should not create any conflicts if the plugin/theme is new.\n
      \n\t
    • If you're updating a conflict might be caused. If so, then in the terminal type git reset --hard
    • \n\t
    • Delete the older plugin/theme and replace with the new one, then merge again.
    • \n
    \n
  10. \n\t
  11. The wp-config file should be untouched, but check it just in case. If it doesn't have your production settings, simply edit the file again, and commit changes.
  12. \n\t
  13. Now run git push heroku production:master again, wait and your remote installation should now have the plugin/theme.\n
      \n\t
    • Go to \"http://yourwordpressapp.heroku.com/wp-admin\" and Wordpress might ask you to update the database. Simply go ahead and everything should work fine.
    • \n
    \n
  14. \n
\n\n
\n
\n \n\n\n \n\n \n\n\n","content":"

Wordpress on Heroku is great, but difficult to setup. You will need to sign up for Amazon Web Services and Heroku. You’ll need to install the Heroku toolbelt on your machine using “wget -qO- https://toolbelt.heroku.com/install-ubuntu.sh | sh”. I’ll assume you’re running Linux for this, but I’ll see about a Windows tutorial as well later on. Setting up AWS is also not going to be covered right now in this tutorial.

\n
    \n\t
  1. The first thing to do is setup LAMP on your Linux machine.
  2. \n\t
  3. Next get the latest version of Wordpress. Download it and unzip the file into your \"/var/www/html/\" folder.
  4. \n\t
  5. Download Amazon Web Services and Amazon S3 and Cloudfront.
  6. \n\t
  7. Unzip both of Amazon Web Services and Amazon S3 and Cloudfront into the wp-content/plugins folder.
  8. \n\t
  9. You should have been given access keys for your AWS user. Add them to your wp-config.php file like this:\n \t

    // AWS Access Keys //
    \n \tdefine( 'AWS_ACCESS_KEY_ID', 'your_aws_access_key_id_here' );
    \n \tdefine( 'AWS_SECRET_ACCESS_KEY', 'your_aws_secret_access_key_here' );

    \n
  10. \n\t
  11. Go here and add your Unique Keys and Salts to your wp-config.php file like below:\n \t

    define('AUTH_KEY', 'put your unique phrase here');
    \n \tdefine('SECURE_AUTH_KEY', 'put your unique phrase here');
    \n \tdefine('LOGGED_IN_KEY', 'put your unique phrase here');
    \n \tdefine('NONCE_KEY', 'put your unique phrase here');
    \n \tdefine('AUTH_SALT', 'put your unique phrase here');
    \n \tdefine('SECURE_AUTH_SALT', 'put your unique phrase here');
    \n \tdefine('LOGGED_IN_SALT', 'put your unique phrase here');
    \n \tdefine('NONCE_SALT', 'put your unique phrase here');

    \n
  12. \n\t
  13. Go to localhost/wordpress/ and run through the installation using the MySQL credentials you setup while setting up your LAMP stack. Check here if you're not sure what to do.
  14. \n\t
  15. Go to your dashboard, and click on the plugins tab.
  16. \n\t
  17. Activate both the Amazon Web Services and Amazon S3 and Cloudfront plugins. There should now be another tab at the bottom that says \"AWS\". If your AWS User is setup correctly then they should both work immediately and allow you to connect to a bucket.
  18. \n\t
  19. Go into your wordpress folder and open a terminal session there.
  20. \n\t
  21. In your terminal type $ git init That'll initialize the whole thing as a git repository.
  22. \n\t
  23. In your terminal type git add . to get all the WP files ready to be committed. This will take a second or two.
  24. \n\t
  25. Now type git commit -m 'Add your own commit message here' Wait for the wall of text to stop running.
  26. \n\t
  27. Now type heroku create That'll create a new Heroku app from that directory.
  28. \n\t
  29. Type heroku addons:add cleardb If all goes well then you're almost ready to push your installation to Heroku.
  30. \n\t
  31. Copy the code below with the Unique Keys and Salts you got earlier:\n \t

    heroku config:set AUTH_KEY='put your unique phrase here'
    \n \tSECURE_AUTH_KEY='put your unique phrase here'
    \n \tLOGGED_IN_KEY='put your unique phrase here'
    \n \tNONCE_KEY='put your unique phrase here'
    \n \tAUTH_SALT='put your unique phrase here'
    \n \tSECURE_AUTH_SALT='put your unique phrase here'
    \n \tLOGGED_IN_SALT='put your unique phrase here'
    \n \tNONCE_SALT='put your unique phrase here'

    \n
  32. \n\t
  33. Again in the terminal type git checkout -b production You'll store your production environment variables here.
  34. \n\t
  35. Add this line to your wp-config.php file:\n\t

    $db = parse_url($_ENV[\"CLEARDB_DATABASE_URL\"]);

    \n
  36. \n\t
  37. Change your database information in wp-config.php to the code below:\n \t

    define('DB_NAME', trim($db[\"path\"],\"/\"));
    \n \tdefine('DB_USER', $db[\"user\"]);
    \n \tdefine('DB_PASSWORD', $db[\"pass\"]);
    \n \tdefine('DB_HOST', $db[\"host\"]);

    \n
  38. \n\t
  39. Change your Unthentication Unique Keys and Salts to the below:\n \t

    define('AUTH_KEY', getenv('AUTH_KEY'));
    \n \tdefine('SECURE_AUTH_KEY', getenv('SECURE_AUTH_KEY'));
    \n \tdefine('LOGGED_IN_KEY', getenv('LOGGED_IN_KEY'));
    \n \tdefine('NONCE_KEY', getenv('NONCE_KEY'));
    \n \tdefine('AUTH_SALT', getenv('AUTH_SALT'));
    \n \tdefine('SECURE_AUTH_SALT', getenv('SECURE_AUTH_SALT'));
    \n \tdefine('LOGGED_IN_SALT', getenv('LOGGED_IN_SALT'));
    \n \tdefine('NONCE_SALT', getenv('NONCE_SALT'));
    \n \tdefine('AWS_ACCESS_KEY_ID', getenv('AWS_ACCESS_KEY_ID'));
    \n \tdefine('AWS_SECRET_ACCESS_KEY', getenv('AWS_SECRET_ACCESS_KEY'));

    \n
  40. \n\t
  41. Now you're all set. Type git push heroku production:master and let it finish. When that's done you can go to \"http://yourwordpressapp.heroku.com\" and complete your remote installation.\n
      \n\t
    1. In order to check out your remote installation simply switch back to the master branch with git checkout master
    2. \n
    \n
  42. \n
\n

Updating Wordpress

\n\n

If you need to update Wordpress (mine updated twice while I was working on this) you’ll need to take a few steps:

\n
    \n\t
  1. In a terminal in the html folder run sudo chown -R www-data:www-data wordpress/ That'll let you update wordpress locally through the app.
  2. \n\t
  3. Make sure you're on the master branch and update WP via the dashboard.
  4. \n\t
  5. Once Wordpress is finished updating run sudo chown -R your_user:your_user wordpress/ Now you'll be able to edit the folder yourself again.
  6. \n\t
  7. Commit the changes made by the update.
  8. \n\t
  9. Switch to the production branch and merge with master by running git merge master This shouldn't create any conflicts (it didn't with me).
  10. \n\t
  11. The wp-config file should be untouched, but check it just in case. If it doesn't have your production settings, simply edit the file again, and commit changes.
  12. \n\t
  13. Now run git push heroku production:master again, wait and your remote installation will be updated.\n
      \n\t
    • Remember to switch back to the master branch to get your local installation working again.
    • \n
    \n
  14. \n
\n

Adding/updating themes and plugins

\n\n

Adding/updating themes and plugins is easy.

\n
    \n\t
  1. Download the theme or plugin.
  2. \n\t
  3. Make sure you're in your master branch. Unzip the theme/folder into it's respective folder.
  4. \n\t
  5. In your local installation active the theme or plugin.
  6. \n\t
  7. Commit the changes, then switch to production.
  8. \n\t
  9. Run git merge master This should not create any conflicts if the plugin/theme is new.\n
      \n\t
    • If you're updating a conflict might be caused. If so, then in the terminal type git reset --hard
    • \n\t
    • Delete the older plugin/theme and replace with the new one, then merge again.
    • \n
    \n
  10. \n\t
  11. The wp-config file should be untouched, but check it just in case. If it doesn't have your production settings, simply edit the file again, and commit changes.
  12. \n\t
  13. Now run git push heroku production:master again, wait and your remote installation should now have the plugin/theme.\n
      \n\t
    • Go to \"http://yourwordpressapp.heroku.com/wp-admin\" and Wordpress might ask you to update the database. Simply go ahead and everything should work fine.
    • \n
    \n
  14. \n
\n","relative_path":"_posts/2015-04-23-wordpress-on-heroku.md","previous":null,"url":"/blog/wordpress-on-heroku/","id":"/blog/wordpress-on-heroku","collection":"posts","excerpt":"Wordpress on Heroku is great, but difficult to setup...","draft":false,"categories":["tutorials"],"layout":"post","title":"Wordpress on Heroku","date":"2015-09-23 20:12:00 +0000","tags":["heroku","wordpress","wordpress on heroku","blogging"],"slug":"wordpress-on-heroku","ext":".md"},"url":"/blog/jekyll-is-awesome/","id":"/blog/jekyll-is-awesome","collection":"posts","excerpt":"Everything should be as simple as jekyll makes it","draft":false,"categories":["opinion pieces"],"layout":"post","title":"Jekyll is awesome","tags":["jekyll","blogging","static development"],"date":"2015-10-03 00:00:00 +0000","slug":"jekyll-is-awesome","ext":".md"},"url":"/blog/funkwhale/","id":"/blog/funkwhale","collection":"posts","excerpt":"Funkwhale is what Grooveshark should've been","draft":false,"categories":["opinion pieces"],"layout":"post","title":"Funkwhale","tags":["ideas","music"],"date":"2019-04-26 00:00:00 +0000","slug":"funkwhale","ext":".md"}); tags['ideas'] = posts; var posts = [] posts.push({"next":{"next":{"next":null,"path":"_posts/2019-07-11-ledger-is-simply-amazing.md","output":"\n\n\n \n \n \n \n \n \n\n Ledger is amazing\n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n\n\n\n \n\n
\n \n
\n\n\n
\n
\n

Ledger is amazing

\n

Jul 11, 2019 | |

\n
\n \n
\n

Ledger is so simple it’s amazing!

\n\n

I’ve been through many money manager applications: GnuCash, MoneyLover, Firefly, YNAB (briefly). \nI’ve even tried to build my own, but was too lazy.

\n\n

They all lacked something that I really wanted (MoneyLover, Firefly), or were too expensive for me (YNAB), finicky/problematic (MoneyLover) or difficult for me to use across all my devices (GnuCash).

\n\n

Before Ledger I thought Firefly would be the one: it’s a FOSS laravel application, which is something I have loads of experience with, so I figured if it can’t do what I want right now, I’ll just make it do what I want. I never got around to that, and, now, I’ve fallen in love with something else.

\n\n

Why, though? What’s so great about Ledger?

\n\n

Naturally, it’s FOSS, but like I said it’s simple. So simple, that I can show how it works right now:

\n\n

Open a text file, and type this into it:

\n\n
2019/07/11  Amazon\n    expenses:gatorade           500\n    assets:wallet               -500\n
\n\n

That’s a transaction in ledger. That may not seem like much, and it isn’t. Ledger truly shines when you get the CLI tool, that allows you to perform queries on your ledger file. Like show your balance with ledger -f ledger.txt bal.

\n\n

That’s still not a lot, admitidely, but there’s more. Ledger allows for handling your commodities instead of just money. Think of it this way: you bought a Gatorade somewhere, and paid for it with some money. The exchanged one commodity for another. In other words, the transaction above can now look like this:

\n\n
2019/07/11  Amazon\n    expenses:gatorade           1 Gatorade\n    assets:wallet               -500 GYD\n
\n\n

You can read that as “Bought 1 Gatorade for 500 Guyana Dollars”. What that allows you to do, now, is a two things:

\n\n
    \n
  1. Keep track of how many Gatorade you’ve bought
  2. \n
  3. Keep track of the price of Gatorade over time (more on that later)
  4. \n
  5. Do silly things like calculate how many Gatorades you can buy with the money in your wallet (ledger -f ledger.txt bal wal -X Gatorade)
  6. \n
\n\n

This feature is something I’ve wanted to be able to do forever, and none of the other applications I’ve used have included it.

\n\n

Since ledger is a double-entry system, your transactions can get even fancier. Say your friend helped you pay for the Gatorade. Now your posting (that’s what transactions are called in ledger) looks like this:

\n\n
2019/07/11  Amazon\n    expenses:gatorade           1 Gatorade\n    liabilities:debt:Joe        -200 GYD\n    assets:wallet               -300 GYD\n
\n\n

This will now allow you to see how much you owe Joe, without having to do multiple transactions, like some applications would have you do.

\n\n

Now comes the part that’s usually hardest, or costs money: using ledger on multiple devices. With Firefly, this meant running a relational database somewhere (costs money), or with GnuCash this meant synchronizing their database file across devices, finding an application on each operating system that’ll open it and allow me to add stuff to it… you see my dilema. With Ledger this is comically simple since it’s a text file:

\n\n
    \n
  • Sync across my devices with anything from Google Drive to Syncthing to some custom S3 solution.
  • \n
  • Put it in git (this is what I did, because that let’s me do some other cool stuff).
  • \n
\n\n

Since it’s just text, it’s editable from basically anywhere, so making entries isn’t much of a problem anywhere.

\n\n

Now, you may be thinking it sounds rather annoying to have to edit a text file on my phone. What happens if I’m in the middle of something, and just want to make a quick entry?

\n\n

That’s where the community comes in:\nSee, I’m not the only crazy person out here. I’m far from the smartest, too. Ledger, and what’s called “plain text accounting” is already popular enough that there’s a subreddit and a website, not to mention the ledger website has exceptional documentation on how much you can do: https://www.ledger-cli.org/3.0/doc/ledger3.html.

\n\n

There are a couple Android and iOS apps out there, and countless ports or forks to choose from, as well as some nice web options.

\n\n

One more thing!

\n\n

Something I’ve wanted to do, but haven’t been able to: keep track of my taxes. More specifically, keep track of how much I owe the tax-man when I get paid for something, and then keep track of how much I can deduct when I buy stuff. Ledger can do it, rather easily. See an explanation here: https://www.ledger-cli.org/3.0/doc/ledger3.html#Concrete-Example-of-Automated-Transactions

\n\n
\n
\n \n\n\n \n\n \n\n\n","content":"

Ledger is so simple it’s amazing!

\n\n

I’ve been through many money manager applications: GnuCash, MoneyLover, Firefly, YNAB (briefly). \nI’ve even tried to build my own, but was too lazy.

\n\n

They all lacked something that I really wanted (MoneyLover, Firefly), or were too expensive for me (YNAB), finicky/problematic (MoneyLover) or difficult for me to use across all my devices (GnuCash).

\n\n

Before Ledger I thought Firefly would be the one: it’s a FOSS laravel application, which is something I have loads of experience with, so I figured if it can’t do what I want right now, I’ll just make it do what I want. I never got around to that, and, now, I’ve fallen in love with something else.

\n\n

Why, though? What’s so great about Ledger?

\n\n

Naturally, it’s FOSS, but like I said it’s simple. So simple, that I can show how it works right now:

\n\n

Open a text file, and type this into it:

\n\n
2019/07/11  Amazon\n    expenses:gatorade           500\n    assets:wallet               -500\n
\n\n

That’s a transaction in ledger. That may not seem like much, and it isn’t. Ledger truly shines when you get the CLI tool, that allows you to perform queries on your ledger file. Like show your balance with ledger -f ledger.txt bal.

\n\n

That’s still not a lot, admitidely, but there’s more. Ledger allows for handling your commodities instead of just money. Think of it this way: you bought a Gatorade somewhere, and paid for it with some money. The exchanged one commodity for another. In other words, the transaction above can now look like this:

\n\n
2019/07/11  Amazon\n    expenses:gatorade           1 Gatorade\n    assets:wallet               -500 GYD\n
\n\n

You can read that as “Bought 1 Gatorade for 500 Guyana Dollars”. What that allows you to do, now, is a two things:

\n\n
    \n
  1. Keep track of how many Gatorade you’ve bought
  2. \n
  3. Keep track of the price of Gatorade over time (more on that later)
  4. \n
  5. Do silly things like calculate how many Gatorades you can buy with the money in your wallet (ledger -f ledger.txt bal wal -X Gatorade)
  6. \n
\n\n

This feature is something I’ve wanted to be able to do forever, and none of the other applications I’ve used have included it.

\n\n

Since ledger is a double-entry system, your transactions can get even fancier. Say your friend helped you pay for the Gatorade. Now your posting (that’s what transactions are called in ledger) looks like this:

\n\n
2019/07/11  Amazon\n    expenses:gatorade           1 Gatorade\n    liabilities:debt:Joe        -200 GYD\n    assets:wallet               -300 GYD\n
\n\n

This will now allow you to see how much you owe Joe, without having to do multiple transactions, like some applications would have you do.

\n\n

Now comes the part that’s usually hardest, or costs money: using ledger on multiple devices. With Firefly, this meant running a relational database somewhere (costs money), or with GnuCash this meant synchronizing their database file across devices, finding an application on each operating system that’ll open it and allow me to add stuff to it… you see my dilema. With Ledger this is comically simple since it’s a text file:

\n\n\n\n

Since it’s just text, it’s editable from basically anywhere, so making entries isn’t much of a problem anywhere.

\n\n

Now, you may be thinking it sounds rather annoying to have to edit a text file on my phone. What happens if I’m in the middle of something, and just want to make a quick entry?

\n\n

That’s where the community comes in:\nSee, I’m not the only crazy person out here. I’m far from the smartest, too. Ledger, and what’s called “plain text accounting” is already popular enough that there’s a subreddit and a website, not to mention the ledger website has exceptional documentation on how much you can do: https://www.ledger-cli.org/3.0/doc/ledger3.html.

\n\n

There are a couple Android and iOS apps out there, and countless ports or forks to choose from, as well as some nice web options.

\n\n

One more thing!

\n\n

Something I’ve wanted to do, but haven’t been able to: keep track of my taxes. More specifically, keep track of how much I owe the tax-man when I get paid for something, and then keep track of how much I can deduct when I buy stuff. Ledger can do it, rather easily. See an explanation here: https://www.ledger-cli.org/3.0/doc/ledger3.html#Concrete-Example-of-Automated-Transactions

\n","relative_path":"_posts/2019-07-11-ledger-is-simply-amazing.md","previous":{"path":"_posts/2019-06-18-bitwarden-vs-dashlane.md","relative_path":"_posts/2019-06-18-bitwarden-vs-dashlane.md","url":"/blog/bitwarden-vs-dashlane/","id":"/blog/bitwarden-vs-dashlane","collection":"posts","draft":false,"categories":["opinion pieces"],"layout":"post","title":"Bitwarden vs Dashlane","tags":["comparison","password manager"],"date":"2019-06-18 00:00:00 +0000","slug":"bitwarden-vs-dashlane","ext":".md"},"url":"/blog/ledger-is-simply-amazing/","id":"/blog/ledger-is-simply-amazing","collection":"posts","excerpt":"Simplicity is highly underrated","draft":false,"categories":["gush"],"layout":"post","title":"Ledger is amazing","tags":["finance","money manager"],"date":"2019-07-11 00:00:00 +0000","slug":"ledger-is-simply-amazing","ext":".md"},"path":"_posts/2019-06-18-bitwarden-vs-dashlane.md","output":"\n\n\n \n \n \n \n \n \n\n Bitwarden vs Dashlane\n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n\n\n\n \n\n
\n \n
\n\n\n
\n
\n

Bitwarden vs Dashlane

\n

Jun 18, 2019 | |

\n
\n \n
\n

Bitwarden does everything Dashlane does, better.

\n

That’s the end of the post. You can go home, now.

\n\n
\n\n

If you want a further breakdown, consider these points:

\n\n

Security, most important, most overlooked

\n

From a pure security standpoint, it’s a toss-up between Dashlane and Bitwarden. Both offer best-in-class security, so your passwords are safe on both.

\n\n

Bitwarden offers 2FA auditing at the organization level for business users, while Dashlane does not. Enforcing is on the roadmap.

\n\n

I would add that Bitwarden can offer a little more peace of mind for two reasons:

\n\n

1. It’s open source.

\n

A great many of you just sighed, but it being open source means it can be checked constantly for issues. The source for all their software is here: http://github.com/bitwarden/

\n\n

This also means that if Bitwarden doesn’t have a feature you like, or something works in a way you don’t like, you can just change it.

\n\n

2. It’s self-hostable.

\n

Some hacker is far more likely to attack the behemoth that is Dashlane with it’s millions of user passwords, than they are to attack your little server with your 1000 passwords (at best). This also means that you are in control of your data, which is good news for the tin-foil hat wearers out there.

\n\n

You can even get Bitwarden’s paid features for the price of hosting your server by following this guide: https://www.reddit.com/r/selfhosted/comments/8usixz/let_me_introduce_you_to_bitwarden_rs_selfhosted/

\n\n
\n\n

Nobody cares about security, though, right? So let’s move on to the good stuff:

\n\n

Features, the good stuff (also price)

\n\n

Bitwarden offers every feature Dashlane does with loads more on top of those, and more of them for free. It’s paid version is also cheaper than Dashlane’s.

\n\n

Here’s a table I stole, that compares both service’s features:

\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
FeatureDashlaneBitwarden
Chrome supportyesyes
Firefox supportyesyes
Edge supportyesyes
Safari supportyesyes
Mac OS, Windows supportyesyes
Linux supportpooryes
Mac OS command-line clientnoyes
Windows command-line clientnoyes
Linux command-line clientnoyes
Android support, including auto-fillyesyes
Android auto-fill in Chromeyesyes
Auto-fill in Android work profileyesyes (1)
Android auto-fill shows full usernamesyesyes
iOS support, including auto-fillyesyes
Two-factor authenticationyesyes
YubiKey support in browser (Enterprise)noyes ($)
YubiKey support in browser (Personal)noyes ($)
YubiKey support in Androidnoyes ($)
YubiKey support in iOSnoyes ($)
Saved password in Android, iOSyesyes
Fingerprint login in Android, iOSyesyes
Synchronization across devicesyesyes
Import from LastPassyesyes
LastPass import distinguishes work from personal itemsnono
Preserves LastPass folders in some way when importingdoubtfulyes
Personal linked account support (or the equivalent)pooryes
Save location (personal vs. work) specified at creation timenoyes
Save location (folder / collection / space) editable in web appnoyes
Sensible password quality checks for master passwordnoyes
Password history on Linuxnoyes
Password history on Windows, Mac OSyesyes
Secure notesyesyes
Attachments on notes on Linuxnoyes
Attachments on notes on Windows, Mac OSyesyes
Shared folders with access control on Linuxnoyes
Shared folders with access control on Windowsyesyes
Shared folders with access control on Mac OSyesyes
Items can exist in multiple groups with distinct access controlnoyes
Nested foldersnoyes
Resists auto-filling invisible formsyesyes
Browser plugin only fills selected formunknownno
Browser plugin displays icon in form fieldsyesno
Browser plugin prompts to save new sites on Linuxyesyes
Browser plugin prompts to save new sites on Windows, Mac OSyesyes
2FA integrated into login entries in vault (Mac OS, Windows, iOS, Android)noyes
2FA integrated into login entries in vault (Linux)noyes
Auto-fill in browser disabled by defaultnoyes
Auto-fill in browser can be disabled by preferencenoyes
Admins can reset passwordsyesno
Admins can access other people’s unshared credentialsnono
Admins can reset other people’s 2fanono
2fa can be enforced at the organization levelnono (3)
2fa can be audited at the organization levelnoyes
Exporting items on Linuxnoyes
Exporting items on Windows, Mac OSyesyes
Password health reportsyesyes ($)
App export includes attachmentsunknownno
CLI export includes attachmentsnopoor (2)
Responsive to bug reports and feature requestsunknownyes
Open sourcenoyes
Option to self-hostnoyes
Users can delete own account (customer service not needed)yesyes
Admins can delete business account (customer service not needed)yesyes
Has a useful status page that can be subscribed toyesno
Number of outages in the past six months (since December, 2018)120
Enterprise price per user per month43
Personal price per user per month (no Attachments or YubiKey)4.990
Personal price per user per month (w/Attachments & YubiKey)4.990.84
\n\n

Note 1: In work profile apps Bitwarden might not pop up a dialog automatically inviting you to auto-fill, but it’ll display a notification you can tap to do it.

\n\n

Note 2: CLI allows individual attachments to be exported. The user would have to write a script to iterate through and export all of them.

\n\n

Note 3: On the product roadmap, not yet implemented as of writing (Click to see the feature request)

\n\n
\n
\n \n\n\n \n\n \n\n\n","content":"

Bitwarden does everything Dashlane does, better.

\n

That’s the end of the post. You can go home, now.

\n\n
\n\n

If you want a further breakdown, consider these points:

\n\n

Security, most important, most overlooked

\n

From a pure security standpoint, it’s a toss-up between Dashlane and Bitwarden. Both offer best-in-class security, so your passwords are safe on both.

\n\n

Bitwarden offers 2FA auditing at the organization level for business users, while Dashlane does not. Enforcing is on the roadmap.

\n\n

I would add that Bitwarden can offer a little more peace of mind for two reasons:

\n\n

1. It’s open source.

\n

A great many of you just sighed, but it being open source means it can be checked constantly for issues. The source for all their software is here: http://github.com/bitwarden/

\n\n

This also means that if Bitwarden doesn’t have a feature you like, or something works in a way you don’t like, you can just change it.

\n\n

2. It’s self-hostable.

\n

Some hacker is far more likely to attack the behemoth that is Dashlane with it’s millions of user passwords, than they are to attack your little server with your 1000 passwords (at best). This also means that you are in control of your data, which is good news for the tin-foil hat wearers out there.

\n\n

You can even get Bitwarden’s paid features for the price of hosting your server by following this guide: https://www.reddit.com/r/selfhosted/comments/8usixz/let_me_introduce_you_to_bitwarden_rs_selfhosted/

\n\n
\n\n

Nobody cares about security, though, right? So let’s move on to the good stuff:

\n\n

Features, the good stuff (also price)

\n\n

Bitwarden offers every feature Dashlane does with loads more on top of those, and more of them for free. It’s paid version is also cheaper than Dashlane’s.

\n\n

Here’s a table I stole, that compares both service’s features:

\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
FeatureDashlaneBitwarden
Chrome supportyesyes
Firefox supportyesyes
Edge supportyesyes
Safari supportyesyes
Mac OS, Windows supportyesyes
Linux supportpooryes
Mac OS command-line clientnoyes
Windows command-line clientnoyes
Linux command-line clientnoyes
Android support, including auto-fillyesyes
Android auto-fill in Chromeyesyes
Auto-fill in Android work profileyesyes (1)
Android auto-fill shows full usernamesyesyes
iOS support, including auto-fillyesyes
Two-factor authenticationyesyes
YubiKey support in browser (Enterprise)noyes ($)
YubiKey support in browser (Personal)noyes ($)
YubiKey support in Androidnoyes ($)
YubiKey support in iOSnoyes ($)
Saved password in Android, iOSyesyes
Fingerprint login in Android, iOSyesyes
Synchronization across devicesyesyes
Import from LastPassyesyes
LastPass import distinguishes work from personal itemsnono
Preserves LastPass folders in some way when importingdoubtfulyes
Personal linked account support (or the equivalent)pooryes
Save location (personal vs. work) specified at creation timenoyes
Save location (folder / collection / space) editable in web appnoyes
Sensible password quality checks for master passwordnoyes
Password history on Linuxnoyes
Password history on Windows, Mac OSyesyes
Secure notesyesyes
Attachments on notes on Linuxnoyes
Attachments on notes on Windows, Mac OSyesyes
Shared folders with access control on Linuxnoyes
Shared folders with access control on Windowsyesyes
Shared folders with access control on Mac OSyesyes
Items can exist in multiple groups with distinct access controlnoyes
Nested foldersnoyes
Resists auto-filling invisible formsyesyes
Browser plugin only fills selected formunknownno
Browser plugin displays icon in form fieldsyesno
Browser plugin prompts to save new sites on Linuxyesyes
Browser plugin prompts to save new sites on Windows, Mac OSyesyes
2FA integrated into login entries in vault (Mac OS, Windows, iOS, Android)noyes
2FA integrated into login entries in vault (Linux)noyes
Auto-fill in browser disabled by defaultnoyes
Auto-fill in browser can be disabled by preferencenoyes
Admins can reset passwordsyesno
Admins can access other people’s unshared credentialsnono
Admins can reset other people’s 2fanono
2fa can be enforced at the organization levelnono (3)
2fa can be audited at the organization levelnoyes
Exporting items on Linuxnoyes
Exporting items on Windows, Mac OSyesyes
Password health reportsyesyes ($)
App export includes attachmentsunknownno
CLI export includes attachmentsnopoor (2)
Responsive to bug reports and feature requestsunknownyes
Open sourcenoyes
Option to self-hostnoyes
Users can delete own account (customer service not needed)yesyes
Admins can delete business account (customer service not needed)yesyes
Has a useful status page that can be subscribed toyesno
Number of outages in the past six months (since December, 2018)120
Enterprise price per user per month43
Personal price per user per month (no Attachments or YubiKey)4.990
Personal price per user per month (w/Attachments & YubiKey)4.990.84
\n\n

Note 1: In work profile apps Bitwarden might not pop up a dialog automatically inviting you to auto-fill, but it’ll display a notification you can tap to do it.

\n\n

Note 2: CLI allows individual attachments to be exported. The user would have to write a script to iterate through and export all of them.

\n\n

Note 3: On the product roadmap, not yet implemented as of writing (Click to see the feature request)

\n","relative_path":"_posts/2019-06-18-bitwarden-vs-dashlane.md","previous":{"next":{"path":"_posts/2019-06-18-bitwarden-vs-dashlane.md","relative_path":"_posts/2019-06-18-bitwarden-vs-dashlane.md","url":"/blog/bitwarden-vs-dashlane/","id":"/blog/bitwarden-vs-dashlane","collection":"posts","draft":false,"categories":["opinion pieces"],"layout":"post","title":"Bitwarden vs Dashlane","tags":["comparison","password manager"],"date":"2019-06-18 00:00:00 +0000","slug":"bitwarden-vs-dashlane","ext":".md"},"path":"_posts/2019-04-26-funkwhale.md","output":"\n\n\n \n \n \n \n \n \n\n Funkwhale\n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n\n\n\n \n\n
\n \n
\n\n\n
\n
\n

Funkwhale

\n

Apr 26, 2019 | |

\n
\n \n \n
\n \n\n\n \n\n \n\n\n","content":"

Funkwhale is an open source grooveshark clone that anyone can self host. Since it offers a docker installation, spinning up an intance shouldn’t be too difficult, and the modest hardware requirements mean hosting should’nt cost much more than a couple dollars a month.

\n","relative_path":"_posts/2019-04-26-funkwhale.md","previous":{"path":"_posts/2015-10-3-jekyll-is-awesome.md","relative_path":"_posts/2015-10-3-jekyll-is-awesome.md","url":"/blog/jekyll-is-awesome/","id":"/blog/jekyll-is-awesome","collection":"posts","draft":false,"categories":["opinion pieces"],"layout":"post","title":"Jekyll is awesome","tags":["jekyll","blogging","static development"],"date":"2015-10-03 00:00:00 +0000","slug":"jekyll-is-awesome","ext":".md"},"url":"/blog/funkwhale/","id":"/blog/funkwhale","collection":"posts","excerpt":"Funkwhale is what Grooveshark should've been","draft":false,"categories":["opinion pieces"],"layout":"post","title":"Funkwhale","tags":["ideas","music"],"date":"2019-04-26 00:00:00 +0000","slug":"funkwhale","ext":".md"},"url":"/blog/bitwarden-vs-dashlane/","id":"/blog/bitwarden-vs-dashlane","collection":"posts","excerpt":"Bitwarden does everything Dashlane does, better","draft":false,"categories":["opinion pieces"],"layout":"post","title":"Bitwarden vs Dashlane","tags":["comparison","password manager"],"date":"2019-06-18 00:00:00 +0000","slug":"bitwarden-vs-dashlane","ext":".md"},"path":"_posts/2019-04-26-funkwhale.md","output":"\n\n\n \n \n \n \n \n \n\n Funkwhale\n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n\n\n\n \n\n
\n \n
\n\n\n
\n
\n

Funkwhale

\n

Apr 26, 2019 | |

\n
\n \n \n
\n \n\n\n \n\n \n\n\n","content":"

Funkwhale is an open source grooveshark clone that anyone can self host. Since it offers a docker installation, spinning up an intance shouldn’t be too difficult, and the modest hardware requirements mean hosting should’nt cost much more than a couple dollars a month.

\n","relative_path":"_posts/2019-04-26-funkwhale.md","previous":{"next":{"next":{"path":"_posts/2019-06-18-bitwarden-vs-dashlane.md","relative_path":"_posts/2019-06-18-bitwarden-vs-dashlane.md","url":"/blog/bitwarden-vs-dashlane/","id":"/blog/bitwarden-vs-dashlane","collection":"posts","draft":false,"categories":["opinion pieces"],"layout":"post","title":"Bitwarden vs Dashlane","tags":["comparison","password manager"],"date":"2019-06-18 00:00:00 +0000","slug":"bitwarden-vs-dashlane","ext":".md"},"path":"_posts/2019-04-26-funkwhale.md","output":"\n\n\n \n \n \n \n \n \n\n Funkwhale\n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n\n\n\n \n\n
\n \n
\n\n\n
\n
\n

Funkwhale

\n

Apr 26, 2019 | |

\n
\n \n \n
\n \n\n\n \n\n \n\n\n","content":"

Funkwhale is an open source grooveshark clone that anyone can self host. Since it offers a docker installation, spinning up an intance shouldn’t be too difficult, and the modest hardware requirements mean hosting should’nt cost much more than a couple dollars a month.

\n","relative_path":"_posts/2019-04-26-funkwhale.md","previous":{"path":"_posts/2015-10-3-jekyll-is-awesome.md","relative_path":"_posts/2015-10-3-jekyll-is-awesome.md","url":"/blog/jekyll-is-awesome/","id":"/blog/jekyll-is-awesome","collection":"posts","draft":false,"categories":["opinion pieces"],"layout":"post","title":"Jekyll is awesome","tags":["jekyll","blogging","static development"],"date":"2015-10-03 00:00:00 +0000","slug":"jekyll-is-awesome","ext":".md"},"url":"/blog/funkwhale/","id":"/blog/funkwhale","collection":"posts","excerpt":"Funkwhale is what Grooveshark should've been","draft":false,"categories":["opinion pieces"],"layout":"post","title":"Funkwhale","tags":["ideas","music"],"date":"2019-04-26 00:00:00 +0000","slug":"funkwhale","ext":".md"},"path":"_posts/2015-10-3-jekyll-is-awesome.md","output":"\n\n\n \n \n \n \n \n \n\n Jekyll is awesome\n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n\n\n\n \n\n
\n \n
\n\n\n
\n
\n

Jekyll is awesome

\n

Oct 3, 2015 | |

\n
\n \n
\n

Wordpress is everybody’s favourite blogging platform. It’s simple, and you can be up and running within minutes. There’s a few caveats, though: your site isn’t as customizable as a self-hosted installation of wordpress can be and that can be a little more complicated to set up. Then once it’s setup you’ll end up with a slow-as-mud website and no upward scalability. What if in the future you wanted to add a rails application to your website and move the blog to a subdomain? Can’t do that here.

\n\n

Simplicity is the name of the game. With Jekyll your content is the first thing you start creating, then you have Jekyll build your site and you’re left with a completely static website that you can host almost anywhere. The advantages to this are great: since the site is static and doesn’t require a database, hosting it is a cynch. You might even be able to host it for free! Since there’s no database there’s nothing a naughty user can mess with to damage your site. Finally since there’s no database calls to be made your site becomes incredibly fast. I think the pros far outweight the cons. If you don’t mind your site’s code being public then you can host it completely for free on github pages, too. Then it’s just a matter of pointing your domain there, setting up your cname file (a painless and simple setup) and you’re done!

\n\n

Jekyll isn’t for everything, though. It’s not going to replace Ruby on Rails and you’re not about to build a large scale web application with it. The best fit for a Jekyll site is, I think, most often the one that needs it most: users that want to build a website, but don’t want to pay an arm and a leg to just get a simple message out there. Even if programming isn’t your thing setting Jekyll up is a breeze, and I can help you out with that.

\n\n
\n
\n \n\n\n \n\n \n\n\n","content":"

Wordpress is everybody’s favourite blogging platform. It’s simple, and you can be up and running within minutes. There’s a few caveats, though: your site isn’t as customizable as a self-hosted installation of wordpress can be and that can be a little more complicated to set up. Then once it’s setup you’ll end up with a slow-as-mud website and no upward scalability. What if in the future you wanted to add a rails application to your website and move the blog to a subdomain? Can’t do that here.

\n\n

Simplicity is the name of the game. With Jekyll your content is the first thing you start creating, then you have Jekyll build your site and you’re left with a completely static website that you can host almost anywhere. The advantages to this are great: since the site is static and doesn’t require a database, hosting it is a cynch. You might even be able to host it for free! Since there’s no database there’s nothing a naughty user can mess with to damage your site. Finally since there’s no database calls to be made your site becomes incredibly fast. I think the pros far outweight the cons. If you don’t mind your site’s code being public then you can host it completely for free on github pages, too. Then it’s just a matter of pointing your domain there, setting up your cname file (a painless and simple setup) and you’re done!

\n\n

Jekyll isn’t for everything, though. It’s not going to replace Ruby on Rails and you’re not about to build a large scale web application with it. The best fit for a Jekyll site is, I think, most often the one that needs it most: users that want to build a website, but don’t want to pay an arm and a leg to just get a simple message out there. Even if programming isn’t your thing setting Jekyll up is a breeze, and I can help you out with that.

\n","relative_path":"_posts/2015-10-3-jekyll-is-awesome.md","previous":{"next":{"path":"_posts/2015-10-3-jekyll-is-awesome.md","relative_path":"_posts/2015-10-3-jekyll-is-awesome.md","url":"/blog/jekyll-is-awesome/","id":"/blog/jekyll-is-awesome","collection":"posts","draft":false,"categories":["opinion pieces"],"layout":"post","title":"Jekyll is awesome","tags":["jekyll","blogging","static development"],"date":"2015-10-03 00:00:00 +0000","slug":"jekyll-is-awesome","ext":".md"},"path":"_posts/2015-04-23-wordpress-on-heroku.md","output":"\n\n\n \n \n \n \n \n \n\n Wordpress on Heroku\n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n\n\n\n \n\n
\n \n
\n\n\n
\n
\n

Wordpress on Heroku

\n

Sep 23, 2015 | |

\n
\n \n
\n

Wordpress on Heroku is great, but difficult to setup. You will need to sign up for Amazon Web Services and Heroku. You’ll need to install the Heroku toolbelt on your machine using “wget -qO- https://toolbelt.heroku.com/install-ubuntu.sh | sh”. I’ll assume you’re running Linux for this, but I’ll see about a Windows tutorial as well later on. Setting up AWS is also not going to be covered right now in this tutorial.

\n
    \n\t
  1. The first thing to do is setup LAMP on your Linux machine.
  2. \n\t
  3. Next get the latest version of Wordpress. Download it and unzip the file into your \"/var/www/html/\" folder.
  4. \n\t
  5. Download Amazon Web Services and Amazon S3 and Cloudfront.
  6. \n\t
  7. Unzip both of Amazon Web Services and Amazon S3 and Cloudfront into the wp-content/plugins folder.
  8. \n\t
  9. You should have been given access keys for your AWS user. Add them to your wp-config.php file like this:\n \t

    // AWS Access Keys //
    \n \tdefine( 'AWS_ACCESS_KEY_ID', 'your_aws_access_key_id_here' );
    \n \tdefine( 'AWS_SECRET_ACCESS_KEY', 'your_aws_secret_access_key_here' );

    \n
  10. \n\t
  11. Go here and add your Unique Keys and Salts to your wp-config.php file like below:\n \t

    define('AUTH_KEY', 'put your unique phrase here');
    \n \tdefine('SECURE_AUTH_KEY', 'put your unique phrase here');
    \n \tdefine('LOGGED_IN_KEY', 'put your unique phrase here');
    \n \tdefine('NONCE_KEY', 'put your unique phrase here');
    \n \tdefine('AUTH_SALT', 'put your unique phrase here');
    \n \tdefine('SECURE_AUTH_SALT', 'put your unique phrase here');
    \n \tdefine('LOGGED_IN_SALT', 'put your unique phrase here');
    \n \tdefine('NONCE_SALT', 'put your unique phrase here');

    \n
  12. \n\t
  13. Go to localhost/wordpress/ and run through the installation using the MySQL credentials you setup while setting up your LAMP stack. Check here if you're not sure what to do.
  14. \n\t
  15. Go to your dashboard, and click on the plugins tab.
  16. \n\t
  17. Activate both the Amazon Web Services and Amazon S3 and Cloudfront plugins. There should now be another tab at the bottom that says \"AWS\". If your AWS User is setup correctly then they should both work immediately and allow you to connect to a bucket.
  18. \n\t
  19. Go into your wordpress folder and open a terminal session there.
  20. \n\t
  21. In your terminal type $ git init That'll initialize the whole thing as a git repository.
  22. \n\t
  23. In your terminal type git add . to get all the WP files ready to be committed. This will take a second or two.
  24. \n\t
  25. Now type git commit -m 'Add your own commit message here' Wait for the wall of text to stop running.
  26. \n\t
  27. Now type heroku create That'll create a new Heroku app from that directory.
  28. \n\t
  29. Type heroku addons:add cleardb If all goes well then you're almost ready to push your installation to Heroku.
  30. \n\t
  31. Copy the code below with the Unique Keys and Salts you got earlier:\n \t

    heroku config:set AUTH_KEY='put your unique phrase here'
    \n \tSECURE_AUTH_KEY='put your unique phrase here'
    \n \tLOGGED_IN_KEY='put your unique phrase here'
    \n \tNONCE_KEY='put your unique phrase here'
    \n \tAUTH_SALT='put your unique phrase here'
    \n \tSECURE_AUTH_SALT='put your unique phrase here'
    \n \tLOGGED_IN_SALT='put your unique phrase here'
    \n \tNONCE_SALT='put your unique phrase here'

    \n
  32. \n\t
  33. Again in the terminal type git checkout -b production You'll store your production environment variables here.
  34. \n\t
  35. Add this line to your wp-config.php file:\n\t

    $db = parse_url($_ENV[\"CLEARDB_DATABASE_URL\"]);

    \n
  36. \n\t
  37. Change your database information in wp-config.php to the code below:\n \t

    define('DB_NAME', trim($db[\"path\"],\"/\"));
    \n \tdefine('DB_USER', $db[\"user\"]);
    \n \tdefine('DB_PASSWORD', $db[\"pass\"]);
    \n \tdefine('DB_HOST', $db[\"host\"]);

    \n
  38. \n\t
  39. Change your Unthentication Unique Keys and Salts to the below:\n \t

    define('AUTH_KEY', getenv('AUTH_KEY'));
    \n \tdefine('SECURE_AUTH_KEY', getenv('SECURE_AUTH_KEY'));
    \n \tdefine('LOGGED_IN_KEY', getenv('LOGGED_IN_KEY'));
    \n \tdefine('NONCE_KEY', getenv('NONCE_KEY'));
    \n \tdefine('AUTH_SALT', getenv('AUTH_SALT'));
    \n \tdefine('SECURE_AUTH_SALT', getenv('SECURE_AUTH_SALT'));
    \n \tdefine('LOGGED_IN_SALT', getenv('LOGGED_IN_SALT'));
    \n \tdefine('NONCE_SALT', getenv('NONCE_SALT'));
    \n \tdefine('AWS_ACCESS_KEY_ID', getenv('AWS_ACCESS_KEY_ID'));
    \n \tdefine('AWS_SECRET_ACCESS_KEY', getenv('AWS_SECRET_ACCESS_KEY'));

    \n
  40. \n\t
  41. Now you're all set. Type git push heroku production:master and let it finish. When that's done you can go to \"http://yourwordpressapp.heroku.com\" and complete your remote installation.\n
      \n\t
    1. In order to check out your remote installation simply switch back to the master branch with git checkout master
    2. \n
    \n
  42. \n
\n

Updating Wordpress

\n\n

If you need to update Wordpress (mine updated twice while I was working on this) you’ll need to take a few steps:

\n
    \n\t
  1. In a terminal in the html folder run sudo chown -R www-data:www-data wordpress/ That'll let you update wordpress locally through the app.
  2. \n\t
  3. Make sure you're on the master branch and update WP via the dashboard.
  4. \n\t
  5. Once Wordpress is finished updating run sudo chown -R your_user:your_user wordpress/ Now you'll be able to edit the folder yourself again.
  6. \n\t
  7. Commit the changes made by the update.
  8. \n\t
  9. Switch to the production branch and merge with master by running git merge master This shouldn't create any conflicts (it didn't with me).
  10. \n\t
  11. The wp-config file should be untouched, but check it just in case. If it doesn't have your production settings, simply edit the file again, and commit changes.
  12. \n\t
  13. Now run git push heroku production:master again, wait and your remote installation will be updated.\n
      \n\t
    • Remember to switch back to the master branch to get your local installation working again.
    • \n
    \n
  14. \n
\n

Adding/updating themes and plugins

\n\n

Adding/updating themes and plugins is easy.

\n
    \n\t
  1. Download the theme or plugin.
  2. \n\t
  3. Make sure you're in your master branch. Unzip the theme/folder into it's respective folder.
  4. \n\t
  5. In your local installation active the theme or plugin.
  6. \n\t
  7. Commit the changes, then switch to production.
  8. \n\t
  9. Run git merge master This should not create any conflicts if the plugin/theme is new.\n
      \n\t
    • If you're updating a conflict might be caused. If so, then in the terminal type git reset --hard
    • \n\t
    • Delete the older plugin/theme and replace with the new one, then merge again.
    • \n
    \n
  10. \n\t
  11. The wp-config file should be untouched, but check it just in case. If it doesn't have your production settings, simply edit the file again, and commit changes.
  12. \n\t
  13. Now run git push heroku production:master again, wait and your remote installation should now have the plugin/theme.\n
      \n\t
    • Go to \"http://yourwordpressapp.heroku.com/wp-admin\" and Wordpress might ask you to update the database. Simply go ahead and everything should work fine.
    • \n
    \n
  14. \n
\n\n
\n
\n \n\n\n \n\n \n\n\n","content":"

Wordpress on Heroku is great, but difficult to setup. You will need to sign up for Amazon Web Services and Heroku. You’ll need to install the Heroku toolbelt on your machine using “wget -qO- https://toolbelt.heroku.com/install-ubuntu.sh | sh”. I’ll assume you’re running Linux for this, but I’ll see about a Windows tutorial as well later on. Setting up AWS is also not going to be covered right now in this tutorial.

\n
    \n\t
  1. The first thing to do is setup LAMP on your Linux machine.
  2. \n\t
  3. Next get the latest version of Wordpress. Download it and unzip the file into your \"/var/www/html/\" folder.
  4. \n\t
  5. Download Amazon Web Services and Amazon S3 and Cloudfront.
  6. \n\t
  7. Unzip both of Amazon Web Services and Amazon S3 and Cloudfront into the wp-content/plugins folder.
  8. \n\t
  9. You should have been given access keys for your AWS user. Add them to your wp-config.php file like this:\n \t

    // AWS Access Keys //
    \n \tdefine( 'AWS_ACCESS_KEY_ID', 'your_aws_access_key_id_here' );
    \n \tdefine( 'AWS_SECRET_ACCESS_KEY', 'your_aws_secret_access_key_here' );

    \n
  10. \n\t
  11. Go here and add your Unique Keys and Salts to your wp-config.php file like below:\n \t

    define('AUTH_KEY', 'put your unique phrase here');
    \n \tdefine('SECURE_AUTH_KEY', 'put your unique phrase here');
    \n \tdefine('LOGGED_IN_KEY', 'put your unique phrase here');
    \n \tdefine('NONCE_KEY', 'put your unique phrase here');
    \n \tdefine('AUTH_SALT', 'put your unique phrase here');
    \n \tdefine('SECURE_AUTH_SALT', 'put your unique phrase here');
    \n \tdefine('LOGGED_IN_SALT', 'put your unique phrase here');
    \n \tdefine('NONCE_SALT', 'put your unique phrase here');

    \n
  12. \n\t
  13. Go to localhost/wordpress/ and run through the installation using the MySQL credentials you setup while setting up your LAMP stack. Check here if you're not sure what to do.
  14. \n\t
  15. Go to your dashboard, and click on the plugins tab.
  16. \n\t
  17. Activate both the Amazon Web Services and Amazon S3 and Cloudfront plugins. There should now be another tab at the bottom that says \"AWS\". If your AWS User is setup correctly then they should both work immediately and allow you to connect to a bucket.
  18. \n\t
  19. Go into your wordpress folder and open a terminal session there.
  20. \n\t
  21. In your terminal type $ git init That'll initialize the whole thing as a git repository.
  22. \n\t
  23. In your terminal type git add . to get all the WP files ready to be committed. This will take a second or two.
  24. \n\t
  25. Now type git commit -m 'Add your own commit message here' Wait for the wall of text to stop running.
  26. \n\t
  27. Now type heroku create That'll create a new Heroku app from that directory.
  28. \n\t
  29. Type heroku addons:add cleardb If all goes well then you're almost ready to push your installation to Heroku.
  30. \n\t
  31. Copy the code below with the Unique Keys and Salts you got earlier:\n \t

    heroku config:set AUTH_KEY='put your unique phrase here'
    \n \tSECURE_AUTH_KEY='put your unique phrase here'
    \n \tLOGGED_IN_KEY='put your unique phrase here'
    \n \tNONCE_KEY='put your unique phrase here'
    \n \tAUTH_SALT='put your unique phrase here'
    \n \tSECURE_AUTH_SALT='put your unique phrase here'
    \n \tLOGGED_IN_SALT='put your unique phrase here'
    \n \tNONCE_SALT='put your unique phrase here'

    \n
  32. \n\t
  33. Again in the terminal type git checkout -b production You'll store your production environment variables here.
  34. \n\t
  35. Add this line to your wp-config.php file:\n\t

    $db = parse_url($_ENV[\"CLEARDB_DATABASE_URL\"]);

    \n
  36. \n\t
  37. Change your database information in wp-config.php to the code below:\n \t

    define('DB_NAME', trim($db[\"path\"],\"/\"));
    \n \tdefine('DB_USER', $db[\"user\"]);
    \n \tdefine('DB_PASSWORD', $db[\"pass\"]);
    \n \tdefine('DB_HOST', $db[\"host\"]);

    \n
  38. \n\t
  39. Change your Unthentication Unique Keys and Salts to the below:\n \t

    define('AUTH_KEY', getenv('AUTH_KEY'));
    \n \tdefine('SECURE_AUTH_KEY', getenv('SECURE_AUTH_KEY'));
    \n \tdefine('LOGGED_IN_KEY', getenv('LOGGED_IN_KEY'));
    \n \tdefine('NONCE_KEY', getenv('NONCE_KEY'));
    \n \tdefine('AUTH_SALT', getenv('AUTH_SALT'));
    \n \tdefine('SECURE_AUTH_SALT', getenv('SECURE_AUTH_SALT'));
    \n \tdefine('LOGGED_IN_SALT', getenv('LOGGED_IN_SALT'));
    \n \tdefine('NONCE_SALT', getenv('NONCE_SALT'));
    \n \tdefine('AWS_ACCESS_KEY_ID', getenv('AWS_ACCESS_KEY_ID'));
    \n \tdefine('AWS_SECRET_ACCESS_KEY', getenv('AWS_SECRET_ACCESS_KEY'));

    \n
  40. \n\t
  41. Now you're all set. Type git push heroku production:master and let it finish. When that's done you can go to \"http://yourwordpressapp.heroku.com\" and complete your remote installation.\n
      \n\t
    1. In order to check out your remote installation simply switch back to the master branch with git checkout master
    2. \n
    \n
  42. \n
\n

Updating Wordpress

\n\n

If you need to update Wordpress (mine updated twice while I was working on this) you’ll need to take a few steps:

\n
    \n\t
  1. In a terminal in the html folder run sudo chown -R www-data:www-data wordpress/ That'll let you update wordpress locally through the app.
  2. \n\t
  3. Make sure you're on the master branch and update WP via the dashboard.
  4. \n\t
  5. Once Wordpress is finished updating run sudo chown -R your_user:your_user wordpress/ Now you'll be able to edit the folder yourself again.
  6. \n\t
  7. Commit the changes made by the update.
  8. \n\t
  9. Switch to the production branch and merge with master by running git merge master This shouldn't create any conflicts (it didn't with me).
  10. \n\t
  11. The wp-config file should be untouched, but check it just in case. If it doesn't have your production settings, simply edit the file again, and commit changes.
  12. \n\t
  13. Now run git push heroku production:master again, wait and your remote installation will be updated.\n
      \n\t
    • Remember to switch back to the master branch to get your local installation working again.
    • \n
    \n
  14. \n
\n

Adding/updating themes and plugins

\n\n

Adding/updating themes and plugins is easy.

\n
    \n\t
  1. Download the theme or plugin.
  2. \n\t
  3. Make sure you're in your master branch. Unzip the theme/folder into it's respective folder.
  4. \n\t
  5. In your local installation active the theme or plugin.
  6. \n\t
  7. Commit the changes, then switch to production.
  8. \n\t
  9. Run git merge master This should not create any conflicts if the plugin/theme is new.\n
      \n\t
    • If you're updating a conflict might be caused. If so, then in the terminal type git reset --hard
    • \n\t
    • Delete the older plugin/theme and replace with the new one, then merge again.
    • \n
    \n
  10. \n\t
  11. The wp-config file should be untouched, but check it just in case. If it doesn't have your production settings, simply edit the file again, and commit changes.
  12. \n\t
  13. Now run git push heroku production:master again, wait and your remote installation should now have the plugin/theme.\n
      \n\t
    • Go to \"http://yourwordpressapp.heroku.com/wp-admin\" and Wordpress might ask you to update the database. Simply go ahead and everything should work fine.
    • \n
    \n
  14. \n
\n","relative_path":"_posts/2015-04-23-wordpress-on-heroku.md","previous":null,"url":"/blog/wordpress-on-heroku/","id":"/blog/wordpress-on-heroku","collection":"posts","excerpt":"Wordpress on Heroku is great, but difficult to setup...","draft":false,"categories":["tutorials"],"layout":"post","title":"Wordpress on Heroku","date":"2015-09-23 20:12:00 +0000","tags":["heroku","wordpress","wordpress on heroku","blogging"],"slug":"wordpress-on-heroku","ext":".md"},"url":"/blog/jekyll-is-awesome/","id":"/blog/jekyll-is-awesome","collection":"posts","excerpt":"Everything should be as simple as jekyll makes it","draft":false,"categories":["opinion pieces"],"layout":"post","title":"Jekyll is awesome","tags":["jekyll","blogging","static development"],"date":"2015-10-03 00:00:00 +0000","slug":"jekyll-is-awesome","ext":".md"},"url":"/blog/funkwhale/","id":"/blog/funkwhale","collection":"posts","excerpt":"Funkwhale is what Grooveshark should've been","draft":false,"categories":["opinion pieces"],"layout":"post","title":"Funkwhale","tags":["ideas","music"],"date":"2019-04-26 00:00:00 +0000","slug":"funkwhale","ext":".md"}); tags['music'] = posts; var posts = [] posts.push({"next":{"next":null,"path":"_posts/2019-07-11-ledger-is-simply-amazing.md","output":"\n\n\n \n \n \n \n \n \n\n Ledger is amazing\n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n\n\n\n \n\n
\n \n
\n\n\n
\n
\n

Ledger is amazing

\n

Jul 11, 2019 | |

\n
\n \n
\n

Ledger is so simple it’s amazing!

\n\n

I’ve been through many money manager applications: GnuCash, MoneyLover, Firefly, YNAB (briefly). \nI’ve even tried to build my own, but was too lazy.

\n\n

They all lacked something that I really wanted (MoneyLover, Firefly), or were too expensive for me (YNAB), finicky/problematic (MoneyLover) or difficult for me to use across all my devices (GnuCash).

\n\n

Before Ledger I thought Firefly would be the one: it’s a FOSS laravel application, which is something I have loads of experience with, so I figured if it can’t do what I want right now, I’ll just make it do what I want. I never got around to that, and, now, I’ve fallen in love with something else.

\n\n

Why, though? What’s so great about Ledger?

\n\n

Naturally, it’s FOSS, but like I said it’s simple. So simple, that I can show how it works right now:

\n\n

Open a text file, and type this into it:

\n\n
2019/07/11  Amazon\n    expenses:gatorade           500\n    assets:wallet               -500\n
\n\n

That’s a transaction in ledger. That may not seem like much, and it isn’t. Ledger truly shines when you get the CLI tool, that allows you to perform queries on your ledger file. Like show your balance with ledger -f ledger.txt bal.

\n\n

That’s still not a lot, admitidely, but there’s more. Ledger allows for handling your commodities instead of just money. Think of it this way: you bought a Gatorade somewhere, and paid for it with some money. The exchanged one commodity for another. In other words, the transaction above can now look like this:

\n\n
2019/07/11  Amazon\n    expenses:gatorade           1 Gatorade\n    assets:wallet               -500 GYD\n
\n\n

You can read that as “Bought 1 Gatorade for 500 Guyana Dollars”. What that allows you to do, now, is a two things:

\n\n
    \n
  1. Keep track of how many Gatorade you’ve bought
  2. \n
  3. Keep track of the price of Gatorade over time (more on that later)
  4. \n
  5. Do silly things like calculate how many Gatorades you can buy with the money in your wallet (ledger -f ledger.txt bal wal -X Gatorade)
  6. \n
\n\n

This feature is something I’ve wanted to be able to do forever, and none of the other applications I’ve used have included it.

\n\n

Since ledger is a double-entry system, your transactions can get even fancier. Say your friend helped you pay for the Gatorade. Now your posting (that’s what transactions are called in ledger) looks like this:

\n\n
2019/07/11  Amazon\n    expenses:gatorade           1 Gatorade\n    liabilities:debt:Joe        -200 GYD\n    assets:wallet               -300 GYD\n
\n\n

This will now allow you to see how much you owe Joe, without having to do multiple transactions, like some applications would have you do.

\n\n

Now comes the part that’s usually hardest, or costs money: using ledger on multiple devices. With Firefly, this meant running a relational database somewhere (costs money), or with GnuCash this meant synchronizing their database file across devices, finding an application on each operating system that’ll open it and allow me to add stuff to it… you see my dilema. With Ledger this is comically simple since it’s a text file:

\n\n
    \n
  • Sync across my devices with anything from Google Drive to Syncthing to some custom S3 solution.
  • \n
  • Put it in git (this is what I did, because that let’s me do some other cool stuff).
  • \n
\n\n

Since it’s just text, it’s editable from basically anywhere, so making entries isn’t much of a problem anywhere.

\n\n

Now, you may be thinking it sounds rather annoying to have to edit a text file on my phone. What happens if I’m in the middle of something, and just want to make a quick entry?

\n\n

That’s where the community comes in:\nSee, I’m not the only crazy person out here. I’m far from the smartest, too. Ledger, and what’s called “plain text accounting” is already popular enough that there’s a subreddit and a website, not to mention the ledger website has exceptional documentation on how much you can do: https://www.ledger-cli.org/3.0/doc/ledger3.html.

\n\n

There are a couple Android and iOS apps out there, and countless ports or forks to choose from, as well as some nice web options.

\n\n

One more thing!

\n\n

Something I’ve wanted to do, but haven’t been able to: keep track of my taxes. More specifically, keep track of how much I owe the tax-man when I get paid for something, and then keep track of how much I can deduct when I buy stuff. Ledger can do it, rather easily. See an explanation here: https://www.ledger-cli.org/3.0/doc/ledger3.html#Concrete-Example-of-Automated-Transactions

\n\n
\n
\n \n\n\n \n\n \n\n\n","content":"

Ledger is so simple it’s amazing!

\n\n

I’ve been through many money manager applications: GnuCash, MoneyLover, Firefly, YNAB (briefly). \nI’ve even tried to build my own, but was too lazy.

\n\n

They all lacked something that I really wanted (MoneyLover, Firefly), or were too expensive for me (YNAB), finicky/problematic (MoneyLover) or difficult for me to use across all my devices (GnuCash).

\n\n

Before Ledger I thought Firefly would be the one: it’s a FOSS laravel application, which is something I have loads of experience with, so I figured if it can’t do what I want right now, I’ll just make it do what I want. I never got around to that, and, now, I’ve fallen in love with something else.

\n\n

Why, though? What’s so great about Ledger?

\n\n

Naturally, it’s FOSS, but like I said it’s simple. So simple, that I can show how it works right now:

\n\n

Open a text file, and type this into it:

\n\n
2019/07/11  Amazon\n    expenses:gatorade           500\n    assets:wallet               -500\n
\n\n

That’s a transaction in ledger. That may not seem like much, and it isn’t. Ledger truly shines when you get the CLI tool, that allows you to perform queries on your ledger file. Like show your balance with ledger -f ledger.txt bal.

\n\n

That’s still not a lot, admitidely, but there’s more. Ledger allows for handling your commodities instead of just money. Think of it this way: you bought a Gatorade somewhere, and paid for it with some money. The exchanged one commodity for another. In other words, the transaction above can now look like this:

\n\n
2019/07/11  Amazon\n    expenses:gatorade           1 Gatorade\n    assets:wallet               -500 GYD\n
\n\n

You can read that as “Bought 1 Gatorade for 500 Guyana Dollars”. What that allows you to do, now, is a two things:

\n\n
    \n
  1. Keep track of how many Gatorade you’ve bought
  2. \n
  3. Keep track of the price of Gatorade over time (more on that later)
  4. \n
  5. Do silly things like calculate how many Gatorades you can buy with the money in your wallet (ledger -f ledger.txt bal wal -X Gatorade)
  6. \n
\n\n

This feature is something I’ve wanted to be able to do forever, and none of the other applications I’ve used have included it.

\n\n

Since ledger is a double-entry system, your transactions can get even fancier. Say your friend helped you pay for the Gatorade. Now your posting (that’s what transactions are called in ledger) looks like this:

\n\n
2019/07/11  Amazon\n    expenses:gatorade           1 Gatorade\n    liabilities:debt:Joe        -200 GYD\n    assets:wallet               -300 GYD\n
\n\n

This will now allow you to see how much you owe Joe, without having to do multiple transactions, like some applications would have you do.

\n\n

Now comes the part that’s usually hardest, or costs money: using ledger on multiple devices. With Firefly, this meant running a relational database somewhere (costs money), or with GnuCash this meant synchronizing their database file across devices, finding an application on each operating system that’ll open it and allow me to add stuff to it… you see my dilema. With Ledger this is comically simple since it’s a text file:

\n\n\n\n

Since it’s just text, it’s editable from basically anywhere, so making entries isn’t much of a problem anywhere.

\n\n

Now, you may be thinking it sounds rather annoying to have to edit a text file on my phone. What happens if I’m in the middle of something, and just want to make a quick entry?

\n\n

That’s where the community comes in:\nSee, I’m not the only crazy person out here. I’m far from the smartest, too. Ledger, and what’s called “plain text accounting” is already popular enough that there’s a subreddit and a website, not to mention the ledger website has exceptional documentation on how much you can do: https://www.ledger-cli.org/3.0/doc/ledger3.html.

\n\n

There are a couple Android and iOS apps out there, and countless ports or forks to choose from, as well as some nice web options.

\n\n

One more thing!

\n\n

Something I’ve wanted to do, but haven’t been able to: keep track of my taxes. More specifically, keep track of how much I owe the tax-man when I get paid for something, and then keep track of how much I can deduct when I buy stuff. Ledger can do it, rather easily. See an explanation here: https://www.ledger-cli.org/3.0/doc/ledger3.html#Concrete-Example-of-Automated-Transactions

\n","relative_path":"_posts/2019-07-11-ledger-is-simply-amazing.md","previous":{"next":{"path":"_posts/2019-07-11-ledger-is-simply-amazing.md","relative_path":"_posts/2019-07-11-ledger-is-simply-amazing.md","url":"/blog/ledger-is-simply-amazing/","id":"/blog/ledger-is-simply-amazing","collection":"posts","draft":false,"categories":["gush"],"layout":"post","title":"Ledger is amazing","tags":["finance","money manager"],"date":"2019-07-11 00:00:00 +0000","slug":"ledger-is-simply-amazing","ext":".md"},"path":"_posts/2019-06-18-bitwarden-vs-dashlane.md","output":"\n\n\n \n \n \n \n \n \n\n Bitwarden vs Dashlane\n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n\n\n\n \n\n
\n \n
\n\n\n
\n
\n

Bitwarden vs Dashlane

\n

Jun 18, 2019 | |

\n
\n \n
\n

Bitwarden does everything Dashlane does, better.

\n

That’s the end of the post. You can go home, now.

\n\n
\n\n

If you want a further breakdown, consider these points:

\n\n

Security, most important, most overlooked

\n

From a pure security standpoint, it’s a toss-up between Dashlane and Bitwarden. Both offer best-in-class security, so your passwords are safe on both.

\n\n

Bitwarden offers 2FA auditing at the organization level for business users, while Dashlane does not. Enforcing is on the roadmap.

\n\n

I would add that Bitwarden can offer a little more peace of mind for two reasons:

\n\n

1. It’s open source.

\n

A great many of you just sighed, but it being open source means it can be checked constantly for issues. The source for all their software is here: http://github.com/bitwarden/

\n\n

This also means that if Bitwarden doesn’t have a feature you like, or something works in a way you don’t like, you can just change it.

\n\n

2. It’s self-hostable.

\n

Some hacker is far more likely to attack the behemoth that is Dashlane with it’s millions of user passwords, than they are to attack your little server with your 1000 passwords (at best). This also means that you are in control of your data, which is good news for the tin-foil hat wearers out there.

\n\n

You can even get Bitwarden’s paid features for the price of hosting your server by following this guide: https://www.reddit.com/r/selfhosted/comments/8usixz/let_me_introduce_you_to_bitwarden_rs_selfhosted/

\n\n
\n\n

Nobody cares about security, though, right? So let’s move on to the good stuff:

\n\n

Features, the good stuff (also price)

\n\n

Bitwarden offers every feature Dashlane does with loads more on top of those, and more of them for free. It’s paid version is also cheaper than Dashlane’s.

\n\n

Here’s a table I stole, that compares both service’s features:

\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
FeatureDashlaneBitwarden
Chrome supportyesyes
Firefox supportyesyes
Edge supportyesyes
Safari supportyesyes
Mac OS, Windows supportyesyes
Linux supportpooryes
Mac OS command-line clientnoyes
Windows command-line clientnoyes
Linux command-line clientnoyes
Android support, including auto-fillyesyes
Android auto-fill in Chromeyesyes
Auto-fill in Android work profileyesyes (1)
Android auto-fill shows full usernamesyesyes
iOS support, including auto-fillyesyes
Two-factor authenticationyesyes
YubiKey support in browser (Enterprise)noyes ($)
YubiKey support in browser (Personal)noyes ($)
YubiKey support in Androidnoyes ($)
YubiKey support in iOSnoyes ($)
Saved password in Android, iOSyesyes
Fingerprint login in Android, iOSyesyes
Synchronization across devicesyesyes
Import from LastPassyesyes
LastPass import distinguishes work from personal itemsnono
Preserves LastPass folders in some way when importingdoubtfulyes
Personal linked account support (or the equivalent)pooryes
Save location (personal vs. work) specified at creation timenoyes
Save location (folder / collection / space) editable in web appnoyes
Sensible password quality checks for master passwordnoyes
Password history on Linuxnoyes
Password history on Windows, Mac OSyesyes
Secure notesyesyes
Attachments on notes on Linuxnoyes
Attachments on notes on Windows, Mac OSyesyes
Shared folders with access control on Linuxnoyes
Shared folders with access control on Windowsyesyes
Shared folders with access control on Mac OSyesyes
Items can exist in multiple groups with distinct access controlnoyes
Nested foldersnoyes
Resists auto-filling invisible formsyesyes
Browser plugin only fills selected formunknownno
Browser plugin displays icon in form fieldsyesno
Browser plugin prompts to save new sites on Linuxyesyes
Browser plugin prompts to save new sites on Windows, Mac OSyesyes
2FA integrated into login entries in vault (Mac OS, Windows, iOS, Android)noyes
2FA integrated into login entries in vault (Linux)noyes
Auto-fill in browser disabled by defaultnoyes
Auto-fill in browser can be disabled by preferencenoyes
Admins can reset passwordsyesno
Admins can access other people’s unshared credentialsnono
Admins can reset other people’s 2fanono
2fa can be enforced at the organization levelnono (3)
2fa can be audited at the organization levelnoyes
Exporting items on Linuxnoyes
Exporting items on Windows, Mac OSyesyes
Password health reportsyesyes ($)
App export includes attachmentsunknownno
CLI export includes attachmentsnopoor (2)
Responsive to bug reports and feature requestsunknownyes
Open sourcenoyes
Option to self-hostnoyes
Users can delete own account (customer service not needed)yesyes
Admins can delete business account (customer service not needed)yesyes
Has a useful status page that can be subscribed toyesno
Number of outages in the past six months (since December, 2018)120
Enterprise price per user per month43
Personal price per user per month (no Attachments or YubiKey)4.990
Personal price per user per month (w/Attachments & YubiKey)4.990.84
\n\n

Note 1: In work profile apps Bitwarden might not pop up a dialog automatically inviting you to auto-fill, but it’ll display a notification you can tap to do it.

\n\n

Note 2: CLI allows individual attachments to be exported. The user would have to write a script to iterate through and export all of them.

\n\n

Note 3: On the product roadmap, not yet implemented as of writing (Click to see the feature request)

\n\n
\n
\n \n\n\n \n\n \n\n\n","content":"

Bitwarden does everything Dashlane does, better.

\n

That’s the end of the post. You can go home, now.

\n\n
\n\n

If you want a further breakdown, consider these points:

\n\n

Security, most important, most overlooked

\n

From a pure security standpoint, it’s a toss-up between Dashlane and Bitwarden. Both offer best-in-class security, so your passwords are safe on both.

\n\n

Bitwarden offers 2FA auditing at the organization level for business users, while Dashlane does not. Enforcing is on the roadmap.

\n\n

I would add that Bitwarden can offer a little more peace of mind for two reasons:

\n\n

1. It’s open source.

\n

A great many of you just sighed, but it being open source means it can be checked constantly for issues. The source for all their software is here: http://github.com/bitwarden/

\n\n

This also means that if Bitwarden doesn’t have a feature you like, or something works in a way you don’t like, you can just change it.

\n\n

2. It’s self-hostable.

\n

Some hacker is far more likely to attack the behemoth that is Dashlane with it’s millions of user passwords, than they are to attack your little server with your 1000 passwords (at best). This also means that you are in control of your data, which is good news for the tin-foil hat wearers out there.

\n\n

You can even get Bitwarden’s paid features for the price of hosting your server by following this guide: https://www.reddit.com/r/selfhosted/comments/8usixz/let_me_introduce_you_to_bitwarden_rs_selfhosted/

\n\n
\n\n

Nobody cares about security, though, right? So let’s move on to the good stuff:

\n\n

Features, the good stuff (also price)

\n\n

Bitwarden offers every feature Dashlane does with loads more on top of those, and more of them for free. It’s paid version is also cheaper than Dashlane’s.

\n\n

Here’s a table I stole, that compares both service’s features:

\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
FeatureDashlaneBitwarden
Chrome supportyesyes
Firefox supportyesyes
Edge supportyesyes
Safari supportyesyes
Mac OS, Windows supportyesyes
Linux supportpooryes
Mac OS command-line clientnoyes
Windows command-line clientnoyes
Linux command-line clientnoyes
Android support, including auto-fillyesyes
Android auto-fill in Chromeyesyes
Auto-fill in Android work profileyesyes (1)
Android auto-fill shows full usernamesyesyes
iOS support, including auto-fillyesyes
Two-factor authenticationyesyes
YubiKey support in browser (Enterprise)noyes ($)
YubiKey support in browser (Personal)noyes ($)
YubiKey support in Androidnoyes ($)
YubiKey support in iOSnoyes ($)
Saved password in Android, iOSyesyes
Fingerprint login in Android, iOSyesyes
Synchronization across devicesyesyes
Import from LastPassyesyes
LastPass import distinguishes work from personal itemsnono
Preserves LastPass folders in some way when importingdoubtfulyes
Personal linked account support (or the equivalent)pooryes
Save location (personal vs. work) specified at creation timenoyes
Save location (folder / collection / space) editable in web appnoyes
Sensible password quality checks for master passwordnoyes
Password history on Linuxnoyes
Password history on Windows, Mac OSyesyes
Secure notesyesyes
Attachments on notes on Linuxnoyes
Attachments on notes on Windows, Mac OSyesyes
Shared folders with access control on Linuxnoyes
Shared folders with access control on Windowsyesyes
Shared folders with access control on Mac OSyesyes
Items can exist in multiple groups with distinct access controlnoyes
Nested foldersnoyes
Resists auto-filling invisible formsyesyes
Browser plugin only fills selected formunknownno
Browser plugin displays icon in form fieldsyesno
Browser plugin prompts to save new sites on Linuxyesyes
Browser plugin prompts to save new sites on Windows, Mac OSyesyes
2FA integrated into login entries in vault (Mac OS, Windows, iOS, Android)noyes
2FA integrated into login entries in vault (Linux)noyes
Auto-fill in browser disabled by defaultnoyes
Auto-fill in browser can be disabled by preferencenoyes
Admins can reset passwordsyesno
Admins can access other people’s unshared credentialsnono
Admins can reset other people’s 2fanono
2fa can be enforced at the organization levelnono (3)
2fa can be audited at the organization levelnoyes
Exporting items on Linuxnoyes
Exporting items on Windows, Mac OSyesyes
Password health reportsyesyes ($)
App export includes attachmentsunknownno
CLI export includes attachmentsnopoor (2)
Responsive to bug reports and feature requestsunknownyes
Open sourcenoyes
Option to self-hostnoyes
Users can delete own account (customer service not needed)yesyes
Admins can delete business account (customer service not needed)yesyes
Has a useful status page that can be subscribed toyesno
Number of outages in the past six months (since December, 2018)120
Enterprise price per user per month43
Personal price per user per month (no Attachments or YubiKey)4.990
Personal price per user per month (w/Attachments & YubiKey)4.990.84
\n\n

Note 1: In work profile apps Bitwarden might not pop up a dialog automatically inviting you to auto-fill, but it’ll display a notification you can tap to do it.

\n\n

Note 2: CLI allows individual attachments to be exported. The user would have to write a script to iterate through and export all of them.

\n\n

Note 3: On the product roadmap, not yet implemented as of writing (Click to see the feature request)

\n","relative_path":"_posts/2019-06-18-bitwarden-vs-dashlane.md","previous":{"path":"_posts/2019-04-26-funkwhale.md","relative_path":"_posts/2019-04-26-funkwhale.md","url":"/blog/funkwhale/","id":"/blog/funkwhale","collection":"posts","draft":false,"categories":["opinion pieces"],"layout":"post","title":"Funkwhale","tags":["ideas","music"],"date":"2019-04-26 00:00:00 +0000","slug":"funkwhale","ext":".md"},"url":"/blog/bitwarden-vs-dashlane/","id":"/blog/bitwarden-vs-dashlane","collection":"posts","excerpt":"Bitwarden does everything Dashlane does, better","draft":false,"categories":["opinion pieces"],"layout":"post","title":"Bitwarden vs Dashlane","tags":["comparison","password manager"],"date":"2019-06-18 00:00:00 +0000","slug":"bitwarden-vs-dashlane","ext":".md"},"url":"/blog/ledger-is-simply-amazing/","id":"/blog/ledger-is-simply-amazing","collection":"posts","excerpt":"Simplicity is highly underrated","draft":false,"categories":["gush"],"layout":"post","title":"Ledger is amazing","tags":["finance","money manager"],"date":"2019-07-11 00:00:00 +0000","slug":"ledger-is-simply-amazing","ext":".md"},"path":"_posts/2019-06-18-bitwarden-vs-dashlane.md","output":"\n\n\n \n \n \n \n \n \n\n Bitwarden vs Dashlane\n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n\n\n\n \n\n
\n \n
\n\n\n
\n
\n

Bitwarden vs Dashlane

\n

Jun 18, 2019 | |

\n
\n \n
\n

Bitwarden does everything Dashlane does, better.

\n

That’s the end of the post. You can go home, now.

\n\n
\n\n

If you want a further breakdown, consider these points:

\n\n

Security, most important, most overlooked

\n

From a pure security standpoint, it’s a toss-up between Dashlane and Bitwarden. Both offer best-in-class security, so your passwords are safe on both.

\n\n

Bitwarden offers 2FA auditing at the organization level for business users, while Dashlane does not. Enforcing is on the roadmap.

\n\n

I would add that Bitwarden can offer a little more peace of mind for two reasons:

\n\n

1. It’s open source.

\n

A great many of you just sighed, but it being open source means it can be checked constantly for issues. The source for all their software is here: http://github.com/bitwarden/

\n\n

This also means that if Bitwarden doesn’t have a feature you like, or something works in a way you don’t like, you can just change it.

\n\n

2. It’s self-hostable.

\n

Some hacker is far more likely to attack the behemoth that is Dashlane with it’s millions of user passwords, than they are to attack your little server with your 1000 passwords (at best). This also means that you are in control of your data, which is good news for the tin-foil hat wearers out there.

\n\n

You can even get Bitwarden’s paid features for the price of hosting your server by following this guide: https://www.reddit.com/r/selfhosted/comments/8usixz/let_me_introduce_you_to_bitwarden_rs_selfhosted/

\n\n
\n\n

Nobody cares about security, though, right? So let’s move on to the good stuff:

\n\n

Features, the good stuff (also price)

\n\n

Bitwarden offers every feature Dashlane does with loads more on top of those, and more of them for free. It’s paid version is also cheaper than Dashlane’s.

\n\n

Here’s a table I stole, that compares both service’s features:

\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
FeatureDashlaneBitwarden
Chrome supportyesyes
Firefox supportyesyes
Edge supportyesyes
Safari supportyesyes
Mac OS, Windows supportyesyes
Linux supportpooryes
Mac OS command-line clientnoyes
Windows command-line clientnoyes
Linux command-line clientnoyes
Android support, including auto-fillyesyes
Android auto-fill in Chromeyesyes
Auto-fill in Android work profileyesyes (1)
Android auto-fill shows full usernamesyesyes
iOS support, including auto-fillyesyes
Two-factor authenticationyesyes
YubiKey support in browser (Enterprise)noyes ($)
YubiKey support in browser (Personal)noyes ($)
YubiKey support in Androidnoyes ($)
YubiKey support in iOSnoyes ($)
Saved password in Android, iOSyesyes
Fingerprint login in Android, iOSyesyes
Synchronization across devicesyesyes
Import from LastPassyesyes
LastPass import distinguishes work from personal itemsnono
Preserves LastPass folders in some way when importingdoubtfulyes
Personal linked account support (or the equivalent)pooryes
Save location (personal vs. work) specified at creation timenoyes
Save location (folder / collection / space) editable in web appnoyes
Sensible password quality checks for master passwordnoyes
Password history on Linuxnoyes
Password history on Windows, Mac OSyesyes
Secure notesyesyes
Attachments on notes on Linuxnoyes
Attachments on notes on Windows, Mac OSyesyes
Shared folders with access control on Linuxnoyes
Shared folders with access control on Windowsyesyes
Shared folders with access control on Mac OSyesyes
Items can exist in multiple groups with distinct access controlnoyes
Nested foldersnoyes
Resists auto-filling invisible formsyesyes
Browser plugin only fills selected formunknownno
Browser plugin displays icon in form fieldsyesno
Browser plugin prompts to save new sites on Linuxyesyes
Browser plugin prompts to save new sites on Windows, Mac OSyesyes
2FA integrated into login entries in vault (Mac OS, Windows, iOS, Android)noyes
2FA integrated into login entries in vault (Linux)noyes
Auto-fill in browser disabled by defaultnoyes
Auto-fill in browser can be disabled by preferencenoyes
Admins can reset passwordsyesno
Admins can access other people’s unshared credentialsnono
Admins can reset other people’s 2fanono
2fa can be enforced at the organization levelnono (3)
2fa can be audited at the organization levelnoyes
Exporting items on Linuxnoyes
Exporting items on Windows, Mac OSyesyes
Password health reportsyesyes ($)
App export includes attachmentsunknownno
CLI export includes attachmentsnopoor (2)
Responsive to bug reports and feature requestsunknownyes
Open sourcenoyes
Option to self-hostnoyes
Users can delete own account (customer service not needed)yesyes
Admins can delete business account (customer service not needed)yesyes
Has a useful status page that can be subscribed toyesno
Number of outages in the past six months (since December, 2018)120
Enterprise price per user per month43
Personal price per user per month (no Attachments or YubiKey)4.990
Personal price per user per month (w/Attachments & YubiKey)4.990.84
\n\n

Note 1: In work profile apps Bitwarden might not pop up a dialog automatically inviting you to auto-fill, but it’ll display a notification you can tap to do it.

\n\n

Note 2: CLI allows individual attachments to be exported. The user would have to write a script to iterate through and export all of them.

\n\n

Note 3: On the product roadmap, not yet implemented as of writing (Click to see the feature request)

\n\n
\n
\n \n\n\n \n\n \n\n\n","content":"

Bitwarden does everything Dashlane does, better.

\n

That’s the end of the post. You can go home, now.

\n\n
\n\n

If you want a further breakdown, consider these points:

\n\n

Security, most important, most overlooked

\n

From a pure security standpoint, it’s a toss-up between Dashlane and Bitwarden. Both offer best-in-class security, so your passwords are safe on both.

\n\n

Bitwarden offers 2FA auditing at the organization level for business users, while Dashlane does not. Enforcing is on the roadmap.

\n\n

I would add that Bitwarden can offer a little more peace of mind for two reasons:

\n\n

1. It’s open source.

\n

A great many of you just sighed, but it being open source means it can be checked constantly for issues. The source for all their software is here: http://github.com/bitwarden/

\n\n

This also means that if Bitwarden doesn’t have a feature you like, or something works in a way you don’t like, you can just change it.

\n\n

2. It’s self-hostable.

\n

Some hacker is far more likely to attack the behemoth that is Dashlane with it’s millions of user passwords, than they are to attack your little server with your 1000 passwords (at best). This also means that you are in control of your data, which is good news for the tin-foil hat wearers out there.

\n\n

You can even get Bitwarden’s paid features for the price of hosting your server by following this guide: https://www.reddit.com/r/selfhosted/comments/8usixz/let_me_introduce_you_to_bitwarden_rs_selfhosted/

\n\n
\n\n

Nobody cares about security, though, right? So let’s move on to the good stuff:

\n\n

Features, the good stuff (also price)

\n\n

Bitwarden offers every feature Dashlane does with loads more on top of those, and more of them for free. It’s paid version is also cheaper than Dashlane’s.

\n\n

Here’s a table I stole, that compares both service’s features:

\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
FeatureDashlaneBitwarden
Chrome supportyesyes
Firefox supportyesyes
Edge supportyesyes
Safari supportyesyes
Mac OS, Windows supportyesyes
Linux supportpooryes
Mac OS command-line clientnoyes
Windows command-line clientnoyes
Linux command-line clientnoyes
Android support, including auto-fillyesyes
Android auto-fill in Chromeyesyes
Auto-fill in Android work profileyesyes (1)
Android auto-fill shows full usernamesyesyes
iOS support, including auto-fillyesyes
Two-factor authenticationyesyes
YubiKey support in browser (Enterprise)noyes ($)
YubiKey support in browser (Personal)noyes ($)
YubiKey support in Androidnoyes ($)
YubiKey support in iOSnoyes ($)
Saved password in Android, iOSyesyes
Fingerprint login in Android, iOSyesyes
Synchronization across devicesyesyes
Import from LastPassyesyes
LastPass import distinguishes work from personal itemsnono
Preserves LastPass folders in some way when importingdoubtfulyes
Personal linked account support (or the equivalent)pooryes
Save location (personal vs. work) specified at creation timenoyes
Save location (folder / collection / space) editable i