<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" xml:lang="en"><title type="text">xenoterracide</title><link rel="alternate" type="text/html" href="http://www.xenoterracide.com/" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/xenoterracide" /><subtitle type="html">Caleb Cushing's Blog</subtitle><author><name>Caleb Cushing</name><email>noreply@blogger.com</email><uri>https://plus.google.com/109135658789518811986</uri></author><updated>2013-05-25T17:30:48+00:00</updated><generator uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/">190</openSearch:totalResults><openSearch:startIndex xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/">1</openSearch:startIndex><openSearch:itemsPerPage xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/">5</openSearch:itemsPerPage><feedburner:info uri="xenoterracide" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><id>tag:blogger.com,1999:blog-2238114716501996649</id><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-nc/3.0/" /><feedburner:emailServiceId>xenoterracide</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><entry><title type="text">Moose Interface Pattern with parameter enforcement</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/xenoterracide/~3/4YfwTILgmx0/moose-interface-pattern-with-parameter.html" /><category term="Interfaces" /><category term="object oriented design" /><category term="perl" /><category term="Moose" /><author><name>Caleb Cushing</name><email>noreply@blogger.com</email><uri>https://plus.google.com/109135658789518811986</uri></author><updated>2013-05-25T10:30:48-07:00</updated><id>tag:blogger.com,1999:blog-2238114716501996649.post-456727498208480776</id><content type="html">Moose interfaces are problematic, for 2 reasons.



1. They are compile time, but runtime features such as attribute delegation could provide the interface (role ordering is the real problem here)

2. They don't ensure anything other than the method name.



I think this problem can be solved better by using around instead of requires


Package Interface::Create;
use Moose::Role;
use Type::Params    qw( compile       );
use Types::Standard qw( slurpy HashRef);
 
