<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><generator uri="https://jekyllrb.com/" version="3.8.7">Jekyll</generator><link href="https://www.philipbjorge.com/feed.xml" rel="self" type="application/atom+xml"/><link href="https://www.philipbjorge.com/" rel="alternate" type="text/html"/><updated>2024-02-16T02:35:24+00:00</updated><id>https://www.philipbjorge.com/feed.xml</id><title type="html">Philip Bjorge</title><subtitle>Read what I'm writing and See what I'm making</subtitle><author><name>Philip Bjorge</name></author><entry><title type="html">What’s next for Routable’s API?</title><link href="https://www.philipbjorge.com/2021/05/04/whats-next-for-routables-api/" rel="alternate" type="text/html" title="What’s next for Routable’s API?"/><published>2021-05-04T23:21:26+00:00</published><updated>2021-05-04T23:21:26+00:00</updated><id>https://www.philipbjorge.com/2021/05/04/routable-api</id><content type="html" xml:base="https://www.philipbjorge.com/2021/05/04/whats-next-for-routables-api/"><![CDATA[]]></content><author><name>Philip Bjorge</name></author><category term="OpenAPI"/><category term="Python"/><summary type="html"><![CDATA[]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.philipbjorge.com/assets/images/routable-openapi.png"/><media:content medium="image" url="https://www.philipbjorge.com/assets/images/routable-openapi.png" xmlns:media="http://search.yahoo.com/mrss/"/></entry><entry><title type="html">Tips for Using Uptime Checkers</title><link href="https://www.philipbjorge.com/2018/10/25/tips-for-using-uptime-checkers/" rel="alternate" type="text/html" title="Tips for Using Uptime Checkers"/><published>2018-10-25T00:00:00+00:00</published><updated>2018-10-25T00:00:00+00:00</updated><id>https://www.philipbjorge.com/2018/10/25/tips-for-using-uptime-checkers</id><content type="html" xml:base="https://www.philipbjorge.com/2018/10/25/tips-for-using-uptime-checkers/"><![CDATA[<p>In my <a href="/2018/10/21/minimum-viable-monitoring-for-developers/">last article</a>, I talked about uptime checkers being the bedrock of your monitoring stack. Over the years, I’ve picked up a few tips and tricks that can help you utilize these tools to their fullest. So without further ado, let’s check out some of my favorite ways to use uptime checkers.</p> <h2 id="use-keyword-checks">Use Keyword Checks</h2> <p>I <strong>always</strong> prefer using keyword checks over simple HTTP tests. The reason is simple: less false negatives. <em>Almost always</em>, there is some keyword or HTML snippet that should always be on the page, even if it’s as simple as a Terms of Service link or a page title.</p> <a href="/assets/resized/uptime-checker-tips-keywords-1600x997.png" target="_blank"> <img src="/assets/resized/uptime-checker-tips-keywords-1600x997.png" alt="Keyword Monitoring with Uptime Robot" srcset=" /assets/resized/uptime-checker-tips-keywords-480x299.png 480w, /assets/resized/uptime-checker-tips-keywords-800x499.png 800w, /assets/resized/uptime-checker-tips-keywords-1600x997.png 1600w, "> </a> <p>By using keyword checks, you can avoid a whole host of stupid errors that can cause your simple HTTP monitor to stay green when it should be telling you there is a problem. Things I’ve seen in production that keyword checks have identified and alerted me to:</p> <ul> <li>IIS returning 200 responses when it was showing exception pages</li> <li>Elasticsearch indices being broken, causing pages to render no results</li> <li>APIs being shipped with bugs and returning incorrect JSON responses</li> </ul> <p>Ideally, all of these things would have been caught in a staging environment or by developers/QA during testing. Sometimes that doesn’t happen and if there’s something wrong in production, it’s always better to know about it.</p> <h2 id="monitor-all-your-domain-variations">Monitor All Your Domain Variations</h2> <p>I’d recommend creating a monitor for all variants of your domain. For example, <code class="highlighter-rouge">http://</code>, <code class="highlighter-rouge">http://www.</code>, <code class="highlighter-rouge">https://</code> and <code class="highlighter-rouge">https://www.</code>. This can catch a few types of issues:</p> <ul> <li>DNS misconfiguration</li> <li>Reverse proxy misconfiguration</li> <li>SSL certificate problems</li> </ul> <p>One issue with this strategy is that these alerts can become a bit noisy if you have a full-scale outage that impacts all the domains. To handle that scenario, you can funnel your alerts into a platform like <a href="https://www.pagerduty.com/">PagerDuty</a> or <a href="https://www.opsgenie.com/">OpsGenie</a> and deduplicate or aggregate these alerts. If some of the alerts are less important (for instance, 99% of traffic comes through <code class="highlighter-rouge">https://www.</code>), you could always disable alerting on the other domains while still having visibility into their status when you visit your uptime checker.</p> <p>(Speaking of SSL certificate problems, you can use <a href="https://certificatemonitor.org/">this free service</a> to monitor your SSL certificate expiration for you and find out about any upcoming certificate expirations <strong>before</strong> you find out with your uptime checker.)</p> <h2 id="monitor-3rd-party-dependencies">Monitor 3rd-Party Dependencies</h2> <p>This isn’t something I’d necessarily recommend using extensively… After all, your service provider should be monitoring these heh. However, it can be still be useful in helping you gauge whether a service provider is living up to its SLA or your uptime requirements.</p> <p>At my last company, we were hit with an outage of a pretty critical reverse geocoding API we were using on one of our mapping pages. The first time this went out, we found out via our CEO… Not good. Setting up an alert on this API let us know that the service was having pretty consistent intermittent outages that were impacting our users and we were able to swap in a replacement that performed much better.</p> <h2 id="monitor-more-than-just-your-homepage">Monitor More Than Just Your Homepage</h2> <p>Finally, you should take advantage of the large number of monitors most services let you make.</p> <ul> <li>Monitor your public APIs to make sure that your meeting your SLAs.</li> <li>Monitor the pages that are most important to your visitors.</li> <li>Monitor your customer support pages to ensure those are always up and available.</li> </ul> <p>Your site is much more than just your homepage, so make sure to monitor all of it!</p> <h2 id="conclusion">Conclusion</h2> <p>Hopefully, you’ve found some of these tips enlightening and can apply them to the sites your responsible for so you can respond to outages sooner and get those 3 9s of reliability!</p> <p>Any thoughts? Did I miss something? <a href="mailto:philip@philipbjorge.com">Send me an email.</a></p> <div id="mc_embed_signup"> <h4>Level up your devops skills as fast as you can</h4> <p>Get bi-weekly emails about monitoring and bring your uptime to 99.999%!</p> <form action="https://philipbjorge.us6.list-manage.com/subscribe/post?u=04733bbbb250b5f90053c0c5a&amp;id=49d5e2c500" method="post" id="mc-embedded-subscribe-form" name="mc-embedded-subscribe-form" class="validate" target="_blank" novalidate=""> <div id="mc_embed_signup_scroll"> <div class="mc-field-group"> <label for="mce-FNAME">First Name </label><br/> <input type="text" value="" name="FNAME" class="required" id="mce-FNAME"/> </div> <div class="mc-field-group"> <label for="mce-EMAIL">Email Address </label><br/> <input type="email" value="" name="EMAIL" class="required email" id="mce-EMAIL"/> </div> <div id="mce-responses" class="clear"> <div class="response" id="mce-error-response" style="display:none"></div> <div class="response" id="mce-success-response" style="display:none"></div> </div> <div style="position: absolute; left: -5000px;" aria-hidden="true"><input type="text" name="b_04733bbbb250b5f90053c0c5a_49d5e2c500" tabindex="-1" value=""/></div> <div class="clear"><input type="submit" value="Subscribe" name="subscribe" id="mc-embedded-subscribe" class="button"/></div> </div> </form> <small>I respect your email privacy.</small> </div> ]]></content><author><name>Philip Bjorge</name></author><category term="writing"/><category term="devops"/><category term="monitoring"/><summary type="html"><![CDATA[In my last article, I talked about uptime checkers being the bedrock of your monitoring stack. Over the years, I’ve picked up a few tips and tricks that can help you utilize these tools to their fullest. So without further ado, let’s check out some of my favorite ways to use uptime checkers.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.philipbjorge.com/assets/images/uptime-checker-tips-header.png"/><media:content medium="image" url="https://www.philipbjorge.com/assets/images/uptime-checker-tips-header.png" xmlns:media="http://search.yahoo.com/mrss/"/></entry><entry><title type="html">Minimum Viable Monitoring for Developers</title><link href="https://www.philipbjorge.com/2018/10/21/minimum-viable-monitoring-for-developers/" rel="alternate" type="text/html" title="Minimum Viable Monitoring for Developers"/><published>2018-10-21T00:00:00+00:00</published><updated>2018-10-21T00:00:00+00:00</updated><id>https://www.philipbjorge.com/2018/10/21/minimum-viable-monitoring-for-developers</id><content type="html" xml:base="https://www.philipbjorge.com/2018/10/21/minimum-viable-monitoring-for-developers/"><![CDATA[<p>Have you taken over a web application that’s currently in flames? Or has your startup <em>finally</em> started gaining traction, but it’s struggling to handle the new load from customers? Even if you’re not experiencing problems now, there’s a good chance that implementing some basic monitoring will expose issues with your site that are impacting your users, your code’s correctness or your bottom line.</p> <p>If your sole experience has been doing development work, these can be particularly tough challenges to deal with… Operations is a big field with a huge set of tools that can take a while to get up to speed on. It doesn’t help that you might be having to learn about and implement these tools while under duress. You will probably have a lot of questions when you’re first getting started.</p> <ul> <li>What is worth monitoring?</li> <li>What tools are at my disposal?</li> <li>What problems do those tools help me solve?</li> <li>What should I add monitoring around first?</li> </ul> <p>I’m going to answer some of these questions below based on my experience operating <a href="https://www.leafly.com/">Leafly</a>, ranked <a href="https://www.alexa.com/siteinfo/leafly.com">1,112 on Alexa</a> at the time of writing and serving around 750 million requests per month when I was last working there.</p> <p><strong>This is for developers that need to get a <em>real quick</em> handle on operations.</strong></p> <h2 id="must-haves">Must-Haves</h2> <p>Below you’ll find the bare minimum monitoring solutions I’d suggest having in place, in order of what I think is most important to implement first in terms of bang for your buck. If you implement everything I talk about in this article, you should be done in under a day.</p> <p>Finally, one thing to keep in mind is that there is no “one size fits all” approach to monitoring. You will want the results of your monitoring to drive what you add monitoring to next. I’ll dive further into that topic in a future blog post.</p> <h3 id="uptime-monitoring">Uptime Monitoring</h3> <p>To start with, you’ll want to start using a good uptime-monitoring solution. These services are dead simple — they ping specific HTTP endpoints periodically from different locations around the world and report on whether they are up or not. I’m partial to <a href="https://www.pingdom.com/">Pingdom (Paid)</a>, but I’ve had good success with <a href="https://uptimerobot.com/">UptimeRobot (Freemium)</a> as well. It’s worth noting that some APMs (e.g., NewRelic) also offer this service if you’d like to keep your monitoring stack completely self-contained within a single tool.</p> <a href="/assets/resized/minimum-viable-monitoring-pingdom-800x452.png" target="_blank"> <img src="/assets/resized/minimum-viable-monitoring-pingdom-800x452.png" alt="Uptime Monitoring with Pingdom" srcset=" /assets/resized/minimum-viable-monitoring-pingdom-480x271.png 480w, /assets/resized/minimum-viable-monitoring-pingdom-800x452.png 800w, "> </a> <p>To use, simply add a list of endpoints to the service to track — for example, your homepage, sign up page and other critical pages of your app. If you are running multiple services and/or multiple domains, you’ll want to have checks on those too.</p> <p>You should be able to get good coverage of your services in under 10 minutes. As far as cost is concerned, these services are relatively cheap and often free — To start out with, you won’t be paying more than $10/month. These alerts are also fairly hard to screw up — False positives are <strong>extremely</strong> rare. If our uptime monitoring reported an issue… There was always an issue. Sometimes it was external (e.g., AWS CloudFront was down), but there was <strong>always</strong> customer impact.</p> <p>Because of the ease of setup, low price and “idiot-proof” nature of uptime monitoring, I’d <strong>always</strong> recommend setting up this type of monitoring first. It can tell you if your servers are overloaded, your deploys are really zero-downtime, critical third-party services are going down and more.</p> <h3 id="application-performance-monitoring">Application Performance Monitoring</h3> <p>The second most valuable piece of monitoring you can add to your applications are APM tools such as <a href="https://newrelic.com/products/application-monitoring">NewRelic</a> or <a href="https://scoutapp.com/">Scout</a>. Often times these tools also include uptime monitoring and exception monitoring baked in, making them a truly one-stop shop.</p> <a href="/assets/resized/minimum-viable-monitoring-newrelic-800x699.png" target="_blank"> <img src="/assets/resized/minimum-viable-monitoring-newrelic-800x699.png" alt="Application Performance Monitoring with NewRelic" srcset=" /assets/resized/minimum-viable-monitoring-newrelic-480x420.png 480w, /assets/resized/minimum-viable-monitoring-newrelic-800x699.png 800w, "> </a> <p>These tools usually work by adding a library and some configuration to your web application. So just like uptime monitoring, they are relatively low effort to add to your projects. APM solutions are usually free to start with, but the cost grows dramatically as you scale. Setting up meaningful alerts with these tools can also be tricky — you’ll likely have a lot of false positives as you gain experience with what these tools are telling you. The big win though that you will get instantly is <strong>deep, deep insight</strong> into your application that will help you guide your future monitoring and development efforts.</p> <p>APMs will help you determine what pages are slow and why. They can help with the following questions:</p> <ul> <li>Are these pages slowing down the rest of the site by hogging all your computing resources?</li> <li>Did your latest deploy introduce a large performance regression?</li> <li>Is the database is overloaded?</li> <li>Is a key third-party service is slow?</li> <li>Did your cache unexpectedly emptied?</li> </ul> <p>APMs will be the most valuable tool in your monitoring toolbox after you get past the somewhat steep learning curve and information overload. You will want to have this tool open during and after every deploy as well as when you are having outages or poor performance.</p> <h3 id="exception-monitoring">Exception Monitoring</h3> <p>Finally, the last piece of critical monitoring I’d ensure you have in place is exception monitoring. Many APM solutions include this, so it’s worth checking if you get it “for free” before adding in another tool. Even if your APM has something, depending on the volume of your exceptions (and quality of the APM), you might want to pull in a 3rd party to do this work for you anyway. I’ve had good experiences with <a href="https://rollbar.com/">Rollbar</a> and <a href="https://sentry.io/welcome/">Sentry</a> personally, but don’t stress too much about choice here. Most solutions are really similar, so just pick one.</p> <a href="/assets/resized/minimum-viable-monitoring-rollbar-800x583.png" target="_blank"> <img src="/assets/resized/minimum-viable-monitoring-rollbar-800x583.png" alt="Uptime Monitoring with RollBar" srcset=" /assets/resized/minimum-viable-monitoring-rollbar-480x350.png 480w, /assets/resized/minimum-viable-monitoring-rollbar-800x583.png 800w, "> </a> <p>Just like APMs, these are usually just library additions that hook into your application’s global exception handlers and log failures in your app to an external service. Exception monitoring can help with some of the following:</p> <ul> <li>Easily view and search stack traces for rapid root cause analysis.</li> <li>Grouping similar exceptions so you can understand the impact.</li> <li>Integrate with your bug tracking systems so you can triage and assign bugs to developers.</li> <li>Attach metadata to your exceptions so you can see for example which users are being impacted by failures.</li> </ul> <p>Exception monitoring is cheap or free at low volume and by and large, you <strong>always</strong> want to know when your application has an unhandled exception so the information is always valuable.</p> <p>There is a decent amount of overlap with what an APM can tell you (e.g., if your cache is down, you will probably get exceptions from your cache connector), but for digging into specific errors that your users are seeing it’s usually hard to beat a dedicated exception monitoring interface. Just like your APM, you will want this open during and after every deploy.</p> <h2 id="conclusion">Conclusion</h2> <p>Based on my experience running a fairly large website that was in a state of absolute disarray when we took over, these are the absolute critical pieces of monitoring infrastructure you cannot live without. There are a lot of other pieces to a successful monitoring solution that I’m planning to cover in future posts: meaningful alerting and what that means, incident management platforms, Slack-Ops and exploratory monitoring to name a few. Sign up for my mailing list if you are interested.</p> <p>Any thoughts? Did I miss something? <a href="mailto:philip@philipbjorge.com">Send me an email.</a></p> <div id="mc_embed_signup"> <h4>Level up your devops skills as fast as you can</h4> <p>Get bi-weekly emails about monitoring and bring your uptime to 99.999%!</p> <form action="https://philipbjorge.us6.list-manage.com/subscribe/post?u=04733bbbb250b5f90053c0c5a&amp;id=49d5e2c500" method="post" id="mc-embedded-subscribe-form" name="mc-embedded-subscribe-form" class="validate" target="_blank" novalidate=""> <div id="mc_embed_signup_scroll"> <div class="mc-field-group"> <label for="mce-FNAME">First Name </label><br/> <input type="text" value="" name="FNAME" class="required" id="mce-FNAME"/> </div> <div class="mc-field-group"> <label for="mce-EMAIL">Email Address </label><br/> <input type="email" value="" name="EMAIL" class="required email" id="mce-EMAIL"/> </div> <div id="mce-responses" class="clear"> <div class="response" id="mce-error-response" style="display:none"></div> <div class="response" id="mce-success-response" style="display:none"></div> </div> <div style="position: absolute; left: -5000px;" aria-hidden="true"><input type="text" name="b_04733bbbb250b5f90053c0c5a_49d5e2c500" tabindex="-1" value=""/></div> <div class="clear"><input type="submit" value="Subscribe" name="subscribe" id="mc-embedded-subscribe" class="button"/></div> </div> </form> <small>I respect your email privacy.</small> </div> ]]></content><author><name>Philip Bjorge</name></author><category term="writing"/><category term="devops"/><category term="monitoring"/><summary type="html"><![CDATA[Have you taken over a web application that’s currently in flames? Or has your startup finally started gaining traction, but it’s struggling to handle the new load from customers? Even if you’re not experiencing problems now, there’s a good chance that implementing some basic monitoring will expose issues with your site that are impacting your users, your code’s correctness or your bottom line.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.philipbjorge.com/assets/images/minimum-viable-monitoring-header.png"/><media:content medium="image" url="https://www.philipbjorge.com/assets/images/minimum-viable-monitoring-header.png" xmlns:media="http://search.yahoo.com/mrss/"/></entry><entry><title type="html">Pant Continuity (with ClothingArts Pick-Pocket Proof Pants)</title><link href="https://www.philipbjorge.com/2018/10/16/pant-continuity/" rel="alternate" type="text/html" title="Pant Continuity (with ClothingArts Pick-Pocket Proof Pants)"/><published>2018-10-16T00:00:00+00:00</published><updated>2018-10-16T00:00:00+00:00</updated><id>https://www.philipbjorge.com/2018/10/16/pant-continuity</id><content type="html" xml:base="https://www.philipbjorge.com/2018/10/16/pant-continuity/"><![CDATA[<p>Pant Continuity is a phrase I came up with on my most recent travels to describe the experience of traveling with my <a href="http://rwrd.io/ilrox7p">ClothingArts Pick-Pocket Proof Pants</a>. Pant Continuity arises naturally from traveling with a single pair of pants and storing all your important items in them, in the same place, all the time. It’s like a money belt, but better.</p> <p>While traveling through the UK and Balkans, I’ve kept on hand the following items:</p> <ul> <li>Keys and Wallet: Left pocket that is zipper and button secured</li> <li>Passport: Left pocket that is zipper, button and velcro secured pocket</li> <li>Phone and Handkerchief: Right pocket that is zipper secured</li> </ul> <a href="/assets/resized/pant-continuity-3-1600x2133.jpg" target="_blank"> <img style="max-height: 400px" align="right" src="/assets/resized/pant-continuity-3-1600x2133.jpg" alt="ClothingArts Pick-Pocket Proof Pants at Dunrobin Castle Scotland" srcset=" /assets/resized/pant-continuity-3-480x640.jpg 480w, /assets/resized/pant-continuity-3-800x1067.jpg 800w, /assets/resized/pant-continuity-3-1600x2133.jpg 1600w, "> </a> <p>The above is my perfect configuration for security and ease of access. With the exception of my keys and phone, all of the above items only leave my pockets when they are in use and they never change pockets.</p> <p>This has a bunch of small, but meaningful quality of life improvements. In the morning, I can just slip on my pants, unplug my phone, lock the door and I’m ready to go for the day. This was <strong>especially</strong> useful when we were living out of a van in the UK – I never lost anything to the crevasses of our tiny VW Caddy. When I’m at a border crossing, I always know where my passport is <em>and</em> that it’s safe and secure. Coins and keys are always kept away from my phone, keeping my screen scratch-free.</p> <p>You can certainly experience pant continuity with any pair of trousers – At the minimum, I’d probably recommend a pair of pants with zippers. But I think the <a href="http://rwrd.io/ilrox7p">ClothingArts pants</a> are probably the most ideally suited for it – The triple secure pockets put me at ease carrying my valuables around new cities. I don’t have to worry about my things falling out when I sit down or my valuables getting stolen by thieves. They can also hold quite a bit of stuff without getting bulky or disorganized.</p> <a href="/assets/resized/pant-continuity-2-1600x1200.jpg" target="_blank"> <img src="/assets/resized/pant-continuity-2-1600x1200.jpg" alt="ClothingArts Pick-Pocket Proof Pants in Podgorica Montenegro" srcset=" /assets/resized/pant-continuity-2-480x360.jpg 480w, /assets/resized/pant-continuity-2-800x600.jpg 800w, /assets/resized/pant-continuity-2-1600x1200.jpg 1600w, "> </a> <p>Long story short, I don’t worry about my things anymore. It’s markedly improved my traveling experience. I’d recommend any long-term traveler try out Pant Continuity to reduce their packing weight, simplify their lives and relieve your worries.</p>]]></content><author><name>Philip Bjorge</name></author><category term="traveling"/><category term="writing"/><summary type="html"><![CDATA[Pant Continuity is a phrase I came up with on my most recent travels to describe the experience of traveling with my ClothingArts Pick-Pocket Proof Pants. Pant Continuity arises naturally from traveling with a single pair of pants and storing all your important items in them, in the same place, all the time. It’s like a money belt, but better.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.philipbjorge.com/assets/images/pant-continuity-1.jpg"/><media:content medium="image" url="https://www.philipbjorge.com/assets/images/pant-continuity-1.jpg" xmlns:media="http://search.yahoo.com/mrss/"/></entry><entry><title type="html">Coming Soon: Appnouncements</title><link href="https://www.philipbjorge.com/2018/07/18/coming-soon-appnouncements/" rel="alternate" type="text/html" title="Coming Soon: Appnouncements"/><published>2018-07-18T00:00:00+00:00</published><updated>2018-07-18T00:00:00+00:00</updated><id>https://www.philipbjorge.com/2018/07/18/coming-soon-appnouncements</id><content type="html" xml:base="https://www.philipbjorge.com/2018/07/18/coming-soon-appnouncements/"><![CDATA[<p>I’m about to hit the big time! My very first SaaS <a href="https://www.appnouncements.com/?utm_source=philipbjorge&amp;utm_medium=blog&amp;utm_campaign=coming_soon">Appnouncements</a> will be launching in the next month or so… I’m putting the finishes touches on it as we speak (not the easiest thing to do while you’re traveling the world).</p> <a href="/assets/resized/appnouncements-android-framed-800x1480.png" target="_blank"> <img style="max-height: 400px" align="right" src="/assets/resized/appnouncements-android-framed-800x1480.png" alt="Appnouncements Android View" srcset=" /assets/resized/appnouncements-android-framed-480x888.png 480w, /assets/resized/appnouncements-android-framed-800x1480.png 800w, "> </a> <p>Appnouncements is aimed at making it as <em>easy as possible</em> for businesses to embed beautiful release notes right inside their app. Every mobile app I’ve ever worked on has needed this feature over the course of its development – After all, if none of your users know you’ve released a feature or fixed important bugs, what was the point? That being said, it was still difficult to prioritize it in between more pressing work. After my launch, there will be no excuse for that again 😊.</p> <p>It has been a blast developing it over the past few months and I’m excited to talk about it more on here before and after launch whether it’s a success or failure!</p> <a href="/assets/resized/appnouncements-release-edit-1600x951.png" target="_blank"> <img src="/assets/resized/appnouncements-release-edit-1600x951.png" alt="Appnouncements Release Edit Screen" srcset=" /assets/resized/appnouncements-release-edit-480x285.png 480w, /assets/resized/appnouncements-release-edit-800x475.png 800w, /assets/resized/appnouncements-release-edit-1600x951.png 1600w, "> </a> <h2 id="look-interesting">Look interesting?</h2> <p>If this looks interesting to you, <strong><a href="https://www.appnouncements.com/?utm_source=philipbjorge&amp;utm_medium=blog&amp;utm_campaign=coming_soon">visit Appnouncements</a></strong> and sign up for the mailing list to find out when it launches. Also, feel free to contact me directly via email or LinkedIn to ask about early access, coupons or just to talk about your needs.</p>]]></content><author><name>Philip Bjorge</name></author><category term="saas"/><category term="portfolio"/><summary type="html"><![CDATA[I’m about to hit the big time! My very first SaaS Appnouncements will be launching in the next month or so… I’m putting the finishes touches on it as we speak (not the easiest thing to do while you’re traveling the world).]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.philipbjorge.com/assets/images/appnouncements-icon-left-font.png"/><media:content medium="image" url="https://www.philipbjorge.com/assets/images/appnouncements-icon-left-font.png" xmlns:media="http://search.yahoo.com/mrss/"/></entry><entry><title type="html">Where did my keys go?</title><link href="https://www.philipbjorge.com/2015/02/25/where-did-my-keys-go/" rel="alternate" type="text/html" title="Where did my keys go?"/><published>2015-02-25T06:18:09+00:00</published><updated>2015-02-25T06:18:09+00:00</updated><id>https://www.philipbjorge.com/2015/02/25/where-did-my-keys-go</id><content type="html" xml:base="https://www.philipbjorge.com/2015/02/25/where-did-my-keys-go/"><![CDATA[]]></content><author><name>Philip Bjorge</name></author><category term="pgp"/><category term="ssh"/><category term="writing"/><summary type="html"><![CDATA[]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.philipbjorge.com/assets/images/legacy/PocketBand-800x468.jpg"/><media:content medium="image" url="https://www.philipbjorge.com/assets/images/legacy/PocketBand-800x468.jpg" xmlns:media="http://search.yahoo.com/mrss/"/></entry><entry><title type="html">Greenly for Windows Phone</title><link href="https://www.philipbjorge.com/2014/12/01/greenly-for-windows-phone/" rel="alternate" type="text/html" title="Greenly for Windows Phone"/><published>2014-12-01T06:18:33+00:00</published><updated>2014-12-01T06:18:33+00:00</updated><id>https://www.philipbjorge.com/2014/12/01/greenly-for-windows-phone</id><content type="html" xml:base="https://www.philipbjorge.com/2014/12/01/greenly-for-windows-phone/"><![CDATA[]]></content><author><name>Philip Bjorge</name></author><category term="CSharp"/><category term="portfolio"/><category term="Windows Phone"/><category term="XAML"/><summary type="html"><![CDATA[]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.philipbjorge.com/assets/images/legacy/GreenlyHeroResized-1.jpg"/><media:content medium="image" url="https://www.philipbjorge.com/assets/images/legacy/GreenlyHeroResized-1.jpg" xmlns:media="http://search.yahoo.com/mrss/"/></entry><entry><title type="html">WWW13 Highlights</title><link href="https://www.philipbjorge.com/2013/06/03/www13-highlights/" rel="alternate" type="text/html" title="WWW13 Highlights"/><published>2013-06-03T01:00:37+00:00</published><updated>2013-06-03T01:00:37+00:00</updated><id>https://www.philipbjorge.com/2013/06/03/www13-highlights</id><content type="html" xml:base="https://www.philipbjorge.com/2013/06/03/www13-highlights/"><![CDATA[]]></content><author><name>Philip Bjorge</name></author><category term="conference"/><category term="writing"/><summary type="html"><![CDATA[]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.philipbjorge.com/assets/images/legacy/collage_done.jpg"/><media:content medium="image" url="https://www.philipbjorge.com/assets/images/legacy/collage_done.jpg" xmlns:media="http://search.yahoo.com/mrss/"/></entry><entry><title type="html">Broadcom and Internet Explorer Raised Me</title><link href="https://www.philipbjorge.com/2013/04/25/broadcom-and-internet-explorer-raised-me/" rel="alternate" type="text/html" title="Broadcom and Internet Explorer Raised Me"/><published>2013-04-25T10:59:52+00:00</published><updated>2013-04-25T10:59:52+00:00</updated><id>https://www.philipbjorge.com/2013/04/25/broadcom-and-internet-explorer-raised-me</id><content type="html" xml:base="https://www.philipbjorge.com/2013/04/25/broadcom-and-internet-explorer-raised-me/"><![CDATA[]]></content><author><name>Philip Bjorge</name></author><category term="history"/><category term="searching"/><category term="writing"/><summary type="html"><![CDATA[]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.philipbjorge.com/assets/images/legacy/broadcom_ie.jpg"/><media:content medium="image" url="https://www.philipbjorge.com/assets/images/legacy/broadcom_ie.jpg" xmlns:media="http://search.yahoo.com/mrss/"/></entry><entry><title type="html">Dear Amazon, Add Stylus Support</title><link href="https://www.philipbjorge.com/2013/04/12/dear-amazon-add-stylus-support/" rel="alternate" type="text/html" title="Dear Amazon, Add Stylus Support"/><published>2013-04-12T22:01:12+00:00</published><updated>2013-04-12T22:01:12+00:00</updated><id>https://www.philipbjorge.com/2013/04/12/dear-amazon-add-stylus-support</id><content type="html" xml:base="https://www.philipbjorge.com/2013/04/12/dear-amazon-add-stylus-support/"><![CDATA[]]></content><author><name>Philip Bjorge</name></author><category term="dalvik"/><category term="disassembly"/><category term="Java"/><category term="portfolio"/><category term="smali"/><summary type="html"><![CDATA[]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.philipbjorge.com/assets/images/legacy/dearamazon.jpg"/><media:content medium="image" url="https://www.philipbjorge.com/assets/images/legacy/dearamazon.jpg" xmlns:media="http://search.yahoo.com/mrss/"/></entry></feed>