<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>{bjørn:johansen}</title>
    <link>https://bjornjohansen.com/</link>
    <description>Recent content on {bjørn:johansen}</description>
    <generator>Hugo -- 0.118.2</generator>
    <language>en-US</language>
    <lastBuildDate>Mon, 21 Oct 2024 21:13:20 +0000</lastBuildDate>
    <atom:link href="https://bjornjohansen.com/feed.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Farewell to the WordPress Community</title>
      <link>https://bjornjohansen.com/farewell-to-wp/</link>
      <pubDate>Mon, 21 Oct 2024 21:13:20 +0000</pubDate>
       <guid isPermaLink="false">https://bjornjohansen.com/farewell-to-wp/</guid> 
      <description>So Long, and Thanks for All the Fish</description>
    </item>
    <item>
      <title>Can WordPress.org be liberated?</title>
      <link>https://bjornjohansen.com/liberate-wporg/</link>
      <pubDate>Fri, 18 Oct 2024 17:07:00 +0000</pubDate>
       <guid isPermaLink="false">https://bjornjohansen.com/liberate-wporg/</guid> 
      <description>Is it likely that control over wordpress.org will be taken away from Matt Mullenweg?</description>
    </item>
    <item>
      <title>Migrating from WordPress to Hugo</title>
      <link>https://bjornjohansen.com/wp2hugo/</link>
      <pubDate>Wed, 16 Oct 2024 23:07:00 +0000</pubDate>
       <guid isPermaLink="false">https://bjornjohansen.com/wp2hugo/</guid> 
      <description>Yesterday, I migrated this blog from WordPress to Hugo. These are the steps I took to do so.</description>
    </item>
    <item>
      <title>Goodbye WordPress, Hello Hugo</title>
      <link>https://bjornjohansen.com/goodbye-wordpress-hello-hugo/</link>
      <pubDate>Tue, 15 Oct 2024 19:11:22 +0000</pubDate>
       <guid isPermaLink="false">https://bjornjohansen.com/goodbye-wordpress-hello-hugo/</guid> 
      <description>This afternoon&amp;rsquo;s hobby project was to convert my WordPress blog into a static site using Hugo.</description>
    </item>
    <item>
      <title>Memento mori</title>
      <link>https://bjornjohansen.com/memento-mori/</link>
      <pubDate>Fri, 04 Jan 2019 17:23:55 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:33356264-3337-5366-b639-353733636263</guid> 
      <description>One day you will be gone. What defines your legacy, is not the gadgets you had, but what impact you left behind.</description>
    </item>
    <item>
      <title>Install and update translations in WordPress with Composer</title>
      <link>https://bjornjohansen.com/composer-wordpress-translations/</link>
      <pubDate>Fri, 10 Aug 2018 19:45:23 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:65613162-6231-5361-a461-626139616135</guid> 
      <description>Using Composer is a great way of organizing your WordPress project, with WordPress itself, plugins and themes declared as dependencies. However, an issue I’ve often seen is how you install translation files and keep them updated.</description>
    </item>
    <item>
      <title>Wildcard certificate from Let’s Encrypt with CloudFlare DNS</title>
      <link>https://bjornjohansen.com/wildcard-certificate-letsencrypt-cloudflare/</link>
      <pubDate>Thu, 09 Aug 2018 18:12:42 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:35613132-6563-5037-b565-393461623230</guid> 
      <description>If you’re using CloudFlare to host your DNS, there is a plugin for the official Let’s Encrypt client Certbot you can use to easily acquire and renew wildcard certificates from Let’s Encrypt.</description>
    </item>
    <item>
      <title>Debug and profile your WordPress sites with Xdebug in Local by Flywheel (using PhpStorm)</title>
      <link>https://bjornjohansen.com/profiling-xdebug-local-by-flywheel-phpstorm/</link>
      <pubDate>Mon, 04 Jun 2018 17:11:09 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:65396239-3737-5532-a666-663630663833</guid> 
      <description>This article is not an introduction to neither Xdebug, Local by Flywheel nor PhpStorm, but shows you how you can get started with debugging and profiling your WordPress sites in PhpStorm when using Local by Flywheel as a local development environment. You should already know what Xdebug is before reading this article. This is how you get started with Xdebug in Local by Flywheel.{{ double-space-with-newline }}</description>
    </item>
    <item>
      <title>Gravity Forms personal data exporter and eraser</title>
      <link>https://bjornjohansen.com/gravity-forms-personal-data-exporter-and-eraser/</link>
      <pubDate>Thu, 24 May 2018 00:25:56 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:34613161-3234-5462-b863-383936626363</guid> 
      <description>When WordPress 4.9.6 launched on May 17, 2018 it came with new tools for exporting and erasing personal data that you may have collected (you know, GDPR and all). But Gravity Forms as of version 2.3.2 doesn’t integrate with these tools. Fortunately, it is really easy to write your own exporters and erasers.</description>
    </item>
    <item>
      <title>How to mitigate CVE-2018-6389 – the load-scripts.php DoS “attack” in WordPress</title>
      <link>https://bjornjohansen.com/load-scripts-php/</link>
      <pubDate>Mon, 12 Feb 2018 22:38:40 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:64653138-3531-5034-b836-633934386261</guid> 
      <description>A little sensationalist written blog post by Barak Tawily claims that WordPress is vulnerable to a DoS attack because of the load-scripts.php file which concatenates JavaScript files on the fly.</description>
    </item>
    <item>
      <title>HTTP/2 Push WordPress Assets to First-Time Visitors</title>
      <link>https://bjornjohansen.com/http2-push-wordpress/</link>
      <pubDate>Mon, 29 Jan 2018 23:27:56 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:39323333-3831-5839-a639-343335323461</guid> 
      <description>With HTTP/2 push you can effectively send a web page’s assets to the client before the client even knows about them. Here’s how you can HTTP/2 push WordPress assets to your first-time visitors.{{ double-space-with-newline }}</description>
    </item>
    <item>
      <title>Another day, another “WordPress security vulnerability”</title>
      <link>https://bjornjohansen.com/another-day-another-wordpress-security-vulnerability/</link>
      <pubDate>Sat, 27 Jan 2018 00:36:35 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:66616636-6434-5639-a261-376632623031</guid> 
      <description>OMFG, BREAKING NEWS: Thousands of WordPress sites affected by some vulnerability.{{ double-space-with-newline }}</description>
    </item>
    <item>
      <title>Welcome to WordCamp Oslo 2018</title>
      <link>https://bjornjohansen.com/welcome-to-wordcamp-oslo-2018/</link>
      <pubDate>Thu, 25 Jan 2018 17:18:42 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:31383731-6661-5430-b834-363134626365</guid> 
      <description>On March 2–4 2018, Friday through Sunday, there will be a great chance to meet WordPressers at the conference WordCamp Oslo 2018.</description>
    </item>
    <item>
      <title>Cut 90% of your WordPress translations loading time</title>
      <link>https://bjornjohansen.com/wordpress-translations-loading-time/</link>
      <pubDate>Sat, 20 Jan 2018 20:59:27 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:65333936-3565-5538-a135-343239393364</guid> 
      <description>WordPress translations are compiled from human-readable PO-files into machine optimized MO-files, but still takes a lot of overhead to load. If you only could cache the translation load time, you would save a lot of page load time. We can easily cut 90% of our WordPress translations loading time.</description>
    </item>
    <item>
      <title>Git Pre-commit Hook for WordPress projects</title>
      <link>https://bjornjohansen.com/wordpress-git-pre-commit-hook/</link>
      <pubDate>Sat, 20 Jan 2018 19:43:51 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:64386132-6438-5064-a564-613165373034</guid> 
      <description>Wouldn’t it be cool if you, in your PHP project could define a package that makes sure that everybody who even tries to commit code is forced to follow the project’s defined coding standards? Yeah, me too. So I created this Composer plugin you can use in your projects.</description>
    </item>
    <item>
      <title>Speed up the output by 1000x with a WordPress menu cache</title>
      <link>https://bjornjohansen.com/wordpress-menu-cache/</link>
      <pubDate>Sat, 20 Jan 2018 18:29:37 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:63336138-3961-5632-b564-313362326132</guid> 
      <description>Generating the menus in WordPress is quite resource intensive. Sites with few visitors and few menu items might not notice this much. But if you have a large amount of menu items, like in a mega menu, in combination with a lot of visitors the menu generation can be a real hog on your server’s CPUs. Let’s see if we can improve the speed with a little WordPress menu cache trickery.</description>
    </item>
    <item>
      <title>Automate the upgrade of your DigitalOcean droplets</title>
      <link>https://bjornjohansen.com/automate-the-upgrade-of-your-digitalocean-droplets/</link>
      <pubDate>Fri, 19 Jan 2018 01:27:59 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:39653564-3061-5663-b064-613763646366</guid> 
      <description>Recently DigitalOcean released &lt;a href=&#34;https://blog.digitalocean.com/new-droplet-plans/&#34;&gt;new pricing plans&lt;/a&gt; where they basically doubled the RAM for the same price of the old plans. But to get the benefits for your existing droplets, you have to upgrade all of your existing droplets in a process that involves shutting them down, selecting the new plan, waiting for the upgrade to happen and power on the droplets again. I have tens of droplets and had no intention of doing this manually, so I wrote a script to use the DigitalOcean API to automate a mass-upgrade of all droplets.</description>
    </item>
    <item>
      <title>Customize the WordPress maintenance mode page</title>
      <link>https://bjornjohansen.com/customize-wordpress-maintenance-mode/</link>
      <pubDate>Fri, 01 Sep 2017 17:00:17 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:30316139-3739-5163-a563-343739313463</guid> 
      <description>Whenever you upgrade a plugin, theme or WordPress itself through the WordPress dashboard, WordPress will put itself in maintenance mode and all your visitors will see the maintenance mode notice “Briefly unavailable for scheduled maintenance. Check back in a minute.”</description>
    </item>
    <item>
      <title>WordPress security for the casual blogger or small business with limited resources</title>
      <link>https://bjornjohansen.com/wordpress-security-budget/</link>
      <pubDate>Thu, 10 Aug 2017 16:37:51 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:62626336-6637-5339-a230-366461663232</guid> 
      <description>The resources you have available to spend on WordPress security for your website usually vary vastly whether you’re an international corporation or just a hobbyist blogger. But since most attacks are automated by bots looking for vulnerabilities, a lot of the threats are the same. Here are some WordPress security measures that bloggers and small business with limited resources easily can take.</description>
    </item>
    <item>
      <title>Use mu-plugins for adding custom functionality to your WordPress site</title>
      <link>https://bjornjohansen.com/mu-plugins/</link>
      <pubDate>Wed, 09 Aug 2017 16:35:35 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:35633735-6230-5838-a333-313731386133</guid> 
      <description>If you google “functions.php” you get about 7 million results. I bet most of them contain bad advice: “How to add functionality to your WordPress site”. Some of them continue even worse: “[…] without using a plugin”. For your own good, don’t edit functions.php to add custom functionality to your WordPress site. You can use mu-plugins to do that.</description>
    </item>
    <item>
      <title>Don’t be “clever” with the translatable strings in your WordPress plugin or theme</title>
      <link>https://bjornjohansen.com/clever-wordpress-translations/</link>
      <pubDate>Sun, 06 Aug 2017 09:30:00 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:30326530-6362-5439-b239-373030663265</guid> 
      <description>Since I translate a lot of WordPress themes and plugins, I sometimes come across plugins who try to be clever with their translations. This tends to not work so well in reality.</description>
    </item>
    <item>
      <title>Do people struggle with Yoda conditions for real?</title>
      <link>https://bjornjohansen.com/yoda-conditions/</link>
      <pubDate>Fri, 04 Aug 2017 11:45:57 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:39643136-3530-5433-a439-323035303261</guid> 
      <description>I’ve been using, and advocating for others to use, Yoda conditions for a long time. Sometimes, I read or hear about someone who doesn’t like them, without actually describing why. From time to time I read a blog post that advocates against it: And it’s always the same reason.</description>
    </item>
    <item>
      <title>A reference of all outgoing WordPress emails</title>
      <link>https://bjornjohansen.com/wordpress-emails/</link>
      <pubDate>Thu, 03 Aug 2017 18:53:30 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:31373732-6539-5339-a136-363637343034</guid> 
      <description>As you may know, WordPress sends out email notifications from time to time. Actually, as of WordPress 4.8.1, there are 24 different occasions when WordPress will send an email message. Don’t you think it would be useful to have a reference of all outgoing WordPress emails?</description>
    </item>
    <item>
      <title>The bus factor in the WordPress project</title>
      <link>https://bjornjohansen.com/wordpress-contingency-plan/</link>
      <pubDate>Sun, 18 Jun 2017 19:19:01 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:66333838-6333-5530-a463-366563653163</guid> 
      <description>During WordCamp Europe 2017 in Paris, there was a Q&amp;amp;A session with Matt Mullenweg. I wanted to ask him a question, but due to high demand and restricted time, I never got to ask him. I guess Matt is a busy person, so I don’t expect him to actually answer this question himself. But maybe someone in the WordPress community has answers, insights or ideas?
