<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Musings of Jacob Thomason</title>
  
  <subtitle>This is my blog. Ignore the rands, comment on opinions, and enjoy the rest.</subtitle>
  <link href="https://jacobt.com/atom.xml" rel="self"/>
  
  <link href="https://jacobt.com/"/>
  <updated>2017-05-26T06:29:01.000Z</updated>
  <id>https://jacobt.com/</id>
  
  <author>
    <name>Jacob Thomason</name>
    
  </author>
  
  <generator uri="https://hexo.io/">Hexo</generator>
  
  <entry>
    <title>Governance Models in Crypto</title>
    <link href="https://jacobt.com/governance-models-in-cypto/"/>
    <id>https://jacobt.com/governance-models-in-cypto/</id>
    <published>2017-05-26T05:00:00.000Z</published>
    <updated>2017-05-26T06:29:01.000Z</updated>
    
    <content type="html"><![CDATA[<p>Recently we’ve seen a massive surge in investor and industry interest in the crypto/blockchain space.  For those of us that have been around for a while, this isn’t too surprising.  It’s been expected for some time now.  Maybe not this soon, or with this much stamina, but the technology and it’s ability to change the way applications are developed, information is stored and accessed, resources are shared, and the overall decentralization these systems make possible, is beyond clear.  The future is bright, but we have a pressing issue that must be addressed.</p><span id="more"></span><h2 id="Bitcoin’s-block-times"><a href="#Bitcoin’s-block-times" class="headerlink" title="Bitcoin’s block times"></a>Bitcoin’s block times</h2><p>Just this week Bitcoin has reached a consensus in regards to the scaling issues it’s been experiencing.  This isn’t something that hasn’t been foreseen for quite some time, nearly 2 years actually.  The issue is a bit complex and I don’t wish to dig into all the details.  If you’re interested, you can <a href="https://cointelegraph.com/news/bitcoin-scaling-consensus-reached-commentary-from-industry-leaders">read more about it</a>.  However, to give this article some groundwork, I’ll recap the primary issue.</p><p>In recent months, the number of unconfirmed transactions on Bitcoin’s blockchain have skyrocketed.  That’s the number of transactions that have been placed on blockchain that have not been confirmed by miners.  The reason this has happened is because there are a limited number of transactions that can fit into a 10 minute block.  Only the transactions paying the highest fees are getting confirmed in a reasonable amount of time.  There are multiple solutions that have been presented to address this issue.  However, like any ecosystem, changes don’t come without compromise - this isn’t any exception.  The consensus reached this week will increase the blocksize to 2MB.  That’s great, this will allow for more transactions to be processed within a 10 minute block time.</p><p>Now, you may be asking yourself, why would this be an issue.  Well, in order for people to get Bitcoin transactions processed in a reasonable amount of time, people were paying higher transaction fees.  The result of this was massive profits for miners.  An increased block size will decrease the amount of profits miners will see, initially, since it would essentially increase throughput, thereby decreasing the transaction fee required to get a transaction confirmed within a reasonsable amount of time.</p><p>This issue and the lack of a consensus to date has led to a lot of uncertainty surrounding Bitcoin.  You may not have realized it, especially given the growth Bitcoin has seen in recent weeks.  However, it’s been there and evident.</p><h2 id="Ethereum’s-Casper-algorithm"><a href="#Ethereum’s-Casper-algorithm" class="headerlink" title="Ethereum’s Casper algorithm"></a>Ethereum’s Casper algorithm</h2><p>Let’s talk about another blockchain mainstay, Ethereum.  Ethereum is facing similar uncertainty at the moment that’s currently damaging it’s position.  This can be seen through Ethereum Classic’s recent increase in demand.  The issue with Ethereum is similar in some ways, but actually quite different.  Ethereum is also facing scaling issues, especially looking to the future, and a lot of talk has been had about this issue.  The Ethereum team has a working solution to this problem in the form of <a href="https://github.com/ethereum/wiki/wiki/Proof-of-Stake-FAQ">POS (proof of stake)</a> with their <a href="http://www.coindesk.com/ethereum-casper-proof-stake-rewrite-rules-blockchain/">Casper algorithm</a>.  </p><p>Ethereum is currently a <a href="http://nakamotoinstitute.org/mempool/the-proof-of-work-concept/">POW (proof of work)</a> consensus blockchain.  The difference between POS and POW is, tied to how transactions reach consensus.  Again, the issue lies with the current network’s miners.  With POW, miners are currently netting 15x their daily mining overhead.  Why would they want to give up these profits with a POS consensus?  POS solves the scaling issue, but severely hurts mining profits, favoring stake holders - those that hold more ETH as a validator.</p><p>As a result of this inevitable move, the miners of Ethereum, are putting up a fight.  This could lead to another phantom Ethereum chain, or the resurgence of the Ethereum Classic chain.  Regardless of what happens here, we’re just creating more fragmentation and confusion in the ecosystem.  Keeping up with these forks and variations is difficult and complex - impossiblef for some.</p><p>I’m not going to go into the economics and game theory of POS and how this is going to bring in major institutional capital, in a potentially unhealthy way, that damages the overall distributed nature and consensus model.  This is far too speculative and complex of a topic for this article, but very much an interest of mine - maybe another article.</p><h2 id="The-politics-behind-it-all"><a href="#The-politics-behind-it-all" class="headerlink" title="The politics behind it all"></a>The politics behind it all</h2><p>All of this is said to draw light to an underlying issue within the greater blockchain ecosystem.  There have been countless other examples of these types of issues with other blockchains.  However, they haven’t been in the lime light as much and haven’t had the impact on the greater blockchain ecosystem as these have.  There will be more of these in the months and years to come.  Additionally, I feel the apex of one of these issues will present the first real setback the blockchain ecosystem will see.  The kind of setback that will have people second guessing the viability of blockchains as mainstream solutions to our current centralization challenges.</p><p>You see, when issues arrise, you have two camps that disagree on the direction forward.  In the end, the two camps either split ways, or there is a consensus.</p><p>In the case of splitting ways, you have fragmentation of the ecossytem, general uncertainty, less focused resources and overall confusion.</p><p>In the case of a consensus, buy-in is generally fairly political and involves the major players.  In the case of Bitcoin’s recent consensus to move to a 2MB block size, the decision came after gathering the support of, some, 80% of the network’s hashing power.  This 80% comes from a very small number of entities.  It’s already bad enough that 80% of the network’s hashing power comes from so few entities.  But, even worse, is the ability of these entities to dictate the direction and decisions for the network.</p><p>Blockchains, distributed trustless consensus ledgers, were designed to break free from the types of influence/power a select minority of entites and individuals had over currencies and assets, both through verification and politics.  This was one of the main designing principals.  There are many other benefits as well, but this is what gave rise to blockchain popularity.</p><p>The issue that we face today and will see much more of in the future, isn’t much different from the issues we have in any typical democratic government.  Many discussions have been had about this and governance in general.  There are various DOAs (Decentralized Autonomous Organizations) currently trying to address this issue through programmatic and interventive means.  Whether or not any of these projects prove to be successful in discovering a solution to true democratic consensus is to be seen.  I have my doubts.</p><p>Personally, I don’t really wish to promote or advocate for a DAO, or DAO like implementations on top of current blockchains, especially those we have today.  What I do wish to bring attention to, is the need for a general governance model built into any new or existing blockchain.</p><h2 id="The-governance-model"><a href="#The-governance-model" class="headerlink" title="The governance model"></a>The governance model</h2><p>What this means is, any new or existing blockchain, including Ethereum and Bitcoin, need to develop, in the general sense, an agreement, processes and plans for resolving these issues that allow for consensus to be achieved through a clearly stated process.  This process should be dependent on the blockchain and it’s own unique ecosystem requirements.  By doing so, users and participants of a blockchain are agreeing before hand to be a part of an ecosystem with a governance model designed to resolve any future issues.</p><p>Without this, we’re subject to the current state of political jockeying and power plays where a select minority of individuals and entities call the shots, generally in their best interest.  And where consensus isn’t able to be reached, forks happen, fragmenting the ecosystem and delivering uncertainty.</p><p>A governance model, not only addresses how to handle these issues, but also lays a foundation that provides comfort for participants, even when a decision is made that they do not necessary agree.  Therefore, it’s in the best interest of all blockchains to implement these processes, so as to avoid fragmentation, uncertainty, and overall blockchain distrust.</p><p>It doesn’t have to be overly complex or difficult.  In fact, it should be very clearly understood and promoted, almost like an “about us” page for a company website.  It should lay out the processes and proceedures for resolving any conflicts that might arise within an ecosystem.  Every ecosystem is going to be different, as will the requirements.  It could be as simple as pro-rata based voting, or a model like <a href="https://steemit.com/~witnesses">Steem’s witness elections</a>.  Regardless of the approach taken, all blockchains should be held responsible for providing this clarity.</p>]]></content>
    
    
    <summary type="html">&lt;p&gt;Recently we’ve seen a massive surge in investor and industry interest in the crypto/blockchain space.  For those of us that have been around for a while, this isn’t too surprising.  It’s been expected for some time now.  Maybe not this soon, or with this much stamina, but the technology and it’s ability to change the way applications are developed, information is stored and accessed, resources are shared, and the overall decentralization these systems make possible, is beyond clear.  The future is bright, but we have a pressing issue that must be addressed.&lt;/p&gt;</summary>
    
    
    
    
    <category term="cryptocurrency, bitcoin, ethereum, steem, blockchain, governance, consensus" scheme="https://jacobt.com/tags/cryptocurrency-bitcoin-ethereum-steem-blockchain-governance-consensus/"/>
    
  </entry>
  
  <entry>
    <title>Away from Wordpress</title>
    <link href="https://jacobt.com/away-from-wordpress/"/>
    <id>https://jacobt.com/away-from-wordpress/</id>
    <published>2016-07-04T10:36:57.000Z</published>
    <updated>2016-07-04T09:55:10.000Z</updated>
    
    <content type="html"><![CDATA[<p>I’ve been searching for a hassle free, full control, solution for this blog for years.  I’ve made the jump from Wordpress to Tumblr, back to Wordpress and I know there was another in there I’m forgetting.  That’s all after the static versions prior, back when you needed your own webserver or shared hosting account to deliver it.  </p><span id="more"></span><p>I originally moved to Wordpress because of the flexibility and simplicity of getting up and running.  The benefits are all pretty clear.  However, the thing that always irked me was the hosting requirement.  Having run a hosting company previously, and wanting to have the ability to fix issues as they arise, should that become necessary, I couldn’t bring myself to use shared hosting, despite doing it at one point.  Because of that, I was left with no other option than to maintain my own server, a VPS, EC2 instance to be exact.  I’ve been doing that for at least a few years now.  It’s been mostly hassle free, but just having it and knowing I’m going to have to deal with it sometimes is enough of an annoyance.</p><p>That’s why I’ve made the leap away from Wordpress and to a static site.  I’m using <a href="https://hexo.io/">Hexo</a>, a Node.js driven static site generator.  I’m still learning some things, but overall it’s been pretty good, flexible enough and simple enough.  I wanted something written in Javascript for a number of reasons that I won’t get into here, but Hexo seems to fit the bill quite well.</p><p>And that’s about enough for this first post.  I still have to migrate over all my old content and reason with the site design a bit more.  Hopefully I can find the time to do all this soon. :)</p>]]></content>
    
    
    <summary type="html">&lt;p&gt;I’ve been searching for a hassle free, full control, solution for this blog for years.  I’ve made the jump from Wordpress to Tumblr, back to Wordpress and I know there was another in there I’m forgetting.  That’s all after the static versions prior, back when you needed your own webserver or shared hosting account to deliver it.  &lt;/p&gt;</summary>
    
    
    
    
    <category term="wordpress, hexo, node.js, static site" scheme="https://jacobt.com/tags/wordpress-hexo-node-js-static-site/"/>
    
  </entry>
  
  <entry>
    <title>The TPP will kill your Job - so will Time!</title>
    <link href="https://jacobt.com/the-tpp-will-kill-your-job-so-will-time/"/>
    <id>https://jacobt.com/the-tpp-will-kill-your-job-so-will-time/</id>
    <published>2015-06-13T17:16:55.000Z</published>
    <updated>2016-07-05T19:01:10.000Z</updated>
    
    <content type="html"><![CDATA[<p>I don’t write many political articles.  It’s not that I don’t have an opinion on the matters, or feel that my opinions don’t hold weight - they do.  It’s just that the topics are always so hotly filled with puerile pedagoguery that I refuse to succumb.</p><p>That said, I want to talk about TPP, the Trans-Pacific Partnership.</p><p>Firstly, I don’t agree with Obama on many issues.  I don’t really need to go into all the ones he’s made and positions with which he’s stood, for which I disagree, but they’re often and many.  Despite that, Obama’s stance on TPP and the fast-track need is the first time I’ve truly felt that he’s left his idealism behind, researched and consulted and made a very tough and bold stance.</p><span id="more"></span><p>Now, you could say he’s made many tough and bold stances before, and you would be correct in that argument.  However, he’s never really made a stance where the majority of the Democratic party and his own caucus disagree.  And, for that, I applaud him, and respect him as president much more.  That’s not an easy thing to do and the way he’s gone about the TPP shows serious maturity.</p><p>So, about TPP.  It’s going to kill your job!  Sound the alarm!  The sky is going to fall!</p><img class="aligncenter size-full wp-image-265" src="https://cdn.jacobt.com/images/2015/06/Sky-is-falling-news-headline.jpg" alt="The Sky is Falling" width="424" height="283" /><p>It is actually going to kill your job though.  Really, it will.  But that’s okay.  Yep, that’s okay.  It’s not okay in that, you need to lose your job and all is going to be peaches and roses, okay.  It’s okay in that, we’ll still move forward as a country, and you’ll come along as well.</p><p>If you’ve been watching things closely, you’ll know that the <a href="http://www.zerohedge.com/news/2015-06-12/house-kills-obamas-tpp-bill-after-pelosi-led-democrat-rebellion">house just struck down</a> the proposed “Trade Adjustment Assistance” bill.  The purpose of this bill was to provide assistance for you because you’re going to lose your job.  Spearheaded by Nancy Peloci, house democrats defeated the bill with an astonishing 126-302 vote.</p><blockquote>Its defeat is the only way we will be able to slow down fast track... [and] ...people would rather have a job than assistance</blockquote><p>Why would a president intentionally put forward a bill that’s going to kill your job and then take tax payer’s hard earned dollars and start handing it out to you as pity money?  How does that make sense?</p><p>Well, it makes sense in a very real and very scary way.  You just have to actually think a little harder and actually consult and research the topic.  You also have to have some foresight and a desire to want America to remain the most prosperous country on the planet.  You’ll still lose your job though!</p><p>Even though you’re going to lose your job and get a pity check in the mail, you’re going to be better off.  Why?  Not because socialism is amazing.  And yes, it’s absolutely a step towards socialism.  But, because you’re going to lose your job anyway.  So why not at least get a check?!</p><p>TPP is all about China!  Here is the skinny.</p><p>It shouldn’t come as a surprise to you that much of Asia is poised for tremendous growth over the coming decades.  And, when I say tremendous, I mean tremendous.  There are over <a href="https://en.wikipedia.org/wiki/Asia">10x as many people in Asia</a> as there are in the US.  So, the growth that the US has seen in the past decades, multiply this many many times over.  That’s big, it’s happening and it’s happening with or without the US.</p><p>The reason TPP is all about China is because, if the US doesn’t create a free trade deal with all of the countries in Asia to capitalize on this tremendous growth, China will.  China is already geographically and industrially poised to capitalize on this growth, and without a free trade deal with the US, most US companies won’t be able to compete and will lose out on one of the biggest economic opportunities of our lifetime.</p><p>Someone has to supply these developing countries with all the supplies needed for their rapid expansion.  This is everything from nuclear power expertise and products to airplanes, cars, and software.  If the US isn’t able to compete by supplying these needed products and services, China will.</p><p>Not only is that lost opportunity that would convert to massive tax revenue for the US from company profits, but it also means that China will be able to improve their industries within the market segments that are the most profitable and valuable - the highly specialized markets.  Then, years after they’ve been able to do this, the US is stuck trying to compete with China, not only on manufacturing as we’re doing today, but also on the highly specialized products and services we dominate today.  This would leave the US struggling to remain the most prosperous country in the world, as we compete constantly for trade around the world - not just in Asia.</p><p>The depth of all this goes much deeper.  I didn’t even mention the allied axis advantages that could be created from trade partnerships like this.  If TPP doesn’t happen and China becomes the major partner for all of Asia, there is a strength created there that the US wouldn’t be able to break.  China hasn’t exactly been the largest supporter of free speech and human rights either.  From a US and humanity perspective, that’s not a powerhouse alliance desired to be seen.</p><p>However, if it does happen, and China gains more specialized industry on top of improved manufacturing, the company you’re working for now with your precious job, isn’t going to be able to pay you nearly what you’re making today, they’ll be competing in an entirely different world.  You’ll lose your job!</p><p>So, why not play ball?!  Let’s continue to <span style="text-decoration: underline;">own</span> the profitable expertise industries and manufacturing, the companies that generate the lion’s share of profits, and reap the rewards as a country.  You’ll lose your job, our powerhouse companies will make mega profits, pay mega taxes, and as a country we’ll be mega wealthy.  In the meantime, you can take that pity check and buy yourself a piece of ownership in these powerhouse companies, or you can sit back and wait to lose your job and cry about it later!</p><p><strong>UPDATE - Jun 13, 2015</strong>:</p><p>The Whitehouse and Obama just released a new “Weekly Address”, urging for support on the new trade bill.  There are certainly some pieces in there to try and appeal to his base, but the message is clear and on point.</p><iframe width="560" height="315" src="https://www.youtube.com/embed/o7PsmznMhHU" frameborder="0" allowfullscreen></iframe>]]></content>
    
    
    <summary type="html">&lt;p&gt;I don’t write many political articles.  It’s not that I don’t have an opinion on the matters, or feel that my opinions don’t hold weight - they do.  It’s just that the topics are always so hotly filled with puerile pedagoguery that I refuse to succumb.&lt;/p&gt;