around create =&gt; sub {
  my...&lt;br/&gt;
&lt;br/&gt;
...&lt;img src="http://feeds.feedburner.com/~r/xenoterracide/~4/4YfwTILgmx0" height="1" width="1"/&gt;</content><app:edited xmlns:app="http://www.w3.org/2007/app">2013-05-25T13:30:48.581-04:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.xenoterracide.com/2013/05/moose-interface-pattern-with-parameter.html</feedburner:origLink></entry><entry><title type="text">Inversion of Control Principle</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/xenoterracide/~3/FBbgM1idh5o/inversion-of-control-principle.html" /><category term="Dependency Injection" /><category term="Bread::Board" /><category term="object oriented design" /><category term="Inversion of Control" /><category term="perl" /><category term="ironman" /><author><name>Caleb Cushing</name><email>noreply@blogger.com</email><uri>https://plus.google.com/109135658789518811986</uri></author><updated>2013-01-03T18:00:04-08:00</updated><id>tag:blogger.com,1999:blog-2238114716501996649.post-5118443143723655439</id><content type="html">If you're not familiar with the term "Inversion of Control"( IoC ) or "Dependency Injection" ( DI )you may wish to start with Martin Fowler's post on the subject. If you're looking for a way to do it with Perl,  Bread::Board is the way to go. This post however is about the theory behind it, and a path to grokitude if you're finding the concepts challenging. I should advise that I am not yet a buddha on implementation.

What is it?


Now that you're familiar with an understanding of the terms...&lt;br/&gt;
&lt;br/&gt;
...&lt;img src="http://feeds.feedburner.com/~r/xenoterracide/~4/FBbgM1idh5o" height="1" width="1"/&gt;</content><app:edited xmlns:app="http://www.w3.org/2007/app">2013-01-03T21:00:04.231-05:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.xenoterracide.com/2013/01/inversion-of-control-principle.html</feedburner:origLink></entry><entry><title type="text">Override DNS on a Linux system without root</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/xenoterracide/~3/Y7ya7yEYGeU/override-dns-on-linux-system-without.html" /><category term="dns" /><category term="Linux" /><category term="networking" /><category term="ironman" /><author><name>Caleb Cushing</name><email>noreply@blogger.com</email><uri>https://plus.google.com/109135658789518811986</uri></author><updated>2012-12-06T18:00:02-08:00</updated><id>tag:blogger.com,1999:blog-2238114716501996649.post-9007922455383679943</id><content type="html">I had this problem for a long time, and no one ever proposed a good solution. Recently I got a new answer on my, almost 2 year old, Unix and Linux StackExchange question. This information seems very obscure and so I thought I'd share it, if you too have had this problem and were unable to find this, or at least found finding it hard, consider upvoting the answer.
Problem

You're using a Linux system that you don't have root on, you need to override the DNS of the system. You usually want to do...&lt;br/&gt;
&lt;br/&gt;
...&lt;img src="http://feeds.feedburner.com/~r/xenoterracide/~4/Y7ya7yEYGeU" height="1" width="1"/&gt;</content><app:edited xmlns:app="http://www.w3.org/2007/app">2012-12-06T21:00:02.538-05:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://www.xenoterracide.com/2012/12/override-dns-on-linux-system-without.html</feedburner:origLink></entry><entry><title type="text">Business::CyberSource API is stabilizing as of 0.7.x</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/xenoterracide/~3/hueCaQAnsno/businesscybersource-api-is-stabilizing.html" /><category term="cpan" /><category term="object oriented design" /><category term="Business::CyberSource" /><category term="XML::Compile::SOAP" /><category term="perl" /><category term="ironman" /><author><name>Caleb Cushing</name><email>noreply@blogger.com</email><uri>https://plus.google.com/109135658789518811986</uri></author><updated>2012-11-11T02:38:04-08:00</updated><id>tag:blogger.com,1999:blog-2238114716501996649.post-7516589120848859746</id><content type="html">Business::CyberSource (BC) has been going through API changes for a while now. If you're using it you've probably noticed this and wondered why? The reason behind it was when I first made it I wanted it to be extremely simple to use, and I was realistically a Junior programmer. Over the past year I learned a lot about API design and Object Oriented Programming, as well as payment gateways and credit card transaction processing. From the first production ready release I knew that it had design...&lt;br/&gt;
&lt;br/&gt;
...&lt;img src="http://feeds.feedburner.com/~r/xenoterracide/~4/hueCaQAnsno" height="1" width="1"/&gt;</content><app:edited xmlns:app="http://www.w3.org/2007/app">2012-11-11T05:38:04.042-05:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.xenoterracide.com/2012/11/businesscybersource-api-is-stabilizing.html</feedburner:origLink></entry><entry><title type="text">Interface Driven Design</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/xenoterracide/~3/xCPBozAfdIY/interface-driven-design.html" /><category term="Interfaces" /><category term="object oriented design" /><category term="Business::CyberSource" /><category term="perl" /><category term="ironman" /><author><name>Caleb Cushing</name><email>noreply@blogger.com</email><uri>https://plus.google.com/109135658789518811986</uri></author><updated>2013-05-25T10:30:35-07:00</updated><id>tag:blogger.com,1999:blog-2238114716501996649.post-5714989369694273666</id><content type="html">What is Interface Driven Design?


Interface Driven Design simply means that you should design your software around a flexible, easy to use, easy to understand interface. This is easy to achieve if your objects are of SOLID design. There is a simple table and reference link if you're not familiar with the principles.

My Work is SOLID already


Then you're on the right track but it's not enough if you don't fully marry the concept to best practices. I've seen quite a bit of work that's SOLID...&lt;br/&gt;
&lt;br/&gt;
...&lt;img src="http://feeds.feedburner.com/~r/xenoterracide/~4/xCPBozAfdIY" height="1" width="1"/&gt;</content><app:edited xmlns:app="http://www.w3.org/2007/app">2013-05-25T13:30:35.883-04:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">4</thr:total><feedburner:origLink>http://www.xenoterracide.com/2012/11/interface-driven-design.html</feedburner:origLink></entry></feed>