A person is the CEO of one of the most important WordPress-related companies.</description>
    </item>
    <item>
      <title>Proper RFC 4122 UUIDs as GUIDs in WordPress</title>
      <link>https://bjornjohansen.com/uuid-as-wordpress-guid/</link>
      <pubDate>Sat, 10 Jun 2017 15:05:02 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:66653238-6436-5933-a535-616665323332</guid> 
      <description>UUIDs (Universally Unique IDentifier), also known as GUIDs (Globally Unique IDentifier), is a string that identifies a piece of information in computer systems. WordPress use GUIDs to identify each individual post, but use URLs (kind of) for GUIDs, and thus does not follow the standard definition (RFC 4122) of a UUID (or GUID).</description>
    </item>
    <item>
      <title>Secure email: Encrypt and sign your emails with PGP/GnuPG</title>
      <link>https://bjornjohansen.com/secure-email/</link>
      <pubDate>Thu, 25 May 2017 11:49:24 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:33613931-3236-5265-b165-386234653236</guid> 
      <description>Email is fundamentally insecure. There are such a plethora of issues with it, it is crazy to think about the kind of information sent with it. It is probably even crazier when you realize we’ve had a solution for sending secure email since 1991.</description>
    </item>
    <item>
      <title>Six reasons why I love WordCamps</title>
      <link>https://bjornjohansen.com/why-i-love-wordcamps/</link>
      <pubDate>Mon, 15 May 2017 14:21:19 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:64353264-3138-5238-a232-653465616638</guid> 
      <description>This weekend I was at WordCamp Berlin, met a lot of great people, and watched a lot of interesting presentations. WordCamps are actually quite informal by themselves, but at the afterparties, people are really letting their shoulders down and it often seems like people are long-time personal friends. If you open up to it, it won’t take long until people will give you feedback on whatever you have released in public.</description>
    </item>
    <item>
      <title>DNS privacy: Use a DNS provider that doesn’t track you</title>
      <link>https://bjornjohansen.com/dns-privacy/</link>
      <pubDate>Sat, 25 Mar 2017 02:01:03 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:37383034-6534-5064-a536-303938316665</guid> 
      <description>Many ISPs and other DNS providers are slow or inject ads, track you, hijack DNS queries or do other nasty stuff. To mitigate this, you should use a fast, reliable and free service that respects your DNS privacy.</description>
    </item>
    <item>
      <title>Self-destructing cookies: Real, forced Do-Not-Track for your privacy</title>
      <link>https://bjornjohansen.com/self-destructing-cookies/</link>
      <pubDate>Fri, 24 Mar 2017 19:22:35 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:32313836-3463-5439-b831-613937656463</guid> 
      <description>This is the second post in my series of posts on some of the tools I use to stay a little safer and protect my privacy online. With self-destructing cookies, you get a clean sheet even with those who don’t respect the Do-Not-Track header.</description>
    </item>
    <item>
      <title>How to perform and mitigate a WordPress session donation attack</title>
      <link>https://bjornjohansen.com/wordpress-session-donation-attack/</link>
      <pubDate>Wed, 22 Mar 2017 15:16:56 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:30626132-3437-5738-b264-633332333961</guid> 
      <description>WordPress doesn’t use a nonce for the login form, which opens up for you to perform a WordPress session donation attack.</description>
    </item>
    <item>
      <title>Immutable assets with unique URLs in WordPress for enqueued JS and CSS files</title>
      <link>https://bjornjohansen.com/immutable-assets-wordpress/</link>
      <pubDate>Tue, 21 Mar 2017 19:47:48 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:36313862-3266-5261-b061-663763373839</guid> 
      <description>If you’re utilizing the browser cache correctly, you’ll gain huge performance benefits for your users, as well as save bandwidth and server capacity which equals to saving money. To do this right, you must create unique URLs for all versions of your resources, and tell them to never ask for the content again by telling the browsers that the assets are immutable resources.</description>
    </item>
    <item>
      <title>Secure messaging on your phone with the Signal app</title>
      <link>https://bjornjohansen.com/secure-messaging-signal/</link>
      <pubDate>Mon, 20 Mar 2017 12:40:49 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:32626664-3434-5761-b166-383236303166</guid> 
      <description>I’m running a series of posts on some of the tools I use to stay a little safer and protect my privacy online. Here’s how you can get much better secure messaging on your phone using the Signal app.</description>
    </item>
    <item>
      <title>How CloudFlare handled CloudBleed</title>
      <link>https://bjornjohansen.com/how-cloudflare-handled-cloudbleed/</link>
      <pubDate>Fri, 24 Feb 2017 09:27:05 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:33663066-6334-5466-b930-346639373537</guid> 
      <description>Tavis Ormandy from Google’s Project Zero contacted Cloudflare to report a security problem with their service. It turned out that in some unusual circumstances, they would bleed memory that contained private information.</description>
    </item>
    <item>
      <title>Giving users a helping hand when authorizing them in WordPress</title>
      <link>https://bjornjohansen.com/wordpress-assisted-password-check/</link>
      <pubDate>Tue, 24 Jan 2017 07:17:14 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:36323937-6365-5235-b963-353430666163</guid> 
      <description>Inspired by how Facebook assists their users when they log in, I decided to implement something like the same for WordPress.</description>
    </item>
    <item>
      <title>Tracking visitors with adblockers</title>
      <link>https://bjornjohansen.com/tracking-visitors-with-adblockers/</link>
      <pubDate>Mon, 23 Jan 2017 20:02:19 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:66373963-6565-5537-b462-303831323535</guid> 
      <description>More and more users are using adblockers or surfing the web via private browsing with tracking protection. But this also affects your web analytics, as the blockers also will block analytics tracking – not only third party services like Google Analytics, but also self-hosted solutions like Piwik.</description>
    </item>
    <item>
      <title>Move your WordPress site from non-www to www domain</title>
      <link>https://bjornjohansen.com/move-wordpress-from-non-www-to-www/</link>
      <pubDate>Mon, 23 Jan 2017 18:49:14 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:65303734-3834-5863-b362-633939623035</guid> 
      <description>So, you’ve launched your WordPress site on a non-www domain, like example.com, but since then found out that running it on on www, like &lt;a href=&#34;https://www.example.com&#34;&gt;www.example.com&lt;/a&gt;, is better and want to move? You’re in luck, because it is really easy.</description>
    </item>
    <item>
      <title>To www or not to www – Should you use www or not in your domain?</title>
      <link>https://bjornjohansen.com/www-or-not/</link>
      <pubDate>Fri, 20 Jan 2017 17:49:52 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:31666563-3364-5630-a361-353039313930</guid> 
      <description>For 20 years or so, there has been the debate over whether you should use www or not in your web site’s canonical hostname. So should you use www or not?</description>
    </item>
    <item>
      <title>Keep the internet healthy – Internet for people, not profit.</title>
      <link>https://bjornjohansen.com/support-mozilla/</link>
      <pubDate>Fri, 20 Jan 2017 14:27:45 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:64346261-3963-5535-a164-326431346434</guid> 
      <description>“ &lt;a href=&#34;https://www.mozilla.org/en-US/internet-health/&#34;&gt;A healthy Internet needs all of us&lt;/a&gt;”, Mozilla states. And they’re right.</description>
    </item>
    <item>
      <title>Encrypt and decrypt a file using SSH keys</title>
      <link>https://bjornjohansen.com/encrypt-file-using-ssh-key/</link>
      <pubDate>Thu, 05 Jan 2017 17:25:41 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:66336266-3565-5336-b932-656134356263</guid> 
      <description>If you have someone’s public SSH key, you can use OpenSSL to safely encrypt a file and send it to them over an insecure connection (i.e. the internet). They can then use their private key to decrypt the file you sent.</description>
    </item>
    <item>
      <title>Flexible Content Fields in Field Manager</title>
      <link>https://bjornjohansen.com/field-manager-flexible-content/</link>
      <pubDate>Fri, 02 Dec 2016 19:42:06 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:30313135-6534-5139-b461-626162616366</guid> 
      <description>&lt;a href=&#34;http://fieldmanager.org/&#34;&gt;Field Manager&lt;/a&gt; doesn’t have a flexible content field type as &lt;a href=&#34;https://www.advancedcustomfields.com/pro/&#34;&gt;Advanced Custom Fields Pro&lt;/a&gt; does, but it is possible to mimic the functionality by using a little logic.</description>
    </item>
    <item>
      <title>Do you want my time for free?</title>
      <link>https://bjornjohansen.com/my-time-for-free/</link>
      <pubDate>Mon, 17 Oct 2016 14:31:51 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:35643737-3665-5765-b530-393461616234</guid> 
      <description>&lt;p&gt;Publishing open source software or articles for free is very giving. Not only does it give you a warm fuzzy feeling inside when someone appreciates what you release, but it can also have &lt;a href=&#34;https://www.ostraining.com/blog/wordpress/giving-back/&#34;&gt;other indirect consequences&lt;/a&gt; that give you a happier life.&lt;/p&gt;