&lt;p&gt;That said, I want to talk about TPP, the Trans-Pacific Partnership.&lt;/p&gt;
&lt;p&gt;Firstly, I don’t agree with Obama on many issues.  I don’t really need to go into all the ones he’s made and positions with which he’s stood, for which I disagree, but they’re often and many.  Despite that, Obama’s stance on TPP and the fast-track need is the first time I’ve truly felt that he’s left his idealism behind, researched and consulted and made a very tough and bold stance.&lt;/p&gt;</summary>
    
    
    
    
  </entry>
  
  <entry>
    <title>Maybe there is Something to this Gluten-free Craze?</title>
    <link href="https://jacobt.com/maybe-there-is-something-to-this-gluten-free-craze/"/>
    <id>https://jacobt.com/maybe-there-is-something-to-this-gluten-free-craze/</id>
    <published>2014-11-20T08:50:23.000Z</published>
    <updated>2016-07-05T02:03:19.000Z</updated>
    
    <content type="html"><![CDATA[<p>Personally, I thought this gluten-free craze was just another pile of garbage.  Recently though, I’ve started noticing a correlation between being bloated and the amount of bread I’ve consumed.  I’m not quite sure if this correlation is accurate, I’m still A/B testing it.  However, <a href="http://www.thehealthyhomeeconomist.com/real-reason-for-toxic-wheat-its-not-gluten/">this article’s explanation</a> of how glyphosate, the active ingredient in Roundup, which is used during a pre-harvest of wheat, has been shown to decrease the amount of positive probiotics.  This would also explain, not only the <a href="http://www1.agric.gov.ab.ca/$department/deptdocs.nsf/all/sis14591">nation’s newer craze for yogurt</a>, but also why, when I consume yogurt on a daily basis, I don’t have issues with bloat.</p><span id="more"></span><p>I’m honestly not on the gluten train yet and not sure I will be, but this has now become much more top of mind for me as the results are certainly not pleasant.  I’d like more info/research/data on this.</p>]]></content>
    
    
    <summary type="html">&lt;p&gt;Personally, I thought this gluten-free craze was just another pile of garbage.  Recently though, I’ve started noticing a correlation between being bloated and the amount of bread I’ve consumed.  I’m not quite sure if this correlation is accurate, I’m still A/B testing it.  However, &lt;a href=&quot;http://www.thehealthyhomeeconomist.com/real-reason-for-toxic-wheat-its-not-gluten/&quot;&gt;this article’s explanation&lt;/a&gt; of how glyphosate, the active ingredient in Roundup, which is used during a pre-harvest of wheat, has been shown to decrease the amount of positive probiotics.  This would also explain, not only the &lt;a href=&quot;http://www1.agric.gov.ab.ca/$department/deptdocs.nsf/all/sis14591&quot;&gt;nation’s newer craze for yogurt&lt;/a&gt;, but also why, when I consume yogurt on a daily basis, I don’t have issues with bloat.&lt;/p&gt;</summary>
    
    
    
    
  </entry>
  
  <entry>
    <title>Hello Foxy, how you doin?</title>
    <link href="https://jacobt.com/switch-to-firefox-developer-edition/"/>
    <id>https://jacobt.com/switch-to-firefox-developer-edition/</id>
    <published>2014-11-14T15:07:14.000Z</published>
    <updated>2016-07-05T19:01:10.000Z</updated>
    
    <content type="html"><![CDATA[<p>[See <a href="#update1">Update 1</a>, <a href="#update2">Update 2</a>, <a href="#update3">Update 3</a>]</p><p>It’s been a while, about 4 years - give or take, since I’ve invited Foxy back into my daily computing life.  I began using Firefox sometime before their <a href="https://blog.mozilla.org/press/2004/12/mozilla-foundation-places-two-page-advocacy-ad-in-the-new-york-times/">famous 2 full-page ad</a> in 2004.  That put me with using Firefox for about 6 years before abandoning it in favor of Chrome.</p><p><a href="https://cdn.jacobt.com/images/2014/11/nyt_ad_2004.png"><img class="aligncenter wp-image-208 size-full" src="https://cdn.jacobt.com/images/2014/11/nyt_ad_2004.png" alt="nyt_ad_2004" width="552" height="434" /></a>The original reason for my departure from Firefox came down to understandable bloat.  As Firefox began to mature over those 6 years, they added some necessary and amazing functionality to their new trailblazing browser.  Firefox had best-in-class developer tools and a clean user interface, they subscribed to W3C standards support and were firmly focused on earning users’ continued use.  It wasn’t that, when I dropped Firefox around 2010, it wasn’t a nice browser and they’d changed the ethos that’d initially drawn me to .  It was more of a growing pains scenario that any software product is going to face during such a heavy feature implementation phase.  To be honest, I stuck with Firefox much longer than many other colleagues at the time.  And, this was mostly because of the developer tools and how they’d fit into my workflow.</p><span id="more"></span>It was somewhere in late 2010, after about a year and a half of Chrome being released and hearing from so many colleagues how the independent process engine for Chrome had changed their life, that, after a bout with Firefox crashing, I decided to give Chrome a serious go.<p>Switching to Chrome, at that time, was a liberating experience.  Remember that Flash was still very heavily used around 2010, and was the culprit more times than not to a browser slowing down and/or crashing.  Moving to Chrome, I no longer had to worry about the entire browser crashing because some kid wrote a bad flash app, causing me to lose all my tabs and completely “brake” my workflow.  Chrome also came with a clean UI that took a fresh approach to the modern browser - that universal address bar and unified application view (no top bar for close, minimize, maximize icons).  The real kicker though that kept me on Chrome was the speed increase.  It certainly didn’t hurt that the entire browser didn’t crash once a day, but that speed was the big sell.</p><p>It took me a while to get use to Chrome’s developer tools.  I certainly yearned for Firefox’s CSS inspection, it blew Chrome’s out of the water.  However, the Javascript inspection and network analysis tools of Chrome opened my mind to what it was everyone had been raving.  Firefox really couldn’t hold a match to these tools.  I certainly would credit Chrome’s Javascript inspection tools for accelerating the inevitable growth of the UI as we know it today.  Without these tools, developing highly complex Javascript frontend applications is extremely challenging.  And so, I’ve stuck with Chrome ever since.</p><p>As of the last year or so, I’ve been hearing more people talk about switching to Firefox.  “Firefox is a lot faster”, they’d say.  I just chalked that up to them being Firefox fanboys, Linux users, or “Google is evil” believers.  “It’s unfounded” I’d tell myself.  Then I’d pull out my version of Firefox and load a few sites, proving to myself that was correct.  “Yep, it’s still the same bloated Firefox, although they’ve made a few smaller improvements with the UI finally”, I’d conclude before getting back to work.</p><p>Just the other day, Firefox released a whole new browser version focused at developers, Firefox Developer Edition.  It’s a smart move, going back to their roots and looking at the history of browser success.  Gaining the devoted use of developers is a surefire way to gain market-share, something Firefox desperately needs in the dichotomic desktop ecosystem.  Developers are not only a highly-trusted resource of tech information for those around them, which leads to recommendations for their favorite browser, but also, when applications are developed and tested on a certain browser other things tend to follow, such as useful plugins, end-user adoption, and more.  It’s certainly a smart move, and one that I predict will prove rewarding.</p><p>So, naturally, I gave the new Firefox Developer Edition a go.  As I’m sure you’re aware by the title of this article, I am enjoying it.  But, I didn’t go into it with high hopes.  I downloaded the new version, installed and loaded it up, noticed the new UI - wasn’t all that impressed, and loaded <a href="http://rentpost.com">RentPost</a>.  That was the wow factor!  It was as if the page was already cached.  I swear, my first thought was, “did Firefox just dig into my Chrome cache”.  I loaded up a few more webpages, ones that are typically pretty slow, news sites, and sure enough, they were almost as speedy.  Color me impressed.</p><p>[caption id=”attachment_209” align=”aligncenter” width=”700”]<a href="https://cdn.jacobt.com/images/2014/11/Screenshot-2014-11-13-21.22.10.png"><img class="wp-image-209 size-large" src="https://cdn.jacobt.com/images/2014/11/Screenshot-2014-11-13-21.22.10-1024x776.png" alt="rentpost.com" width="700" height="530" /></a> Most of the site loaded in around 1 second. The one long process was a request for an RSS feed for the footer and the others are mostly 3rd party assets.[/caption]</p><p>After my opinion started to sway towards, “I might actually be able to use this again”, I began to dig into the UI settings to try and “fix” some of the things I can’t live with.  Firstly, I don’t need a black themed browser, fixed.  Next, what’s up with all these icons to the right of the search bar, <a href="http://blog.mozilla.org/futurereleases/2014/10/16/test-the-new-firefox-hello-webrtc-feature-in-firefox-beta/">Firefox Hello</a>, although interesting, I certainly don’t need.  That got cleaned up.  Then, there was the shining beacon of goodness right before my eyes, the ability to drag the search bar into the unused bin of modules.  Score!  The UI actually looks nice now.  This is something with which I can live.</p><p>There is still more to go in terms of putting the browser through it’s tests.  I’ve only been on it for less than a day, but I’m now over all the initial hurdles keeping me from moving forward, all signs pointing towards a full switch.  I’m actually looking forward to keeping Firefox as my default browser.  I do appreciate their ethos and I’ve seen a few nuggets spread throughout the settings that tell me they’re focus is in the right place.</p><p>So, Foxy, let’s do this!</p><h5><a name="update1"></a>UPDATE</h5>So, I've finally had some time to start debugging and working with the developer tools with Firefox a bit.  The first impression is, this is frustrating.  I found myself trying to go back to Chrome pretty quick.  The developer tools just didn't seem to behave the way I expected.  However, I was determined to make it work.  I've watched the following videos which have been a massive help in learning the Firefox way of doing things.<p>Also, the <a href="https://developer.mozilla.org/en-US/docs/Tools/Debugger#toolbar">docs on the developer tools</a> are helpful as well.</p><iframe src="//www.youtube.com/embed/OS4AxYFLCIE" width="560" height="315" frameborder="0" allowfullscreen="allowfullscreen"></iframe><iframe src="//www.youtube.com/embed/uaFBvItTJrE" width="560" height="315" frameborder="0" allowfullscreen="allowfullscreen"></iframe><iframe src="//www.youtube.com/embed/iEDk8o9ehlw" width="560" height="315" frameborder="0" allowfullscreen="allowfullscreen"></iframe><h5><a name="update2"></a>UPDATE 2</h5>So, after a bit of pain, and despite my greatest efforts to not do so, I have switched back to Chrome for the time being.  I do fully plan to give Firefox another shot in the coming months as they iron out a few of the bugs with the developer tools.  But, until the issues surrounding stack traces/call stacks with proper line numbers and a few other issues are sorted, I'm left with no other option.  Additionally, because I am one of those people that refuse to use multiple browsers on a regular basis, I'm now fully back on Chrome.<p>I plead with the Firefox team to focus their efforts here as, at least for me, this is the one thing holding me back.  I can live with the other smaller quirks like page reflow and repaint jitters, in particular with scrolling.  God speed!</p><h5><a name="update3"></a>UPDATE 3</h5>It's now April 2015 and I am back using Firefox as my primary browser, hopefully for the long haul.  Mozilla has finally fixed the aforementioned issues and it's been pleasant to use over the last couple weeks.<p>I’ll continue using and will update with any additional feedback.</p>]]></content>
    
    
    <summary type="html">&lt;p&gt;[See &lt;a href=&quot;#update1&quot;&gt;Update 1&lt;/a&gt;, &lt;a href=&quot;#update2&quot;&gt;Update 2&lt;/a&gt;, &lt;a href=&quot;#update3&quot;&gt;Update 3&lt;/a&gt;]&lt;/p&gt;
&lt;p&gt;It’s been a while, about 4 years - give or take, since I’ve invited Foxy back into my daily computing life.  I began using Firefox sometime before their &lt;a href=&quot;https://blog.mozilla.org/press/2004/12/mozilla-foundation-places-two-page-advocacy-ad-in-the-new-york-times/&quot;&gt;famous 2 full-page ad&lt;/a&gt; in 2004.  That put me with using Firefox for about 6 years before abandoning it in favor of Chrome.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://cdn.jacobt.com/images/2014/11/nyt_ad_2004.png&quot;&gt;&lt;img class=&quot;aligncenter wp-image-208 size-full&quot; src=&quot;https://cdn.jacobt.com/images/2014/11/nyt_ad_2004.png&quot; alt=&quot;nyt_ad_2004&quot; width=&quot;552&quot; height=&quot;434&quot; /&gt;&lt;/a&gt;The original reason for my departure from Firefox came down to understandable bloat.  As Firefox began to mature over those 6 years, they added some necessary and amazing functionality to their new trailblazing browser.  Firefox had best-in-class developer tools and a clean user interface, they subscribed to W3C standards support and were firmly focused on earning users’ continued use.  It wasn’t that, when I dropped Firefox around 2010, it wasn’t a nice browser and they’d changed the ethos that’d initially drawn me to .  It was more of a growing pains scenario that any software product is going to face during such a heavy feature implementation phase.  To be honest, I stuck with Firefox much longer than many other colleagues at the time.  And, this was mostly because of the developer tools and how they’d fit into my workflow.&lt;/p&gt;</summary>
    
    
    
    
  </entry>
  
  <entry>
    <title>Seeing about this Yerba Mate craze</title>
    <link href="https://jacobt.com/seeing-about-this-yerba-mate-craze/"/>
    <id>https://jacobt.com/seeing-about-this-yerba-mate-craze/</id>
    <published>2014-11-01T09:26:09.000Z</published>
    <updated>2016-07-05T19:01:10.000Z</updated>
    
    <content type="html"><![CDATA[<p>Seeing about this Yerba Mate craze…</p><img src="https://cdn.jacobt.com/images/2014/11/IMG_0479-768x1024.jpg" /><p>Na, not sure it’s really a craze, at least not yet. But I figured I’d give it a go, gourd and bombilla style.</p><span id="more"></span><p><strong>UPDATE:</strong></p><p>I’ve now had some time to test the yerba mate and the gourd.</p><p>Learning how to properly prepare and drink the mate is certainly the first feat to overcome.  There are a number of good resources around the web.  I found <a href="http://www.mymateworld.com/yerbamatefaqs.htm">this one</a> to be particularly helpful.  When first preparing the mate, I found it useful to rinse the mate in the cup/gourd a couple times with cold water before pouring over with hot water.  This process allows you to get rid of any small dust/particles that are more likely to get pulled through the bombillia when drinking mate.</p><p>I’ve also started adding a few drops of stevia extract to each cup, prior to adding the hot water.  This helps to cut on the bitterness, but certainly isn’t necessary.</p><p>Overall, I’ve found yerba mate to have a mild stimulating effect that’s great for mind clarity.  It does seem to calm and even relax my muscles ever so slightly, which might not be for every situation, but is nice overall.  I’d certainly recommend adding yerba mate to your collection of tea products, and/or your lifestyle.  However, I’m not sure it’s a daily drinker for me, at least not now.  I’m going to continue drinking the mate and will update this again after more time has passed.</p><p>Until then, give it a go yourself and let me know what you think.</p>]]></content>
    
    
    <summary type="html">&lt;p&gt;Seeing about this Yerba Mate craze…&lt;/p&gt;
&lt;img src=&quot;https://cdn.jacobt.com/images/2014/11/IMG_0479-768x1024.jpg&quot; /&gt;

&lt;p&gt;Na, not sure it’s really a craze, at least not yet. But I figured I’d give it a go, gourd and bombilla style.&lt;/p&gt;</summary>
    
    
    
    
  </entry>
  
  <entry>
    <title>Nothing to say.. this might SHOCK you!</title>
    <link href="https://jacobt.com/nothing-to-say/"/>
    <id>https://jacobt.com/nothing-to-say/</id>
    <published>2014-07-26T10:36:29.000Z</published>
    <updated>2016-07-05T02:01:20.000Z</updated>
    
    <content type="html"><![CDATA[<p>I started to write a nice big long blog article on this topic, but I changed my mind because I know everyone experiences, and is sick of it.</p><span id="more"></span>STOP CLICKING LINKBAIT ARTICLE TITLES!  STOP!  QUIT IT! CAPICHE?<p>I have nothing more to say here, glad I could waste more of your time!</p><p>&nbsp;</p>]]></content>
    
    
    <summary type="html">&lt;p&gt;I started to write a nice big long blog article on this topic, but I changed my mind because I know everyone experiences, and is sick of it.&lt;/p&gt;</summary>
    
    
    
    
  </entry>
  
  <entry>
    <title>Where to Buy By-products</title>
    <link href="https://jacobt.com/where-to-buy-by-products/"/>
    <id>https://jacobt.com/where-to-buy-by-products/</id>
    <published>2014-06-24T16:53:54.000Z</published>
    <updated>2016-07-05T19:01:10.000Z</updated>
    
    <content type="html"><![CDATA[<p>I take long showers.  Anyone who knows me well enough will tell you this.  People always ask, “What do you do in there?”.  I’ve even heard the term “hour-shower” thrown around.  I don’t really take an hour long shower, but I do take a long one.  They’re amazing too.  Allow me to explain.</p><span id="more"></span>Firstly, it's the one time a day I get to myself, uninterrupted from phone calls, emails, text messages, instant messages, work chat, and many other communication channels I deal with on a daily basis.  It can be exhausting.  But, not in the shower.  I don't have any of this in the shower.<p>Secondly, I have this theory I cooked up one time while taking a shower, about how much more the brain can focus while showering due to temperature regulation and comfort.  My body isn’t having to expend additional energy to keep cool or stay warm, and it’s also not distracted by this unpleasantry.</p><p>I have a couple other reasons like the pleasant sound of the running water and the overall reliance of this as a thinking place.  So, this is why I take long showers, because it’s where I have some of my best thoughts.</p><p>Now, why am I sharing all of this with you and what does is have to do with “Where to Buy By-products?”.  Well, naturally I had an idea this morning that I felt needed sharing.</p><p><img class="alignright size-medium wp-image-185" src="https://cdn.jacobt.com/images/2014/06/st_ives_apricot1-300x281.jpg" alt="st_ives_apricot" width="300" height="281" />So, while taking my shower this morning, uninterrupted from the chaos of modern life, I began my routine standing under the water for a few minutes as my vision began to clear from my night’s rest.  After I began to see a bit more clearly, I reached for the facial scrub and proceeded to clean my face.  This isn’t just any facial scrub though.  This is an <a href="http://www.amazon.com/St-Ives-Fresh-Invigorating-Apricot/dp/B000UVWGGA">apricot facial scrub</a>.  My girlfriend picked it out - I quite like it.  After scrubbing my face in hopes of ridding myself from any future breakouts, and sitting the scrub back down, I started to think.</p><blockquote>Where does St. Ives get the apricot cores that are a key ingredient to their face scrub's success?  Do they buy fresh apricots just for their cores and remove the fruit's meat?  Maybe they send all their employees home with fresh apricots each day.  Surely not though, that'd be way too expensive.  Maybe they just buy rotten apricots from produce vendors, or maybe they have a relationship with various companies that sell canned apricots and have the seed core as waste - a by-product.  Yea, I bet that's what they do, that sounds the most logical.</blockquote>And with this new "realization", I allowed my mind to go further.<blockquote>So, if St. Ives gets their apricot cores from these relationships with apricot canning companies, how long did it take to establish those relationships?  I wonder if they have supply issues and quality control problems.  Finding other companies might not be that easy, and if you did find them, how's that conversation going to go?  "Oh hey, I'd like to buy your cores that you're throwing away".  I'm sure that conversation would be welcomed, but what about the logistics.  Does that canning company even know they have an opportunity available with their waste by-product?</blockquote>I'm sure you can tell where this went next.  With this new "realization" in mind, I began down a path of possibilities where there are lots of opportunities for companies and manufacturers with by-products to sell their waste to other manufacturers that have a need for these in their own products.<p>Now, obviously these companies have some sort of way of obtaining these key ingredients today.  I don’t know what it is, I can only surmise for the time being.  But, I can only imagine that finding many of these ingredients is difficult at best.</p><p>Armed with this new revelation, I concluded that there is a need for a new marketplace where manufacturers can list up their by-products for sell and other’s in need of these by-products can arrange to purchase.  Not only would this provide a revenue opportunity for manufacturers with by-products seen and treated as waste, but it would also offer an easier way for others to find those key ingredients.  And also, it opens the door for a massive improvement in the re-use of waste, a key piece with regards to recycling.</p><blockquote>All the tree-hugging hippies will rejoice and all will be good in the world.  It would be an excellent contribution to the world.</blockquote>Lastly, one other piece that may be overlooked here is the potential for others to get ideas on how to create products and re-use by-products for other creative ideas.  Much of the waste and by-products, I can surmise, goes unrealized and with more eyes and thought on the potential for these by-products to become something useful, everyone wins.<p>So, this is why I take long showers.  So I can have ideas like these every day.  So I can sort things out in my mind and take a deep breath from the constant stream of chaos.</p>]]></content>
    
    
    <summary type="html">&lt;p&gt;I take long showers.  Anyone who knows me well enough will tell you this.  People always ask, “What do you do in there?”.  I’ve even heard the term “hour-shower” thrown around.  I don’t really take an hour long shower, but I do take a long one.  They’re amazing too.  Allow me to explain.&lt;/p&gt;</summary>
    
    
    
    
  </entry>
  
  <entry>
    <title>Twitter is not a Blogging Platform</title>
    <link href="https://jacobt.com/twitter-is-not-a-blogging-platform/"/>
    <id>https://jacobt.com/twitter-is-not-a-blogging-platform/</id>
    <published>2014-03-16T15:19:22.000Z</published>
    <updated>2016-07-05T19:01:10.000Z</updated>
    
    <content type="html"><![CDATA[<p>I’ve got a bone to pick.  You see, I’m constantly on the fence with Twitter - a love/hate.  I like Twitter because it’s a constant stream of relevant, up-to-date information, quickly digestible.  It’s great for this.  I can follow people in my industry that have similar thoughts and keep up on things which I could never discover solely on my own.  I just don’t have time for all that.  So, it’s curated information that’s highly relevant to me.  What’s not to love?</p><span id="more"></span>The bone I have to pick are with people that ruin that experience.  Now, the obvious answer to this is to unfollow these people.  I usually do.  But sometimes a person has great information that I do actually want many times, but yet they ruin the experience every now and then.<p>Example…</p><p><a href="https://cdn.jacobt.com/images/2014/03/Screenshot-2014-03-15-18.09.13.png"><img class="aligncenter size-large wp-image-156" alt="twitter" src="https://cdn.jacobt.com/images/2014/03/Screenshot-2014-03-15-18.09.13-1024x830.png" width="700" height="567" /></a>You see, the problem with this is many fold.  I can’t read this b/c it’s out of order.  I scroll down, not up.  It’s mixed in with other tweets which make it even harder to follow as well.  But honestly, the thing that bothers me the most is that it’s basically spamming my feed.  If I want to read a blog article, I’ll do just that.  But if I’m not specifically interested in the topic at hand, don’t spam my feed with your opinions/thoughts.  It’s rude and not appreciated.</p><p>Now, the person that I used in this example is not the only person doing this.  There are many others, most of whom I choose to unfollow.  But this person I do respect and appreciate his comments, thoughts, and opinions, sincerely.  I just don’t want to have to read them in reverse and have a spammed feed.  So, this is my plea.  Please consider blogging on a blogging platform and linking to your thoughts.  A blog article doesn’t have to be long, short is okay.  Hell, Tumblr made that mainstream, right?</p>]]></content>
    
    
    <summary type="html">&lt;p&gt;I’ve got a bone to pick.  You see, I’m constantly on the fence with Twitter - a love/hate.  I like Twitter because it’s a constant stream of relevant, up-to-date information, quickly digestible.  It’s great for this.  I can follow people in my industry that have similar thoughts and keep up on things which I could never discover solely on my own.  I just don’t have time for all that.  So, it’s curated information that’s highly relevant to me.  What’s not to love?&lt;/p&gt;</summary>
    
    
    
    
  </entry>
  
  <entry>
    <title>Zendesk&#39;s Homepage Video Background</title>
    <link href="https://jacobt.com/zendesks-homepage-video-background/"/>
    <id>https://jacobt.com/zendesks-homepage-video-background/</id>
    <published>2014-03-11T07:16:05.000Z</published>
    <updated>2016-07-05T19:01:10.000Z</updated>
    
    <content type="html"><![CDATA[<img src="https://cdn.jacobt.com/images/2014/03/Screenshot-2014-03-10-16.09.06-1024x496.png" /><span id="more"></span><p>I have to say, Zendesk’s new homepage design and video background is pretty awesome.  It’s highly effective at speaking to their target market.  Well done, props!</p>]]></content>
    
    
    <summary type="html">&lt;img src=&quot;https://cdn.jacobt.com/images/2014/03/Screenshot-2014-03-10-16.09.06-1024x496.png&quot; /&gt;</summary>
    
    
    
    
  </entry>
  
  <entry>
    <title>SaneBox&#39;s Cancellation Message - A Startup Win</title>
    <link href="https://jacobt.com/saneboxs-cancellation-message-a-startup-win/"/>
    <id>https://jacobt.com/saneboxs-cancellation-message-a-startup-win/</id>
    <published>2014-02-26T17:20:02.000Z</published>
    <updated>2016-07-05T05:27:21.000Z</updated>
    
    <content type="html"><![CDATA[<p>I just gave SaneBox a go.  It was short-lived.  I may try it again soon.  The issue is that I have a lot of email addresses.  Paying $100/yr. per email address (they did offer me a 25% discount when I chose to cancel (good idea)) really didn’t make sense to me.  It does look like a cool service and I can’t really say for certain if it’s worth it or not.  I still need to give it a real go - maybe some other time.  But, I did really love their cancellation message.  Here’s why…</p><span id="more"></span><p>Startups constantly struggle with client perception of the product.  The old adage and agile approach of “ship now” and “release; iterate often” is, in general, a good approach for startups.  However, it leaves many early customers with the perception that what they see of a product is what it will always be.  Most customers don’t understand how software  development and startups, in general, work.  Instead, they think when they try out a service, that’s what it is, forever and always.  In reality, that’s far from the truth.  Software is a living breathing beast that is always a work in progress, improving, pivoting, backtracking, growing, etc.</p><p>Therefore, I found this take-away message to be well fitting and deserved - kudos SaneBox.</p><blockquote>Please try us again soon! Hopefully by then, we will be fit and tanned and ready for the relationship you always dreamed of!</blockquote>]]></content>
    
    
    <summary type="html">&lt;p&gt;I just gave SaneBox a go.  It was short-lived.  I may try it again soon.  The issue is that I have a lot of email addresses.  Paying $100/yr. per email address (they did offer me a 25% discount when I chose to cancel (good idea)) really didn’t make sense to me.  It does look like a cool service and I can’t really say for certain if it’s worth it or not.  I still need to give it a real go - maybe some other time.  But, I did really love their cancellation message.  Here’s why…&lt;/p&gt;</summary>
    
    
    
    
  </entry>
  
  <entry>
    <title>Back to Wordpress from Tumblr</title>
    <link href="https://jacobt.com/back-to-wordpress/"/>
    <id>https://jacobt.com/back-to-wordpress/</id>
    <published>2014-02-25T13:17:07.000Z</published>
    <updated>2016-07-05T01:58:03.000Z</updated>
    
    <content type="html"><![CDATA[<p>So, I moved back to <a href="http://wordpress.org">Wordpress</a>.  I’ve been with <a href="http://tumblr.com">Tumblr</a> for a couple years now.  It was pretty good overall, but I recently came to the conclusion that one of the reasons I don’t blog more is because of how much I hate the writing experience on Tumblr.  When composing a post, it supplies you a tiny textarea for which to write.  It’s almost as if it’s encouraging you to writer shorter posts, which I assume is the case.  The problem is, I want a blog, not a <a href="http://en.wikipedia.org/wiki/Microblogging">microblogging</a> platform.  I have <a href="http://twitter.com/oojacoboo">Twitter</a> for that.  Or, I can use Wordpress if I desire.</p><p>Wordpress doesn’t come without it’s own issues.  I’m very well aware of them and they are pretty frustrating.  The codebase itself is a disaster, being written in php4, and a highly <a href="http://code.tutsplus.com/tutorials/two-ways-to-develop-wordpress-plugins-functional-programming--wp-28231">functional codebase</a>.  I do prefer some OO goodness.  Nonetheless, I’m making the jump back.</p><p>I want better control over my urls, assets, features and functionality as well as customization.  Tumblr, naturally, didn’t offer much of this.  I do think Tumblr is a nice blogging platform for the average Joe.  I just don’t fit the category.  So, back on Wordpress for a while.</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;So, I moved back to &lt;a href=&quot;http://wordpress.org&quot;&gt;Wordpress&lt;/a&gt;.  I’ve been with &lt;a href=&quot;http://tumblr.com&quot;&gt;Tumblr&lt;/a&gt; for a couple yea</summary>
      
    
    
    
    
  </entry>
  
  <entry>
    <title>Russians be Crazy!</title>
    <link href="https://jacobt.com/russians-be-crazy/"/>
    <id>https://jacobt.com/russians-be-crazy/</id>
    <published>2014-02-25T12:02:09.000Z</published>
    <updated>2016-07-05T01:56:54.000Z</updated>
    
    <content type="html"><![CDATA[<p><a href="http://www.youtube.com/watch?v=gLDYtH1RH-U">http://www.youtube.com/watch?v=gLDYtH1RH-U</a></p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=gLDYtH1RH-U&quot;&gt;http://www.youtube.com/watch?v=gLDYtH1RH-U&lt;/a&gt;&lt;/p&gt;
</summary>
      
    
    
    
    
  </entry>
  
  <entry>
    <title>Welcome to Pleasantville.xxx and the TLD dilemma</title>
    <link href="https://jacobt.com/welcome-to-pleasantville-xxx-and-the-tld-dilemma/"/>
    <id>https://jacobt.com/welcome-to-pleasantville-xxx-and-the-tld-dilemma/</id>
    <published>2014-02-23T05:52:00.000Z</published>
    <updated>2016-07-05T01:56:12.000Z</updated>
    
    <content type="html"><![CDATA[<p>I’ve made the leap and I’m not turning back.  And no, it’s not the leap you’re thinking!  I’m not getting into porn…</p><p>For those of you unfamiliar, the .xxx TLD was finally approved and released by ICANN a couple years ago.  It’s intention is/was to serve as a place for porn domains.  It make sense after all, right?  Porn, XXX, .xxx, why not?</p><p>Well, yes and no.  Sure, on the surface .xxx makes sense.  We’ll just get all the porn sites to register .xxx domains and in turn not index their .xxx websites in traditional SERPs.  Then businesses can blacklist the domains on their routers and more.  It’ll be a perfect utopia.  We’ll all move to <a href="http://www.imdb.com/title/tt0120789/">Pleasantville</a>!</p><p>The issue is pretty multi-faceted though.  Firstly, nothing on the internet, or in this world, is black and white (Pleasantville parallel).  Let’s take a few examples here that should be incredibly obvious to debunk this lunacy:</p><ul>    <li>If I’m running a porn studio, why would I want to register a .xxx domain that isn’t going to be indexed by the traditional SERPs and is banned by default by many content filters?</li>    <li>Oh, there is this <a href="http://www.imdb.com/title/tt0295701/">XXX movie</a>.</li>    <li>Many extreme sports companies brand along side the xxx theme, <a href="http://www.xxxraceco.com/">XXX Race Co</a>, <a href="http://www.motoxxx.com/">Moto XXX</a>, <a href="http://triplexmotorsports.com/">XXX Motorsports</a>, and many others.</li>    <li>There are beer brands, <a href="http://www.beeradvocate.com/beer/profile/433/3829/">Molson XXX</a> and <a href="http://en.wikipedia.org/wiki/XXXX">XXXX</a>, an Aussie beer, to name a couple.</li>    <li>How about some <a href="http://en.wikipedia.org/wiki/Triple_XXX">Triple XXX Root</a> beer and a <a href="https://triplexxxfamilyrestaurant.com/rootbeer/default.aspx">family restaurant</a>!</li>    <li><a href="http://en.wikipedia.org/wiki/WrestleMania_XXX">WrestleMania XXX</a>, <a href="http://en.wikipedia.org/wiki/XXX_(ZZ_Top_album)">ZZ Top had an album</a>, or how about some <a href="http://www.vitaminwater.com/product?product=xxx">Vitamin Water XXX</a>.</li>    <li>Who knows, maybe you’re referring to the <a href="http://en.wikipedia.org/wiki/Triple_X_syndrome">Triple X Syndrome</a>, <a href="http://en.wikipedia.org/wiki/Coat_of_arms_of_Amsterdam">Amsterdam’s Coat of Arms</a>, or <a href="http://en.wikipedia.org/wiki/Anya_Amasova">Agent XXX</a> of James Bond.</li>    <li>it goes on…</li></ul>So where did XXX come from and why do we need to try and pin it to porn?<p>The information varies and there doesn’t seem to be an authoritative source on the subject.  But it’s thought that it originated as a mark on beer casks.  According to <a href="http://www.amazon.com/Brewers-Dictionary-Phrase-Fable-18th/dp/0550104119">Brewers</a> on the subject:</p><blockquote>"X on beer casks formerly indicated beer which had paid the old 10s duty, and hence came to mean beer of a given quality. Two or three crosses are mere trademarks intended to convey an impression of its extra strength."</blockquote>Later as it came to be, the NPAA adopted X-rated as a signal of “extra strength” again in terms of content rating.  And thus, you can see how the XXX has been tied to porn.  But, in short it stands for strong and strength, intensity, etc.  This is clearly seen by the use within the extreme sports industry and branding along side sports drinks, wrestling, etc.<p>Given all of this though, and the more loose coupling of the TLD with porn and legitimate companies and brands, it’s difficult to draw a clear and distinct line with the TLD and porn itself.  And, therefore, as a result, I never see this fully taking hold as a TLD to become synonymous with porn.  Furthermore, due to it’s easy remembrance, simplicity and personal appeal, I find the TLD extension an attractive asset.</p><p>I’m putting myself out there.  I’ve registered the .xxx domain for my family name and intend to use <a href="mailto:&#106;&#97;&#99;&#111;&#98;&#64;&#116;&#x68;&#x6f;&#x6d;&#x61;&#x73;&#x6f;&#x6e;&#46;&#120;&#120;&#120;">&#106;&#97;&#99;&#111;&#98;&#64;&#116;&#x68;&#x6f;&#x6d;&#x61;&#x73;&#x6f;&#x6e;&#46;&#120;&#120;&#120;</a> as my personal email hence forth.  Or at least until ICANN launches affordable custom TLD registrations.</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;I’ve made the leap and I’m not turning back.  And no, it’s not the leap you’re thinking!  I’m not getting into porn…&lt;/p&gt;
&lt;p&gt;For those of </summary>
      
    
    
    
    
  </entry>
  
  <entry>
    <title>JS and the new Collective DOM</title>
    <link href="https://jacobt.com/js-and-the-new-collective-dom/"/>
    <id>https://jacobt.com/js-and-the-new-collective-dom/</id>
    <published>2014-02-12T02:35:00.000Z</published>
    <updated>2016-07-05T01:55:36.000Z</updated>
    
    <content type="html"><![CDATA[<p>I’ve been wanting to write this blog post for some time now. A good deal of thought has been given to this topic and we’ve finally begun implementation of this new methodology into <a href="http://rentpost.com/" target="_blank" rel="nofollow">RentPost</a>.</p><p>I should preface that there isn’t anything profoundly novel about this approach, and many might even find it a tad “nasty”, I did at first. It goes against what we’ve always thought was the right approach. But after we’ve refactored our js over and over, we’ve found ourselves constantly pushing towards the DOM and increasing cohesion. Keeping an open mind, I’m challenging that approach and freaking loving it so far!</p><p>So, what is this magical new approach that you’re sure to scoff at on first glance, but if you keep an open mind, will hopefully see the value? Well, it has to do with decoupling and cohesion. There is <a href="http://www.youtube.com/watch?v=DgVS-zXgMTk" target="_blank" rel="nofollow">an awesome talk</a> put on by<a href="http://www.petehunt.net/blog/" target="_blank" rel="nofollow">Pete Hunt</a>, a Facebook engineer and core team member of the <a href="http://facebook.github.io/react/" target="_blank" rel="nofollow">React Project</a>, on the subject. I suggest watching this video. A friend actually pointed me to this video when I was explaining this new methodology at which I’d arrived. Clearly I was not the only one on this wavelength. And while it’s a requirement for React’s virtual DOM, I’m suggesting the event binding implementation in a more mainstream sense.</p><p>With that all said, let’s dig into specifically what I’m talking about here and discuss a few positive and negatives, etc.</p><p>Firstly, what’s the problem we’re solving… Event binding sucks. It’s a real pain. Not only is it annoying to write the first time, it’s even harder to keep straight all of your bindings as an application’s UI morphs. That’s not even mentioning all the bugs that can arise from incorrect selectors, etc. Let’s take an example:</p><pre><code class="javascript">$(“a.add-new”).on(“click”, function(event) &#123;    //do stuff&#125;);</code></pre><p>Now, let’s take a look at what we did here, super simple, but I want to point out something. This is just a simple event binding on the node itself. But, note that the selector specifies the element. This is something I’ve long been a fan of doing out of practice. It’s not the fastest selector, but when refactoring and reading code, it tells you something more about the selector and the resulting code. Here is a further example:</p><pre><code class="javascript">$(“body”).on(“click”, “ul#users &gt; li a.add-new”, function(event) &#123;    //do stuff&#125;);</code></pre><p>In this example, we took the previous and did a couple more things. For one, we delegated the binging to the &lt;body&gt; and expanded the selector to be more clear exactly what it is. Now, again, not fast, no. But, I can see that clearly, it’s an anchor for adding a new user. This is good for a couple reasons. One, as I mentioned, the ability to clearly see the chain and what’s happening. And two, using longer selectors like this allows you to prevent collision among selectors and allows you to keep the DOM clean. You don’t have to have selectors like a.-add-new-users-button-under-left-column-when-enabled. Any time I see a selector like this I cringe &gt;&lt;.</p><p>So, what does all this selector jazz have to do with cohesion and the collective DOM, you’re probably asking… Well, it has everything to do with it. The only reason we spent all this time making sure our selector chain was easy to read and follow within our JS is so that we can read the code and know what’s happening more clearly. Sometimes the javascript code itself isn’t enough to fully know. In these cases, you need more contextual clues. Comments do help, but sometimes they can get out of control as well.</p><p>Taking a step back from this and thinking more on it, we’re just trying to create more cohesion between our JS and our markup/DOM. Now, this isn’t intentional as much as it’s really a necessity for continual refactoring down the road. When I started giving this more and more thought, I began to ask myself, why we’re even attempting this decoupling in such a way. And this is where I came upon the following approach:</p><pre><code class="html">&lt;a onclick="//dostuff" class="add-new"&gt;Add New User&lt;/a&gt;</code></pre><p>So, yea, inline event handlers! You saw that correctly, yes…</p><p>This isn’t it though, there is more, but this is the concept. Allow me to expand on it first. Before we had one page ajax web apps, we had standard anchors with uri’s (still can too if you want to watch for url changes), but honestly, most apps don’t and don’t need to. Graceful degredation, a primary benefit, is generally considered unnecessary work since nearly every browser used today supports javascript — a requirement to use most of the internet. So that said, my take on this is nothing more than a progression of the href attr. Work with me here… Where we use to have href=”/path/to/new/page.html”, in most new apps, you no longer need traditional paths. Instead your buttons and anchors are calling functions, which are making ajax requests and pulling in new json for parsing or doing various other functions required by your app. And because of this, I look at the inline event handlers as a progression.</p><p><strong>Disclaimer</strong>: I’m well aware of what people say and that these handlers were a thing of the 90’s. I don’t care.</p><p>So, let’s take this a couple steps further to complete this approach.</p><p>First, I should probably talk a bit more about the organization of js code within an application. This is a topic in and of itself, but in short, I highly recommend setting up “Models”, if you will. Take for example the following:</p><pre><code class="javascript">var Model = Model || &#123;&#125;;Model.User = Model.User || &#123;&#125;;//yes, I like underscore.js_.extend(Model.User, &#123;    add: function() &#123;        //do stuff    &#125;&#125;;</code></pre><p>This is just a simple example, but hopefully you get the idea. Think of it a bit like PHP’s <a href="http://www.php-fig.org/psr/psr-0/" target="_blank" rel="nofollow">PSR-0</a> for js ☺</p><p>The benefits of this approach are pretty far reaching and this is deserving of an article in and of itself, but a requirement for the proper implementation of the suggested approach. So taking that with us, we now have something like this:</p><pre><code class="html">&lt;a onclick="Model.User.add()"&gt;Add New User&lt;/a&gt;</code></pre><p>Now, I don’t know about you, but to me, this is pretty awesome. It’s clean and direct, nothing else in the way. I can also pass in arguments as needed which are almost always available within the DOM for actions like “remove”, “edit”, etc.</p><p>This is also not only limited to onclick, onsubmit is another great one, but you could use <a href="https://developer.mozilla.org/en-US/docs/DOM_Client_Object_Cross-Reference/DOM_Events" target="_blank" rel="nofollow">any event handler</a> needed. For something with custom/unusual handlers I’d probably still resort to registering them within the js files.</p><p>So, the benefits:</p><ul class="post-list">    <li>No longer the need to store as many data attr’s for ids and other variables that need to be passed to a function when the event is fired. These are simply added to the function call as arguments.</li>    <li>Delegation is no longer a requirement, dynamically added DOM nodes would simply have their event handlers included when inserted.</li>    <li>You can keep your js code much cleaner without the need for a large portion of event hander registrations.</li>    <li>Garbage collection with delegation for dynamically added nodes isn’t a concern since when the node is removed from the DOM, the event handler is as well.</li>    <li>No longer do you have to search around when debugging an UI for what is “firing” on a handler. It will be plain as day and you will know where to go to edit/view the code.</li>    <li>You are forced to keep it DRY!</li></ul>And the downsides:<ul class="post-list">    <li>If you have thousands of DOM nodes on a given page with associated event handlers, it could be taxing for the browser. I haven’t tested this, so I can’t confirm. I do consider this to be a much more rare scenario and more of a performance enhancement than anything else. But it’s worth mentioning. You can always just delegate in this case, no big deal.</li>    <li>You’re putting your logic in the global scope with the “Model” approach. However, this can be a benefit as much as a negative. It’s nice to be able to call an “action” from anywhere it’s needed without having to build the prototype.</li></ul>These are honestly the only downsides I’ve been able to come up with to date. I’d love to hear more if anyone has them. Please share your thoughts on this.<p>I’m certain I’m not the first to take this approach, it’s nothing super novel. But it’s been the result of years of refactoring and improvements that have led me to this conclusion. There was always an aching to get closer and closer to the DOM with the js. Your markup and your js will always be tightly coupled, there isn’t any way around it and the separation of concerns simply isn’t currently feasible. For this reason, I prefer to accept it instead of fight it, and I’m loving it!</p><p>P.S. — I’m aware of the many new frameworks that address these concerns and others. However, when refactoring, implementing a framework doesnt’ always make sense. Also, this approach is very simple and achieves a very nice result in itself, without the need to be dependent on a framework.</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;I’ve been wanting to write this blog post for some time now. A good deal of thought has been given to this topic and we’ve finally begun </summary>
      
    
    
    
    
  </entry>
  
  <entry>
    <title>So, I tried Obama&#39;s fancy site</title>
    <link href="https://jacobt.com/so-i-tried-obamas-fancy-site/"/>
    <id>https://jacobt.com/so-i-tried-obamas-fancy-site/</id>
    <published>2013-10-08T03:02:00.000Z</published>
    <updated>2016-07-05T01:54:59.000Z</updated>
    
    <content type="html"><![CDATA[<p>So, as I sit here chatting with an Obamacare agent through this horrendous homegrown livechat window.  I&#8217;m livid.</p><p>I&#8217;ll tell you why I&#8217;m livid.  It&#8217;s not because the site is experiencing load levels that their infrastructure can&#8217;t handle. It&#8217;s not b/c this chat window is hard to read and that the chat agent gives me canned replies and blames it on traffic levels.  No, it&#8217;s none of that actually.  In fact, I can deal with that, I develop software and actually understand how some of the scaleability issues may have been underestimated and difficult to address at such short notice.  Nope, that&#8217;s not it.</p><p>It&#8217;s the fact that the basic login system is the worst I&#8217;ve ever used.  Well, maybe not the worst, but certainly the worst I can recall in recent memory.  That&#8217;s saying a lot too.  I&#8217;ve used a lot of sites!  So, you&#8217;re probably wondering.. Well Jacob, what makes it so bad?  Glad you asked!</p><p>Firstly, in order to create a username, this is what&#8217;s required&#8230;</p><blockquote><p class="p1">The username is case sensitive. Choose a username that is 6-74 characters long and must contain a lowercase or capital letter, a number, or one of these symbols _.@/-</p></blockquote><p class="p1">Wait, what?!  A case-sensitive username?  Really?  Oh, I get it&#8230; we&#8217;re being more secure!  Genius!  Now, no one will remember their username, perfect!</p><p class="p1">Next up, passwords.  Now, this actually isn&#8217;t a huge concern, I&#8217;m all for forcing some requirements in passwords used.  This is mainly b/c users, for the most part, are rather stupid, and will use some really bad passwords if you allow them.  And, I&#8217;m sure, on a site like <a href="http://healthcare.gov">healthcare.gov</a>, some really really bad ones.  But, what really got me about the passwords, was it&#8217;s description&#8230;</p><blockquote><p class="p1">Your password must contain 8-20 characters. There must be at least 1 upper case letter, 1 lower case letter, and 1 number. It must be different from your last 6 passwords. It can&#8217;t contain your username or any of these characters =&#160;?&lt;&gt; ( ) ‘ &#8221; /  &amp;</p></blockquote><p class="p1">What, what?!  My last 6 passwords?  How do you know what my last 6 passwords were?  Is this suppose to be some sort of security feature?  Sure, I realize that PCI-DSS compliance requires passwords be changed every 90 days.  I&#8217;m not really sure that level of security is needed here, I certainly don&#8217;t want it or care for it.  But, let&#8217;s just assume it is needed.  Why are you storing my last 6(+) passwords?  I&#8217;m assuming it&#8217;s b/c you want to ensure that it&#8217;s changed and isn&#8217;t accessible for a longer period of time.  That&#8217;s all well and good, but you now have a database of extensive passwords on hand.  That doesn&#8217;t make me feel good!</p><p class="p1">So, anyway, after you&#8217;re able to actually create some credentials that will get you through the account creation process.  You&#8217;ll get an email confirmation.  No problem, click the link, account verified, then wait ~90 seconds&#8230; for something&#8230; (database replication?) before you&#8217;re able to login.  Great, whatever, I can deal with that.</p><p class="p1">Whew!  I&#8217;m now at the login page, finally.  So, I plug in my login credentials and click to login.  Failed..  That sucks, maybe I already forgot my login credentials.  After all, that username is certainly not one I&#8217;ve ever used before, or again for that matter!  Maybe I&#8217;ll request that I&#8217;ve &#8220;Forgot my Username&#8221;.  Giving that a try, it&#8217;s unable to locate my &#8220;Marketplace Profile&#8221;.  Great!  </p><p class="p1">How about &#8220;Forgot my Password&#8221;, maybe that&#8217;ll do it.  So, I punch in my details and success, I get an email with a link to reset my password.  I&#8217;m now one step closer to affordable health insurance!  Or so I thought&#8230; The link takes me to a page where it&#8217;s unable to locate my &#8220;Marketplace Profile&#8221;.  Now, how is it that you&#8217;re unable to locate my profile, but you could locate it to send me a password reset link?  How does that work exactly?</p><p class="p1">So, here I am, unable to login to <a href="http://healthcare.gov">healthcare.gov</a> in order to get my affordable health insurance I was promised, typing up a post, livid that our gov&#8217;t can waste money handing out contracts to people that clearly shouldn&#8217;t be developing applications of this scale.  I think what bothers me the most, is the fact that I know this contract was handed to someone who&#8217;s a friend of a friend of a supporter&#8230;</p><p class="p1">Giving it another go, maybe they&#8217;re db is sharded off to unavailable or delayed replication nodes, who knows.  I type in my credentials once again.  After all, Mariana on livechat said to try later, they&#8217;re having issues with traffic.  So, I plug away for the umpteenth time, and&#8230; success!  It looks like it&#8217;s going through&#8230;</p><p class="p1"><img alt="image" src="http://media.tumblr.com/45fea78f7d06ac755a206a3b0ec595f6/tumblr_inline_mubjw0ucL51qe9svl.png" /></p><p>Ya know what&#8230; f&#8217;it!</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;So, as I sit here chatting with an Obamacare agent through this horrendous homegrown livechat window.  I&amp;#8217;m livid.&lt;/p&gt;
&lt;p&gt;I&amp;#8217;ll</summary>
      
    
    
    
    
  </entry>
  
  <entry>
    <title>Hot Sauce from Firehouse</title>
    <link href="https://jacobt.com/i-probably-should-have-read-the-label-before/"/>
    <id>https://jacobt.com/i-probably-should-have-read-the-label-before/</id>
    <published>2013-10-04T00:19:21.000Z</published>
    <updated>2016-07-05T02:08:13.000Z</updated>
    
    <content type="html"><![CDATA[<p>I probably should have read the label before dousing my firehouse sub with this stuff! #hot</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;I probably should have read the label before dousing my firehouse sub with this stuff! #hot&lt;/p&gt;
</summary>
      
    
    
    
    
  </entry>
  
  <entry>
    <title>Call for a localhost TLD</title>
    <link href="https://jacobt.com/call-for-a-localhost-tld/"/>
    <id>https://jacobt.com/call-for-a-localhost-tld/</id>
    <published>2013-08-13T08:46:00.000Z</published>
    <updated>2016-07-05T01:53:49.000Z</updated>
    
    <content type="html"><![CDATA[<p>For some time now I&#8217;ve been using the .dev TLD as my localhost TLD of preference.  Prior to that, I used .local, but ran into issues with <a href="http://en.wikipedia.org/wiki/.local">mDNS and Apple&#8217;s bonjour network discovery</a>.  So, .dev it is for now.  Overall I haven&#8217;t had a lot of issues with setting up a local TLD.  The process is pretty straight forward; add the domain to your /etc/hosts pointing it to your local loopback.  The issue is that Chrome&#8217;s and FF&#8217;s universal input bars just aren&#8217;t intelligent enough.  With a recent project, I just tried to setup a subdomain which performs a google search every time.  I&#8217;m now scouring through the Chrome configs to see where I can set exceptions; haven&#8217;t found it yet.</p><p>Why not have a universally accepted localhost TLD though?  It seems pretty logical to me and there could certainly be many purposes to having something like this.  <a href="http://en.wikipedia.org/wiki/Generic_top-level_domain">ICANN is already in the process of deploying new gTLD&#8217;s</a> in an effort to make more loot, where companies are already contracting for their own gTLD&#8217;s.  I fully expect that these gTLD&#8217;s will turn into service wrappers, so why not have something for localhost?</p><p>So, I guess maybe you&#8217;re wondering what the solution is to this to at least get it working?  The good news is, it&#8217;s super easy!  Just add http(s):// before the domain to train Chrome not to perform a search and instead use the protocol.  It&#8217;s an easy solution, maybe not obvious in a day where we rarely see or use the protocol with the url, and increasing less so as we move into an age of crazy gTLDs.</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;For some time now I&amp;#8217;ve been using the .dev TLD as my localhost TLD of preference.  Prior to that, I used .local, but ran into issue</summary>
      
    
    
    
    
  </entry>
  
  <entry>
    <title>Custom Methods vs Constants</title>
    <link href="https://jacobt.com/custom-methods-vs-constants/"/>
    <id>https://jacobt.com/custom-methods-vs-constants/</id>
    <published>2013-07-18T06:28:00.000Z</published>
    <updated>2016-07-05T01:53:07.000Z</updated>
    
    <content type="html"><![CDATA[<p>So, I&#8217;ve been giving some thought lately to this whole idea of using custom method names vs constants within a class to prevent typo errors when passing strings to a commonly used method name.</p><p>As an example, let&#8217;s talk about a simple example class for a module with options that can be set.  Many times you&#8217;d see this written one of two ways for the options.</p><p>The first example is probably the most common and simplest. We just use simple public methods that take a string and return the result. The advantage of this is that it&#8217;s clean and simple. There are many downside, but primarily, you don&#8217;t know if the string you passed is correct or not and you don&#8217;t have any autocomplete.</p><pre><code class="php"><br />&lt;?php<p>namespace WidgetFactoryModules;</p><p>class MyModule extends MyORM<br>&#123;<br /><br>    /**<br>     * Shared method to get the option value from the db<br>     * @param string $option<br>     * @return mixed<br>     <em>/<br>    public function getOption($option) &#123;<br>        return $this-&gt;query(“SELECT <code>value</code> FROM <code>module_option</code> WHERE <code>name</code> = ?”, array($option));<br>    }<br /><br /><br>    /*</em><br>     * Update the option value<br>     * @param string $option<br>     * @param mixed $value<br>     * @return mixed<br>     */<br />    public function setOption($option, $value) {<br />        return $this-&gt;query(“UPDATE <code>module_option</code> SET <code>value</code> = ? WHERE <code>name</code> = ?”, array($value, $option));<br>    }<br>}<br>        </code><br>    </pre></p><p>Adding onto the last example you&#8217;ll notice that custom method names were added for each option passing the string param to the shared getter and setter methods. The advantages of this approach is that you don&#8217;t have to worry about mistyping strings with passing them as parameters and you&#8217;ll get to maintain autocomplete, allowing you to see all the options available. Not too bad, but a little cluttered in my opinion and harder to maintain.</p><pre>        <code class="php">&lt;?php<p>namespace WidgetFactoryModules;</p><p>class MyModule extends MyORM<br>&#123;<br /><br>    /**<br>     * Shared method to get the option value from the db<br>     * @param string $option<br>     * @return mixed<br>     <em>/<br />    private function getOption($option) &#123;<br>        return $this-&gt;query(“SELECT <code>value</code> FROM <code>module_option</code> WHERE <code>name</code> = ?”, array($option));<br>    }<br /><br /><br>    /*</em><br>     * Update the option value<br>     * @param string $option<br>     * @param mixed $value<br>     * @return mixed<br>     <em>/<br>    private function setOption($option, $value) {<br>        return $this-&gt;query(“UPDATE <code>module_option</code> SET <code>value</code> = ? WHERE <code>name</code> = ?”, array($value, $option));<br>    }<br /><br /><br>    /*</em><br>     * Should we send emails with this module?<br>     * @return mixed<br>     <em>/<br>    public function getOptionSendEmails() {<br />        return $this-&gt;getOption(“sendEmails”);<br>    }<br /><br /><br>    /*</em><br>     * Update the sendEmails option<br>     * @param mixed $value<br>     * @return mixed<br>     <em>/<br>    public function setOptionSendEmails($value) {<br />        return $this-&gt;setOption(“sendEmails”);<br>    }<br /><br /><br>    /*</em><br>     * Is sharing to social networks enabled by default?<br>     * @return mixed<br>     <em>/<br>    public function getOptionShareByDefault() {<br>        return $this-&gt;getOption(“shareByDefault”);<br>    }<br /><br /><br>    /*</em><br>     * Update the shareByDefault option<br>     * @param mixed $value<br>     * @return mixed<br>     */<br>    public function setOptionShareByDefault($value) {<br>         return $this-&gt;setOption(“shareByDefault”);<br>    }<br>}<br>        </code><br>    </pre></p><p>After giving this some more thought though, I was thinking about the power of constants to improve on this and came up with a bit of a hybrid, if you will.</p><pre>        <code class="php">&lt;?php<p>namespace WidgetFactoryModules;</p><p>class MyModule extends MyORM<br>&#123;</p><pre><code>const SEND_EMAILS = &quot;sendEmails&quot;;const SHARE_BY_DEFAULT = &quot;shareByDefault&quot;;/** * Shared method to get the option value from the db * @param string $option * @return mixed */public function getOption($option) &#123;    return $this-&amp;gt;query(&quot;SELECT `value` FROM `module_option` WHERE `name` = ?&quot;, array($option));&#125;/** * Update the option value * @param string $option * @param mixed $value * @return mixed */public function setOption($option, $value) &#123;    return $this-&amp;gt;query(&quot;UPDATE `module_option` SET `value` = ? WHERE `name` = ?&quot;, array($value, $option));&#125;</code></pre><p>}<br>        </code><br>    </pre></p><p>Something along these lines. This is obviously called with something like&#8230;</p><pre>        <code class="php">$myModule = new WidgetFactoryModulesMyModule;echo $myModule-&gt;getOption($myModule::SEND_EMAILS); //sendEmails        </code>    </pre><p>Now, this is certainly not complete, you could put some checks in place within the class to ensure you&#8217;re getting a valid value, then throw an exception. You could also make the getOption method static and setup a constructor if necessary to instantiate the class. But overall, I quite like the idea. You&#8217;re able to keep a clean class, easy to maintain, and you still get autocomplete.</p><p>I&#8217;d love to hear other people&#8217;s thoughts on this topic. Let me know!</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;So, I&amp;#8217;ve been giving some thought lately to this whole idea of using custom method names vs constants within a class to prevent typ</summary>
      
    
    
    
    
  </entry>
  
  <entry>
    <title>Brackets</title>
    <link href="https://jacobt.com/brackets/"/>
    <id>https://jacobt.com/brackets/</id>
    <published>2013-06-07T23:39:34.000Z</published>
    <updated>2016-07-05T01:52:20.000Z</updated>
    
    <content type="html"><![CDATA[<p><a href='http://brackets.io'>Brackets</a><div class="link_description"><p>Adobe&#8217;s new open source editor.  This has some amazing new features for slicing PSDs.</p></div></p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;&lt;a href=&#39;http://brackets.io&#39;&gt;Brackets&lt;/a&gt;&lt;div class=&quot;link_description&quot;&gt;&lt;p&gt;Adobe&amp;#8217;s new open source editor.  This has some amazing ne</summary>
      
    
    
    
    
  </entry>
  
</feed>