&lt;p&gt;But when something is free – as in no cost – people will also often turn to a mindset where they don’t appreciate your effort, time or value as a human being. For some reason, some people forget all about being polite and demands that I give them professional support because they can’t read instructions, don’t know what they are doing, or just feel like their time is much more important than mine.&lt;/p&gt;
</description>
    </item>
    <item>
      <title>WordPress plugins with the most reported vulnerabilities</title>
      <link>https://bjornjohansen.com/plugins-most-vulnerabilities/</link>
      <pubDate>Sun, 16 Oct 2016 17:55:19 +0000</pubDate>
       <guid isPermaLink="false">https://www.bjornjohansen.com/?page_id=1006</guid> 
      <description>Top 10 WordPress plugins with the most reported vulnerabilities according to the WPScan Vulnerability Database.
[wpvulndb_chart]
Please note that past vulnerabilities do not necessarily reflect the plugins’ state today. Reporting vulnerabilities so they can be fixed, is a good thing.
What’s the data source? I wrote a script that once per day will download the WPScan Vulnerability Database and count the vulnerabilities per plugin. The result is published in a JSON file here (use this source at your own risk, it might go away or be changed without any notice), which I parse to use as data source in the above graph.</description>
    </item>
    <item>
      <title>Moderate WordPress comments with WP-CLI</title>
      <link>https://bjornjohansen.com/moderate-comments-wp-cli/</link>
      <pubDate>Sun, 16 Oct 2016 14:04:46 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:33633736-3563-5530-b735-666530653364</guid> 
      <description>I very much appreciate comments that bring new insights, corrects my errors, or leaves a thank you note. But even so, it is a bit tedious to moderate comments. Though logging into WordPress – even with &lt;a href=&#34;https://www.bjornjohansen.com/two-factor-authentication-for-wordpress&#34;&gt;two-factor authentication&lt;/a&gt; enabled – isn’t much of a hassle, it is still a nuisance when you just want to approve or trash a couple of comments.</description>
    </item>
    <item>
      <title>How to do an Nginx redirect</title>
      <link>https://bjornjohansen.com/nginx-redirect/</link>
      <pubDate>Sat, 15 Oct 2016 13:45:01 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:61646133-3162-5634-a232-346265303235</guid> 
      <description>Nginx is an extremely efficient and quite flexible web server. When you want to do a redirect in Nginx, you have a few options to select from, so you can choose the one that suits you best to do an Nginx redirect.</description>
    </item>
    <item>
      <title>The future of Certificate Authorities</title>
      <link>https://bjornjohansen.com/the-future-of-certificate-authorities/</link>
      <pubDate>Mon, 01 Aug 2016 16:38:47 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:61636461-3766-5538-b865-616338333630</guid> 
      <description>With the advent of the fully automated and free of cost certificate authorities Let’s Encrypt and StartCom there is no doubt that the future of CAs are changing.</description>
    </item>
    <item>
      <title>SVG uploads in WordPress (the Inconvenient Truth)</title>
      <link>https://bjornjohansen.com/svg-in-wordpress/</link>
      <pubDate>Thu, 26 May 2016 20:02:07 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:30303135-3439-5535-b863-313431636535</guid> 
      <description>&lt;p&gt;Enabling uploads of SVG files in WordPress is quite easy, and there is a tonne of posts on the Interwebs explaining how you do it. Usually along the lines of:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;function add_svg_to_upload_mimes( $upload_mimes ) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	$upload_mimes[&amp;#39;svg&amp;#39;] = &amp;#39;image/svg+xml&amp;#39;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	$upload_mimes[&amp;#39;svgz&amp;#39;] = &amp;#39;image/svg+xml&amp;#39;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	return $upload_mimes;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;add_filter( &amp;#39;upload_mimes&amp;#39;, &amp;#39;add_svg_to_upload_mimes&amp;#39;, 10, 1 );
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And that’s pretty much it.&lt;/p&gt;
&lt;p&gt;Except it is not.&lt;/p&gt;
</description>
    </item>
    <item>
      <title>Allow SVG uploads to WordPress when behind Sucuri CloudProxy</title>
      <link>https://bjornjohansen.com/svg-upload-cloudproxy/</link>
      <pubDate>Wed, 25 May 2016 19:29:02 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:32346432-3434-5362-b664-313863323232</guid> 
      <description>Uploading SVG files to WordPress when you’re behind the Sucuri CloudProxy Web Application Firewall isn’t that straightforward, but it is possible.</description>
    </item>
    <item>
      <title>Let’s Encrypt for Nginx</title>
      <link>https://bjornjohansen.com/letsencrypt-nginx/</link>
      <pubDate>Thu, 31 Mar 2016 20:48:31 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:38623063-3465-5338-b964-656234343537</guid> 
      <description>Let’s install an SSL-certificate from Let’s Encrypt for Nginx.</description>
    </item>
    <item>
      <title>Run all due cron events for WordPress with WP-CLI</title>
      <link>https://bjornjohansen.com/wordpress-cron-wp-cli/</link>
      <pubDate>Wed, 09 Dec 2015 15:45:48 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:33653861-3162-5930-a664-636666633637</guid> 
      <description>Running a real cronjob is much more reliable than WordPress’ built-in “maybe-will-trigger” solution. But if you’re running a multisite network, you have to add a crontab entry for every site you set up – which is tedious. Thanks to WP-CLI, we can use a small bash script instead, which will run all due events for all sites for us. Oh, and it works for single sites as well.</description>
    </item>
    <item>
      <title>How to upgrade to PHP 7 on Ubuntu</title>
      <link>https://bjornjohansen.com/upgrade-to-php7/</link>
      <pubDate>Fri, 04 Dec 2015 11:31:31 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:39376630-6561-5537-a561-653133613133</guid> 
      <description>Depending on your time zone, PHP 7 was finally released on 3rd/4th of December 2015. Even though the general recommendation for production servers is to wait for a little bit and gather some experiences before upgrading, some of us want to jump right on and upgrade to PHP 7.</description>
    </item>
    <item>
      <title>Restrict allowed HTTP methods in Nginx</title>
      <link>https://bjornjohansen.com/restrict-allowed-http-methods-in-nginx/</link>
      <pubDate>Wed, 21 Oct 2015 18:22:11 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:62313264-3030-5033-b530-326262653633</guid> 
      <description>&lt;p&gt;Security vulnerabilities are often exploits of software that fails when trying to deal with unexpected input. Other times they are exploits of a misconfiguration or a service that unintentionally was open to the public.&lt;/p&gt;
&lt;p&gt;For the above reasons, we should limit as much as possible what services are exposed to the public and limit as much as possible what they do and accept from the visitors. To follow those security principles, we should only allow the HTTP methods for which we, in fact, provide services. Under all normal circumstances, that would be the methods &lt;code&gt;GET&lt;/code&gt;, &lt;code&gt;POST&lt;/code&gt; and &lt;code&gt;HEAD&lt;/code&gt;.&lt;/p&gt;
</description>
    </item>
    <item>
      <title>Block access to PHP files on your WordPress site with Nginx</title>
      <link>https://bjornjohansen.com/block-access-to-php-files-with-nginx/</link>
      <pubDate>Mon, 19 Oct 2015 20:43:56 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:64396231-3165-5362-a165-633364313838</guid> 
      <description>In your WordPress site, there are directories that include PHP files that visitors should never be able to access directly. They are only there for WordPress to function as an application that runs on your server. But because of WordPress’ directory and file structure, they are kind of accessible to the public. All of them are meant to be part of a larger application – WordPress, that is – and should not cause any harm if called directly – that we know. Some of the files execute some code even when ran standalone. An attacker might know of a clever way to make that code run in an unexpected manner, causing harm. To be on the safe side, we should deny access to all these PHP files from the outside world. Since we block access to them in our Nginx configuration, PHP will still run them as usual and WordPress will work just fine.</description>
    </item>
    <item>
      <title>Restrict access to the WordPress dashboard by IP address in Nginx</title>
      <link>https://bjornjohansen.com/access-wordpress-by-ip-in-nginx/</link>
      <pubDate>Sat, 17 Oct 2015 13:28:16 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:61386432-6365-5433-a537-643632316230</guid> 
      <description>If you have a static IP address, like from your office, or &lt;a href=&#34;https://www.bjornjohansen.com/setting-up-your-own-pptp-vpn&#34;&gt;your own private VPN&lt;/a&gt;, you can increase your security tremendously by restricting all logins to that IP address. The effect is that even if an attacker knows your login credentials, they will not be able to log in or access any part of the WordPress Dashboard.</description>
    </item>
    <item>
      <title>Redirect all HTTP requests to HTTPS with Nginx</title>
      <link>https://bjornjohansen.com/redirect-to-https-with-nginx/</link>
      <pubDate>Thu, 15 Oct 2015 19:15:43 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:65646238-3538-5639-b735-303636353639</guid> 
      <description>All login credentials transferred over plain HTTP can easily be sniffed by an MITM attacker, but is is not enough to encrypt the login forms. If you are visiting plain HTTP pages while logged in, your session can be hijacked, and not even &lt;a href=&#34;https://www.bjornjohansen.com/two-factor-authentication-for-wordpress&#34;&gt;two-factor authentication&lt;/a&gt; will protect you. To protect all info sent between your visitors – which includes you – and your web server, we will redirect all requests that are coming over plain HTTP to the HTTPS equivalent.</description>
    </item>
    <item>
      <title>Strict file ownership for your WordPress installation</title>
      <link>https://bjornjohansen.com/strict-file-ownership-for-wordpress/</link>
      <pubDate>Tue, 13 Oct 2015 17:08:28 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:38653463-3732-5566-b834-323637313536</guid> 
      <description>WordPress requires write access to one directory, and that one directory only: the directory returned by &lt;code&gt;wp_upload_dir()&lt;/code&gt;. By default, this is &lt;code&gt;/wp-content/upload&lt;/code&gt;, but it can be configured to anything that is beneath your document root, like &lt;code&gt;/media&lt;/code&gt;, if you want to.</description>
    </item>
    <item>
      <title>Exclude certain requests from the Nginx access log</title>
      <link>https://bjornjohansen.com/exclude-requests-from-nginx-access-log/</link>
      <pubDate>Sun, 11 Oct 2015 14:33:03 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:32653466-6236-5261-b834-346164313439</guid> 
      <description>Logs are nice and all that, but sometimes certain entries are there just to fill up the logs or are cluttering them. Here’s a few ways to exclude requests – by URL or visitor IP – from the Nginx access log.</description>
    </item>
    <item>
      <title>Configure your local Postfix to relay through a transactional email service</title>
      <link>https://bjornjohansen.com/postfix-relay/</link>
      <pubDate>Fri, 09 Oct 2015 13:10:10 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:37343066-3030-5237-a131-646234366666</guid> 
      <description>Using Postfix with specialized, transactional email services like SendGrid or Mandrill is excellent for not only for optimizing email deliverability, but they usually also offer some nice features.</description>
    </item>
    <item>
      <title>Two Factor Authentication for WordPress</title>
      <link>https://bjornjohansen.com/two-factor-authentication-for-wordpress/</link>
      <pubDate>Wed, 07 Oct 2015 07:56:02 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:65613334-3735-5531-b236-666432386137</guid> 
      <description>If you’re using a strong password, brute-forcing is a very inefficient way of breaking into your WordPress account, and if it is really strong, dictionary attacks won’t help much either. However, there are are other, easier, ways for a mischievous person to get their hands on your login credentials e.g. with phishing, keyloggers or a MITM attack. By using a two-factor solution, you will increase your login security by an order of magnitude.</description>
    </item>
    <item>
      <title>SSH timeout prevention – keep SSH sessions alive</title>
      <link>https://bjornjohansen.com/ssh-timeout/</link>
      <pubDate>Mon, 05 Oct 2015 14:36:42 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:36333861-3134-5863-a666-373864336636</guid> 
      <description>SSH timeout due to inactivity is annoying. Here’s how to keep your SSH sessions alive and prevent the SSH timeout:</description>
    </item>
    <item>
      <title>WordPress behind Big-IP</title>
      <link>https://bjornjohansen.com/wordpress-behind-big-ip/</link>
      <pubDate>Mon, 28 Sep 2015 17:09:42 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:61323430-6437-5137-a363-313964663739</guid> 
      <description>To be honest, I don’t exactly know too much about Big-IP, but I’ve come across someone who use it. They terminate HTTPS in Big-IP and WordPress runs on plain HTTP on port 80 on the backend nodes. By default, this makes WordPress confused, so you can’t login to the WordPress dashboard.</description>
    </item>
    <item>
      <title>Enable HTTP/2 on Nginx</title>
      <link>https://bjornjohansen.com/enable-http2-on-nginx/</link>
      <pubDate>Tue, 22 Sep 2015 19:26:43 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:31623638-3132-5266-b361-323766666534</guid> 
      <description>Experimental support for HTTP/2 became available in Nginx version 1.9.5 (mainline). It is really easy to enable, and I’ll show you how.</description>
    </item>
    <item>
      <title>HTTP Public Key Pinning (HPKP)</title>
      <link>https://bjornjohansen.com/public-key-pinning/</link>
      <pubDate>Thu, 16 Jul 2015 11:39:19 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:36656436-3236-5036-a238-646136336161</guid> 
      <description>&lt;a href=&#34;https://www.bjornjohansen.com/securing-nginx-ssl&#34;&gt;Using HTTPS&lt;/a&gt; helps preventing someone from snooping your username/password or hijacking your sessions. &lt;a href=&#34;https://www.bjornjohansen.com/optimizing-https-nginx&#34;&gt;Using HSTS&lt;/a&gt; makes sure the connection stays on HTTPS, even if a MITM tries to redirect you to the plain HTTP version of a web site. But it is easier than you might think for a MITM to use a rogue certificate, making you believe everything is fine. HTTP Public Key Pinning (HPKP) helps the browser check that everything actually is fine.</description>
    </item>
    <item>
      <title>Privacy Policy</title>
      <link>https://bjornjohansen.com/privacy-policy/</link>
      <pubDate>Wed, 22 Apr 2015 17:58:32 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:66356536-6538-5665-a365-396135636632</guid> 
      <description>TL;DR: Your computer is sending my server data. I promise I won’t abuse that data. I’m also doing my best to make sure that any 3rd parties won’t abuse you either.
Last updated: 2024-10-18
The website available under the address https://bjornjohansen.com is the personal blog of Bjørn Johansen (hereafter “I”). I am the data controller responsible for taking care of the personal data you may send my way. This document describes how those data are protected, and your rights regarding them.</description>
    </item>
    <item>
      <title>The slides from my presentation on HTTP/2 at WordCamp Belgrade 2015</title>
      <link>https://bjornjohansen.com/wcbg15/</link>
      <pubDate>Sat, 18 Apr 2015 06:52:48 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:31646264-3233-5732-b237-363463363936</guid> 
      <description>Here are my slides from WordCamp Belgrade 2015:
&lt;a href=&#34;https://www.bjornjohansen.com/wcbg15-slides/&#34;&gt;HTTP/2 is here – Unlearn your optimization skills&lt;/a&gt;
If you’re having issues with the HTML version, you may &lt;a href=&#34;https://www.bjornjohansen.com/content/uploads/2015/04/HTTP2.pdf&#34;&gt;download a PDF here&lt;/a&gt;.</description>
    </item>
    <item>
      <title>Running PHP7-FPM Nightly Build on Ubuntu 14.04</title>
      <link>https://bjornjohansen.com/php7-fpm-nightly-build-on-ubuntu/</link>
      <pubDate>Tue, 14 Apr 2015 15:36:03 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:32623231-3337-5732-b734-663036336433</guid> 
      <description>As I’m writing this, the calendar shows April 14 2015. According to the &lt;a href=&#34;https://wiki.php.net/rfc/php7timeline&#34;&gt;PHP 7.0 timeline&lt;/a&gt;, it has a projected release date of November 2015. But if you want to try it out (to check out the speed), you can already do so.</description>
    </item>
    <item>
      <title>Running HHVM with fallback to PHP-FPM</title>
      <link>https://bjornjohansen.com/hhvm-with-fallback-to-php/</link>
      <pubDate>Wed, 03 Dec 2014 21:57:29 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:37333362-6639-5337-a638-343161393433</guid> 
      <description>HHVM can really speed up your PHP-based web site. Most reports are somewhere in the range of 2–4x faster. Unfortunately, HHVM isn’t very stable and will suddenly die, just of the blue, from time to another. Fortunately, if you’re running Nginx it’s really easy to set up PHP-FPM as a fallback.</description>
    </item>
    <item>
      <title>Using fail2ban to block WordPress login attacks</title>
      <link>https://bjornjohansen.com/using-fail2ban-with-wordpress/</link>
      <pubDate>Fri, 07 Nov 2014 19:31:38 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:35333461-3535-5165-a134-373366663038</guid> 
      <description>Fail2ban works by filtering a log file with a regular expression triggering a &lt;code&gt;ban&lt;/code&gt; action if the condition is met. After a preset time, it will trigger an &lt;code&gt;unban&lt;/code&gt; action. Without much effort, we can have WordPress log all authentication events and have fail2ban react on them.</description>
    </item>
    <item>
      <title>Using fail2ban from behind a Rackspace Cloud LoadBalancer</title>
      <link>https://bjornjohansen.com/fail2ban-rackspace-loadbalancer/</link>
      <pubDate>Fri, 07 Nov 2014 19:31:31 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:34343362-6565-5331-b461-373762623161</guid> 
      <description>If your fail2ban is on a host behind a Rackspace Cloud LoadBalancer, you’ll want to block the offending IP addresses directly in your LoadBalancer. If your LB is acting as a reverse proxy, you’ll HAVE to block in the LB, but it is also nice to protect all other nodes behind the LB and offload the lifting.</description>
    </item>
    <item>
      <title>Running HHVM instead of PHP with Nginx on Ubuntu</title>
      <link>https://bjornjohansen.com/running-hhvm-instead-php-nginx-ubuntu/</link>
      <pubDate>Mon, 12 May 2014 20:34:25 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:36663237-3735-5634-b439-663263646166</guid> 
      <description>Since version 3.9, WordPress have been 100% compatible with &lt;a href=&#34;http://hhvm.com/&#34; title=&#34;HipHop Virtual Machine&#34;&gt;HHVM&lt;/a&gt; and I have begun replacing PHP with it on a few of my servers to experiment.</description>
    </item>
    <item>
      <title>WordPress Quality Guidelines</title>
      <link>https://bjornjohansen.com/wordpress-quality-guidelines/</link>
      <pubDate>Thu, 27 Feb 2014 18:53:22 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:33373866-3736-5466-b337-666363396338</guid> 
      <description>Any organization where multiple developers cooperate on a regular basis needs some guidelines to assure optimal quality of the end result. Most of these rules applies to freelancers as well.</description>
    </item>
    <item>
      <title>«Slap-on» speed optimization of your WordPress site</title>
      <link>https://bjornjohansen.com/slap-speed-optimization-wordpress-site/</link>
      <pubDate>Thu, 30 Jan 2014 15:23:00 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:65613136-6138-5639-b764-616435343332</guid> 
      <description>OK, so you might have been at a WordCamp listening to talks or reading a few blog posts and you get that you should really get your WordPress site speed optimized. Starting all over isn&amp;rsquo;t either tempting nor something you have the time for. Don&amp;rsquo;t despair, you&amp;rsquo;ll get a long way by installing 5 plugins.</description>
    </item>
    <item>
      <title>Optimizing HTTPS on Nginx</title>
      <link>https://bjornjohansen.com/optimizing-https-nginx/</link>
      <pubDate>Sat, 18 Jan 2014 23:49:30 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:64373039-3439-5939-a565-376661666535</guid> 
      <description>Now that you have secured &lt;a href=&#34;https://www.bjornjohansen.com/securing-nginx-ssl&#34;&gt;Nginx with HTTPS&lt;/a&gt; and &lt;a href=&#34;https://www.bjornjohansen.com/enabling-spdy-nginx&#34;&gt;enabled SPDY&lt;/a&gt; &lt;a href=&#34;https://www.bjornjohansen.com/enable-http2-on-nginx&#34;&gt;enabled HTTP/2&lt;/a&gt;, it&amp;rsquo;s time to improve both the security and the performance of the server.</description>
    </item>
    <item>
      <title>Host ga.js locally with a WordPress plugin</title>
      <link>https://bjornjohansen.com/host-ga-js-locally-wordpress-plugin/</link>
      <pubDate>Fri, 27 Sep 2013 13:49:54 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:31303839-3239-5133-a531-666664396137</guid> 
      <description>Recently, I&amp;rsquo;ve done some WordPress load optimization with Thomas Bensmann (read his post « &lt;a href=&#34;https://bensmann.no/full-score-google-pagespeed-pingdom-gtmetrix/&#34;&gt;Full score on Google PageSpeed, Pingdom and GTMetrix&lt;/a&gt;») and to achieve full effect, you do have to load the Google Analytics tracking script, ga.js, from your own server.</description>
    </item>
    <item>
      <title>Optimize your JS and CSS loading in WordPress</title>
      <link>https://bjornjohansen.com/wordpress-minify/</link>
      <pubDate>Sun, 22 Sep 2013 22:04:51 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:66636463-6261-5533-a430-353361366633</guid> 
      <description>When you get into page loading optimization, you will quickly find these «must-dos»: Combine your CSS and JavaScript files (respectively), minimize your CSS and JavaScript, load CSS before JS, load JS in body footer and then even some. Without much effort, we can make WordPress do all of this automatically.</description>
    </item>
    <item>
      <title>Make Gravity Forms&#39; JavaScript load in the footer</title>
      <link>https://bjornjohansen.com/load-gravity-forms-js-in-footer/</link>
      <pubDate>Thu, 19 Sep 2013 17:32:28 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:66356262-3663-5439-a639-353463613463</guid> 
      <description>Gravity Forms is not only THE way to create and manage forms in WordPress, but is also pretty awesome when it comes to extensibility and flexibility. However, as most software, it has its issues. One of those is how it outputs some of the JavaScript, which in certain cases will break your site. This is how to fix it.</description>
    </item>
    <item>
      <title>Why use WordPress as your corporate CMS?</title>
      <link>https://bjornjohansen.com/use-wordpress-corporate-cms/</link>
      <pubDate>Fri, 23 Aug 2013 15:42:20 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:64313861-3731-5634-b735-363535356565</guid> 
      <description>&lt;img loading=&#34;lazy&#34; src=&#34;https://www.bjornjohansen.com/content/uploads/2013/08/wordpress-300x186.png&#34; alt=&#34;WordPress&#34;  /&gt;
There are now several years since WordPress was considered a blog platform only. Today, it&amp;rsquo;s a full blown CMS and perfectly capable of powering corporate web sites. Here I provide you with 5 non-technical reasons why WordPress is well fit for a corporate CMS.</description>
    </item>
    <item>
      <title>Enabling SPDY with Nginx</title>
      <link>https://bjornjohansen.com/enabling-spdy-nginx/</link>
      <pubDate>Thu, 22 Aug 2013 20:50:20 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:63636230-3464-5563-a661-656165636538</guid> 
      <description>SPDY is this new, cool, fast protocol created by Google that &amp;ldquo;replaces&amp;rdquo; HTTP (the first draft of HTTP 2.0 is using SPDY as the working base). It is &lt;a href=&#34;http://caniuse.com/spdy&#34; title=&#34;Compatibility table for support of SPDY networking protocol in desktop and mobile browsers.&#34;&gt;supported in all the major browsers&lt;/a&gt; – yes, even Internet Explorer – with the exception of Apple&amp;rsquo;s Safari.</description>
    </item>
    <item>
      <title>Securing Nginx with HTTPS</title>
      <link>https://bjornjohansen.com/securing-nginx-ssl/</link>
      <pubDate>Thu, 22 Aug 2013 19:53:15 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:31313436-3262-5866-b731-393965366633</guid> 
      <description>&lt;img loading=&#34;lazy&#34; src=&#34;https://www.bjornjohansen.com/content/uploads/2013/08/origin_4146023669-150x150.jpg&#34; alt=&#34;SSL&#34;  /&gt;
Adding a certificate and using the HTTPS protocol is a good improvement to the security in the communication between the browser and the server, and should be in place on all sites that have a user login. Contrary to what many (older) guides say, it doesn&amp;rsquo;t add much load on your server and is fairy easy and cheap to set up right.</description>
    </item>
    <item>
      <title>Install latest version of Nginx on Ubuntu</title>
      <link>https://bjornjohansen.com/install-latest-version-of-nginx-on-ubuntu/</link>
      <pubDate>Fri, 16 Aug 2013 16:29:31 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:32656631-6565-5564-b933-633863303366</guid> 
      <description>&lt;img loading=&#34;lazy&#34; src=&#34;https://www.bjornjohansen.com/content/uploads/2013/08/nginx-300x64.png&#34; alt=&#34;Nginx&#34;  /&gt;
I always run the latest LTS version of Ubuntu on all my servers. Unfortunately, the Nginx versions tend to be quite the bit behind the current release. So how do you get an updated, current version of without resorting to having to maintain the packages yourself? Luckily, the Nginx team have their own Ubuntu apt repository so it’s easy to keep current with the latest version of Nginx.</description>
    </item>
    <item>
      <title>Install latest version of PHP on Ubuntu</title>
      <link>https://bjornjohansen.com/install-latest-versions-of-php-and-apache-on-ubuntu/</link>
      <pubDate>Fri, 16 Aug 2013 15:57:19 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:61353530-3031-5633-b438-326662656437</guid> 
      <description>&lt;img loading=&#34;lazy&#34; src=&#34;https://www.bjornjohansen.com/content/uploads/2013/08/php-logo-300x157.png&#34; alt=&#34;PHP&#34;  /&gt;
I always run the latest LTS version of Ubuntu on all my servers. Currently the latest LTS is 14.04 which comes with PHP version 5.5, but as of November 2014, the latest stable version is 5.6. So how do you get an updated, current version of PHP without resorting to having to maintain the packages yourself? The answer is in PPA.</description>
    </item>
    <item>
      <title>Publishing WordPress site from development to production server – or moving your WordPress installation from one host to another</title>
      <link>https://bjornjohansen.com/publishing-wordpress-site/</link>
      <pubDate>Mon, 12 Aug 2013 21:20:25 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:34616165-3766-5539-b631-396631393734</guid> 
      <description>&lt;img loading=&#34;lazy&#34; src=&#34;https://www.bjornjohansen.com/content/uploads/2013/08/wordpress-300x186.png&#34; alt=&#34;WordPress&#34;  /&gt;
You have finished that WordPress site, and want to deploy it – move it from your test server to the production server where it goes live. But how? WordPress have a famous 5-minute-install, but there is no 5-minute-go-live-script*. I&amp;rsquo;ll show you how in these 5 easy-to-follow steps.</description>
    </item>
    <item>
      <title>Restricting access to WordPress login by IP address</title>
      <link>https://bjornjohansen.com/restricting-access-to-wordpress-login-by-ip-address/</link>
      <pubDate>Sat, 20 Apr 2013 20:15:34 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:33306539-3032-5330-b562-623835343236</guid> 
      <description>If you have a static IP address, like from &lt;a href=&#34;https://www.bjornjohansen.com/setting-up-your-own-pptp-vpn&#34;&gt;your own VPN&lt;/a&gt;, it is very easy to increase your security tremendously. Simply restrict all logins to that IP address.</description>
    </item>
    <item>
      <title>Setting up your own PPTP VPN</title>
      <link>https://bjornjohansen.com/setting-up-your-own-pptp-vpn/</link>
      <pubDate>Sat, 20 Apr 2013 19:04:23 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:66333437-3135-5337-b562-393466663263</guid> 
      <description>When it comes to VPNs, there is the choice between PPTP and OpenVPN. PPTP is pretty quick to setup and works out of the box with most (all?) OSes and devices.</description>
    </item>
    <item>
      <title>Get your Ubuntu VPS up and running</title>
      <link>https://bjornjohansen.com/get-your-vps-up-and-running/</link>
      <pubDate>Sat, 20 Apr 2013 17:29:18 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:66313234-3034-5639-a130-623635393362</guid> 
      <description>&lt;img loading=&#34;lazy&#34; src=&#34;https://www.bjornjohansen.com/content/uploads/2013/04/ubuntu-300x148.png&#34; alt=&#34;Ubuntu&#34;  /&gt;
These are the first steps you should perform on your shiny, brand new VPS to set out on a safe journey on the internets. You don&amp;rsquo;t actually have to understand each of the steps here, but this post is intented for people who have some clue of what they&amp;rsquo;re doing. If there is such a thing as a «VPSes for dummies», it should not be read. VPSes are not intended for dummies.</description>
    </item>
    <item>
      <title>Caching: Varnish or Nginx?</title>
      <link>https://bjornjohansen.com/caching-varnish-or-nginx/</link>
      <pubDate>Fri, 12 Apr 2013 20:37:57 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:63636330-6461-5163-b365-333638366266</guid> 
      <description>TL;DR: Varnish lacks support for SSL and SPDY. Nginx handles it just fine, and has very fast cache with either memcache or disk storage (ramdisk). Both can serve stale cache if your backend is down. But Nginx can not write to the memcache storage directly, it has to be done by the application. Also, Nginx can not purge the cache itself, without you compiling your own package.</description>
    </item>
    <item>
      <title>Using Jekyll without YAML front matter</title>
      <link>https://bjornjohansen.com/using-jekyll-without-yaml-front-matter/</link>
      <pubDate>Thu, 28 Mar 2013 21:28:22 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:32393661-3164-5737-a138-306134613135</guid> 
      <description>OK, so I was ready to give Jekyll another shot today. But one thing I’m not that happy with is the need for specifying the YAML front matter on every post. At this point, I’m not really using it for any practical matter.</description>
    </item>
    <item>
      <title>About me</title>
      <link>https://bjornjohansen.com/about-me/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:32653264-3163-5731-b466-393635386135</guid> 
      <description>Hi there, I’m Bjørn Johansen. I grew up with C64, VHS, and Transformers.</description>
    </item>
  </channel>
</rss>
