<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>The Integration Engineer</title>
	<atom:link href="http://www.theintegrationengineer.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.theintegrationengineer.com</link>
	<description>When it just has to work.</description>
	<lastBuildDate>Thu, 17 May 2012 16:01:55 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<item>
		<title>Sending Email with Perl</title>
		<link>http://www.theintegrationengineer.com/sending-email-with-perl/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=sending-email-with-perl</link>
		<comments>http://www.theintegrationengineer.com/sending-email-with-perl/#comments</comments>
		<pubDate>Wed, 26 May 2010 16:05:27 +0000</pubDate>
		<dc:creator>Roy</dc:creator>
				<category><![CDATA[PerlTips]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[Script]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.theintegrationengineer.com/?p=108</guid>
		<description><![CDATA[Recently I needed to send our team an email.  Yeah okay, so I email a lot, but this was different.  I needed to send my team an email from a server that was not anywhere near a mail server, and that was pretty paired down.  I did a bunch of Googling for answers and came [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.theintegrationengineer.com/wp-content/uploads/2008/09/envelope.jpg"><img class="alignleft size-full wp-image-28" title="envelope" src="http://www.theintegrationengineer.com/wp-content/uploads/2008/09/envelope.jpg" alt="envelope Sending Email with Perl" width="257" height="75" /></a>Recently I needed to send our team an email.  Yeah okay, so I email a lot, but this was different.  I needed to send my team an email from a server that was not anywhere near a mail server, and that was pretty paired down.  I did a bunch of Googling for answers and came up with quite a few that didn&#8217;t work.</p>
<p>I hate it when that happens.  So as a form of perl tutorial, I am posting my working script here as an example of sending email from a limited server using perl and the MIME::Lite library.</p>
<p><span id="more-108"></span></p>
<ul>
<li>Server:  CentOS 5.2</li>
<li>Internet connection: Present</li>
<li>Task:  Automation Scripts written in Perl</li>
</ul>
<p>So I had perl, but how to send an email.  Well the first thing, is get the mail libraries.  On a Red Hat based server, this is yum install perl-MIME-tools.  You may have a different way.  But this is required for the sending messages in MIME.  (if you can&#8217;t install perl and perl modules, you may want to use CPAN)</p>
<p>Then I wrote this perl script:</p>
<p>&#8212;-begin code  &#8212;-</p>
<p style="padding-left: 30px;">#!/usr/bin/perl<br />
#declare that you are using the MIME library at the top.<br />
use MIME::Lite;</p>
<p style="padding-left: 30px;">#list files in /Email into array<br />
opendir MYDIR, &#8220;/share/Email/&#8221; or die &#8220;couldn&#8217;t open $! \n&#8221;;</p>
<p style="padding-left: 30px;">#This will only grab files with &#8220;PDF&#8221; in their name.</p>
<p style="padding-left: 30px;">#this will eliminate other files, and more importantly, &#8220;.&#8221; and &#8220;..&#8221; that are directories.<br />
@contents = grep(/pdf/,readdir (MYDIR));<br />
closedir MYDIR;</p>
<p style="padding-left: 30px;">#we want to know how many files are in our list.<br />
$fileCount = @contents;</p>
<p style="padding-left: 30px;">#loop array to sendmail function<br />
for ($i = 0; $i &lt; $fileCount; ++$i){<br />
$fileName = &#8220;/share/Email&#8221; . $contents[$i];<br />
$Subject = &#8220;Alert Request for: &#8221; . $contents[$i];<br />
#print $fileName . &#8220;\n&#8221;;</p>
<p style="padding-left: 30px;">my $msg = MIME::Lite-&gt;new(<br />
From    =&gt; &#8216;mail@yourserver.com&#8217;,<br />
To    =&gt; &#8216;roy@TheIntegrationEngineer.com&#8217;,<br />
Cc    =&gt; &#8221;,<br />
Subject    =&gt; $Subject,<br />
Type    =&gt; &#8216;multipart/mixed&#8217;,<br />
);</p>
<p style="padding-left: 30px;">$msg-&gt;attach(<br />
Type    =&gt; &#8216;Text&#8217;,<br />
Data    =&gt; &#8216;Please read this file&#8217;,<br />
);</p>
<p style="padding-left: 30px;">$msg-&gt;attach(<br />
Type    =&gt; &#8216;Data&#8217;,<br />
Path    =&gt; $fileName,<br />
Filename    =&gt; $contents[$i],<br />
);</p>
<p style="padding-left: 30px;">$msg-&gt;send(&#8216;smtp&#8217;, &#8216;mail.yourserver.com&#8217;);</p>
<p style="padding-left: 30px;">#Remove File<br />
$cmd = &#8220;mv &#8221; . $fileName . &#8221; /alert/backup/&#8221; . $filename . &#8220;.&#8221; . epoc . &#8221; \n&#8221;;<br />
print $cmd;<br />
system ($cmd);<br />
}</p>
<p>&#8212;- end code &#8212;-</p>
<p><strong>Summary</strong></p>
<p>Basically this script polls the specified directory for PDF files.  If it finds one or more it grabs each of them and emails them to me.  Then, as a last step, it moves the file to a backup location to be archived.</p>
<p>There are probably other ways to do this, but this is a script that I threw together and have working on one of my severs.  If anyone want to add some corrections to this I will try them out and post my results.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.theintegrationengineer.com/sending-email-with-perl/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Business Blogs</title>
		<link>http://www.theintegrationengineer.com/business-blogs/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=business-blogs</link>
		<comments>http://www.theintegrationengineer.com/business-blogs/#comments</comments>
		<pubDate>Mon, 20 Jun 2011 12:49:56 +0000</pubDate>
		<dc:creator>Roy</dc:creator>
				<category><![CDATA[Integration Tips]]></category>
		<category><![CDATA[Social Media]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[communication]]></category>
		<category><![CDATA[social media]]></category>

		<guid isPermaLink="false">http://www.theintegrationengineer.com/?p=2182</guid>
		<description><![CDATA[Does your business have a blog? It should. And it really doesn&#8217;t require that you turn your whole business into something online, or even choose between spending hours writing posts or hiring someone to do it for you. In truth, there is no one right way, or really any group of right ways to do [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.theintegrationengineer.com/wp-content/uploads/2011/05/blogging_logos.png"><img class="alignleft size-thumbnail wp-image-2200" title="blogging_logos" src="http://www.theintegrationengineer.com/wp-content/uploads/2011/05/blogging_logos-150x150.png" alt="blogging logos 150x150 Business Blogs" width="150" height="150" /></a>Does your business have a blog?  It should.</p>
<p>And it really doesn&#8217;t require that you turn your whole business into something online, or even choose between spending hours writing posts or hiring someone to do it for you.</p>
<p><span id="more-2182"></span></p>
<p>In truth, there is no one right way, or really any group of right ways to do a blog.  And for your business, you should do whatever works well for your business.</p>
<p>A blog is more powerful than just a website or webstore.  It is a place for you to share information with your customers and potential customers in a more permanently accessible way than twitter and facebook status updates.  And even email or paper newsletters.  The posts on a blog can persist and be searchable both by Google and by site visitors.  This can greatly expand the traction with people interested in you, your business, and your products and services.</p>
<p>Common concerns and questions are these:</p>
<p><strong>How often do I post?</strong></p>
<p>This is totally open.  Some blogs are updated multiple times a day.  Others are updated monthly.  And both of these are fine if that is what works.  I only have two bits of advice.</p>
<ol>
<li>Start off with 10 posts ready to go at launch.  This will keep your blog from looking empty for the first few weeks or months as you only have one or two posts up.</li>
<li>Try to be consistent.  Don&#8217;t start off posting 3 times a day, and then switch to once a month avert a few days.  Learn how fast, how long, and how much time you can spend writing the 10 pre-launch posts to gage how often you will be posting after launch and then try to stick with it.</li>
</ol>
<p><strong>What do I write about?</strong></p>
<p>Really, this can be anything you want.  I recommend sticking with information that is public in nature and not internal/private.  But if your business is best served by talking about your dog, go ahead.  And if you want to keep it business news only, (and you are not a dog trainer) then leave the dog out of it and talk business.</p>
<p>There is no wrong answer.</p>
<p><strong>Where should it be hosted?</strong></p>
<p>If you are an on line store or business that is hosting its own website and tools, you probably want to host it yourself.  (I recommend wordpress if you are hosting it yourself.)  But if you are an author, or someone that really does not want to do too much customization to your site, a hosted solution like posterous.com, tumblr.com or blogger.com will be fine.  keeps you from getting caught up in any technical stuff that you don&#8217;t want to do, while at the same time putting your content up on stable and fast servers.</p>
<p>And you can get your own domain name associated with the free hosted blogs if you want to.  Or not if you don&#8217;t want to mess with it.</p>
<p>Again, there is no wrong answer.</p>
<p><strong>There are lots of options:</strong></p>
<p>But don&#8217;t get intimidated.  There are also lots of people out there talking about the right ways to blog.  Some of them are good.  Others are crackpots. Do some searches and read some of them as you are getting started.  You should be able to tell the difference fairly quickly.</p>
<p>Don&#8217;t get overwhelmed, and don&#8217;t assume that copying someone else&#8217;s pattern will work for you and lead to internet blogging millions.  Find what works for you.  Then do that.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.theintegrationengineer.com/business-blogs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Accountability of EDI Transactions</title>
		<link>http://www.theintegrationengineer.com/accountability-of-edi-transactions/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=accountability-of-edi-transactions</link>
		<comments>http://www.theintegrationengineer.com/accountability-of-edi-transactions/#comments</comments>
		<pubDate>Wed, 23 Jun 2010 16:22:36 +0000</pubDate>
		<dc:creator>Roy</dc:creator>
				<category><![CDATA[b2b]]></category>
		<category><![CDATA[EDI]]></category>
		<category><![CDATA[997]]></category>
		<category><![CDATA[accountability]]></category>
		<category><![CDATA[AS2]]></category>
		<category><![CDATA[BPM]]></category>
		<category><![CDATA[gaurenteed delivery]]></category>
		<category><![CDATA[how to hold accountability of edi transactions with the supplier]]></category>
		<category><![CDATA[medical]]></category>
		<category><![CDATA[questions]]></category>
		<category><![CDATA[Supply Chain]]></category>
		<category><![CDATA[transport]]></category>

		<guid isPermaLink="false">http://www.theintegrationengineer.com/?p=1293</guid>
		<description><![CDATA[EDI and other data that is part of an e-commerce transaction needs to get to where it needs to go in a reliable way.  It needs to get there.  Get there once.  And be able to let the sender know if there was a problem with it, either not getting there, or being corrupted, in [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.theintegrationengineer.com/wp-content/uploads/2008/10/handshake.jpg"><img class="alignleft size-thumbnail wp-image-46" title="handshake" src="http://www.theintegrationengineer.com/wp-content/uploads/2008/10/handshake-150x150.jpg" alt="handshake 150x150 Accountability of EDI Transactions" width="150" height="138" /></a>EDI and other data that is part of an e-commerce transaction needs to get to where it needs to go in a reliable way.  It needs to get there.  Get there once.  And be able to let the sender know if there was a problem with it, either not getting there, or being corrupted, in either case triggering a resend or some other remediation.</p>
<p><span id="more-1293"></span>Early in my integration career I was working on a medical supply chain.  Accuracy was important as you can imagine.  And there was a good deal of stress that we shared as we brought our products on-line and let them encounter real data.</p>
<p>We tried to ensure that the data that we sent to suppliers was received, and when things when wrong we were on the phone quickly asking for confirmation that orders were received.  As time when on we became better both at reliably getting data to the correct place, and in determining when problems where really problems.</p>
<blockquote><p>&#8220;There was one Vendor that sold capital equipments.  So they received few orders, but when they did, their orders were for a high dollar items.  They also kept shutting down the system that we sent orders to.  I think years went by where every order was accompanied by a phone call to their systems administrator asking that they re-boot their server.&#8221;</p></blockquote>
<p><strong>The EDI way</strong></p>
<p>The easiest and most EDI like way to establish accountability of EDI transactions is the use of a 997 transaction.  Basically a 997 works as an acknowledgment.  The name of this document actually is Functional Acknowledgment.  So we are acknowledging that a specific functional EDI component was received, and possibly how it was received.</p>
<p>If you are versed in the EDI enveloping levels you have already realized the  link of between the 997 and the <a href="http://www.theintegrationengineer.com/edi-enveloping-part-three-the-gs/">GS level of the EDI envelope</a>.  Also you may remember that you can request a 997 be returned for your transaction in the <a href="http://www.theintegrationengineer.com/edi-enveloping-part-two-the-isa/">ISA segment</a> in ISA_14.  But merely setting up your ISA to request a 997 does not actually force your trading partner to comply.   Your trading partner may not be able to, or may not wish to return a 997 for either business or technology reasons.</p>
<p>Assuming that you are able to get a 997 back.  Just receiving the 997 does not mean that all is well with your transaction.  The 997 is an EDI transaction.  It can contain data indicating just the success of receiving the data, or a few validation levels indicating data corruption in transit or rejection for business process reasons.</p>
<p><strong>The Transport Technology way</strong></p>
<p>Another way is to place the accountability on the transport of the message.  Using AS2 or other transport technologies that attempt to guarantee delivery of messages, it is possible to extend our reliable message solution to transactions of multiple types.  AS2 and other transport solutions return an MDN or message disposition notification letting the transporting party know that its message has been received.</p>
<p><strong>The BPM way</strong></p>
<p>In spite of the facility of EDI to process and utilize 997s and of AS2 to utilize MDNs, the most exciting method of assuring message delivery and accountability is utilizing business intelligence.  For me, I remember a system that we developed to help us with the health care supply chain.  We simple began tracking the response time that was typical for each of our supplier trading partners.  After gathering trending data, we applied alerts when responses were overdue by a specified degree of variance from the norm.</p>
<p>Since this process relied on the past 6 months of performance as the baseline, it was adaptive to changes in the vendor.  We could also manually change the amount and degree if we started getting false alerts.  In this way we had a way to react to failed transaction without requiring agreement and arrangements with the trading partner to confirm receipt or processing of transactions.</p>
<p><strong>The Business Agreement</strong></p>
<p>Even in cases where you have implemented a BPM process to alert to failed transactions, you have to have an agreement and arrangement with your trading partners that allow you to deal with failures in transmission and processing of your e-commerce transactions.  At a minimum this needs to include contact information for support teams on each side of the transaction.  It does no good to know there is a problem with a transaction but to be unable to solve the problem because the other party is unavailable.</p>
<p>In the end, it is what you have agreed with our trading partner that make the sender or receiver responsible for processing the transaction.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.theintegrationengineer.com/accountability-of-edi-transactions/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Perl Tricks &#8211; timestamps</title>
		<link>http://www.theintegrationengineer.com/perl-tricks-timestamps/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=perl-tricks-timestamps</link>
		<comments>http://www.theintegrationengineer.com/perl-tricks-timestamps/#comments</comments>
		<pubDate>Thu, 29 Apr 2010 15:17:53 +0000</pubDate>
		<dc:creator>Roy</dc:creator>
				<category><![CDATA[PerlTips]]></category>
		<category><![CDATA[date]]></category>
		<category><![CDATA[date stamp]]></category>
		<category><![CDATA[datestamp]]></category>
		<category><![CDATA[localtime]]></category>
		<category><![CDATA[log]]></category>
		<category><![CDATA[logging]]></category>
		<category><![CDATA[Per Tip]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[time]]></category>
		<category><![CDATA[time-stamp]]></category>
		<category><![CDATA[timestamp]]></category>

		<guid isPermaLink="false">http://www.theintegrationengineer.com/?p=1069</guid>
		<description><![CDATA[Running perl integration tools we have two basic needs for time stamps and date time values. First, it is useful to note the time that something is happening in a log file so that we don&#8217;t have to guess. Second, it is also useful to append the date to a file name to keep our [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.theintegrationengineer.com/wp-content/uploads/2009/11/stopwatch.jpg"><img class="alignleft size-thumbnail wp-image-975" title="stopwatch" src="http://www.theintegrationengineer.com/wp-content/uploads/2009/11/stopwatch-150x150.jpg" alt="stopwatch 150x150 Perl Tricks   timestamps" width="150" height="150" /></a>Running perl integration tools we have two basic needs for time stamps and date time values.</p>
<p>First, it is useful to note the time that something is happening in a log file so that we don&#8217;t have to guess.</p>
<p>Second, it is also useful to append the date to a file name to keep our logs in daily files not just one long never ending file.</p>
<p>Here is a function that I use to do both of these things.<span id="more-1069"></span></p>
<hr />sub timestamp($)<br />
{</p>
<p style="padding-left: 30px;">#return pre-formatted timestamps based on the localtime()<br />
#&#8221;date&#8221; asks for a Month-Day-Year string.<br />
#&#8221;date&#8221; time asks for the date and time.<br />
#anything else returns the epoch date.<br />
my $param = $_[0];<br />
if ($param eq &#8220;date&#8221;)<br />
{</p>
<p style="padding-left: 60px;">@time = split(/\ /, localtime());<br />
$return = $time[1] . &#8220;-&#8221; . $time[2] . &#8220;-&#8221; . $time[4];<br />
return $return;</p>
<p style="padding-left: 30px;">}<br />
elsif ($param eq &#8220;datetime&#8221;)<br />
{</p>
<p style="padding-left: 60px;">return localtime();</p>
<p style="padding-left: 30px;">}<br />
else<br />
{</p>
<p style="padding-left: 60px;">return time();</p>
<p style="padding-left: 30px;">}</p>
<p>}</p>
<h2>How to use</h2>
<p>When we call this function within a perl script we will want one of three things back.</p>
<p>1.  If we want the date or DATESTAMP, we will call it in this manner,</p>
<blockquote><p>timestamp(date)</p></blockquote>
<p>and it will return the formatted date that we have formatted like this, &#8220;Mar-29-2010&#8243;</p>
<p>This call can be withing a string like a file name   $filename = &#8220;Log&#8221; . timestamp(date) . &#8220;.log&#8221;;  or just set as a variable, $date = timestamp(date);</p>
<p>2.  If we want the date and time or TIMESTAMP, we will call it in this manner,</p>
<blockquote><p>timestamp(datetime)</p></blockquote>
<p>and it will return a formatted string like this, &#8220;Thu Apr 15 17:01:10 2010&#8243;</p>
<p>This can be called the same way.  However, don&#8217;t use this in a file name.  It  contains spaces.  And having a unique file every second might not be useful to you.</p>
<p>3. If we just want the epoc date back, we just call it in this maner,</p>
<blockquote><p>timestamp()</p></blockquote>
<p>but why bother.  I wanted the function to return something all the time so that you can tell when you have the parameter flag misspelled, but you could just you <em>time</em>() for that.</p>
<p>In any case this is a function that I like to use when I am creating timestamps for my log files.  It is easily extended by adding new <em>elsif </em>conditions and handling the <em>localtime</em>() or <em>time</em>() with a different split or regular expression.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.theintegrationengineer.com/perl-tricks-timestamps/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Communication Podcast</title>
		<link>http://www.theintegrationengineer.com/communication-podcast/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=communication-podcast</link>
		<comments>http://www.theintegrationengineer.com/communication-podcast/#comments</comments>
		<pubDate>Mon, 13 Jun 2011 23:02:15 +0000</pubDate>
		<dc:creator>Roy</dc:creator>
				<category><![CDATA[Integration Tips]]></category>
		<category><![CDATA[Social Media]]></category>
		<category><![CDATA[communication]]></category>
		<category><![CDATA[podcast]]></category>
		<category><![CDATA[social media]]></category>

		<guid isPermaLink="false">http://www.theintegrationengineer.com/?p=2186</guid>
		<description><![CDATA[Sometimes you just don&#8217;t have time to check up on your Facebook or Twitter feed.  Life happens, you get busy, and you can&#8217;t stop and focus on reading a webpage.  Sometimes you want to keep up with the current information, but you have to prioritize.  But what if there were a way to communicate with [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.theintegrationengineer.com/wp-content/uploads/2011/05/Podcast_Logo.jpg"><img class="alignleft size-thumbnail wp-image-2202" title="Podcast_Logo" src="http://www.theintegrationengineer.com/wp-content/uploads/2011/05/Podcast_Logo-150x150.jpg" alt="Podcast Logo 150x150 Communication Podcast" width="150" height="150" /></a></p>
<p>Sometimes you just don&#8217;t have time to check up on your Facebook or Twitter feed.  Life happens, you get busy, and you can&#8217;t stop and focus on reading a webpage.  Sometimes you want to keep up with the current information, but you have to prioritize.  But what if there were a way to communicate with people that couldn&#8217;t stop and read what you are writing on the newsletter, or blog, or even twitter?  Well there is, and it is called a Podcast.</p>
<p>I love it when companies with tools that I use put their newsletters out in the form of a Podcast.  I click on the Podcast and can keep working while I listen to the Podcast.</p>
<p><span id="more-2186"></span>The human brain can process language 10 times more than it can read.  And 50 times faster than a person can talk.  Thats why most people can read and hear at the same time.  (talking an listening is still hard, but that is for a different reason that the speed of the brain processing language.</p>
<p>Written communication like a post, email, tweet etc are generally read with the eyes.  As such there are some activities that are incompatible with these.  Jogging and driving are times and places where the body, including eyes, are occupied.  But the mind is not.  If you provide a Podcast, your users and customers will be able to fit your news and updates into the activities that they have available and not have to fit their activities around your information.</p>
<p>Also, emotion and humor don&#8217;t translate well into print.  But they are effectively communicated when spoken.  This allows you to engage your users and customers on a new level.</p>
<p>And getting and keeping engagement with your users and customers gives your product or service time to take root.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.theintegrationengineer.com/communication-podcast/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Page Caching using disk: enhanced
Database Caching using disk: basic
Object Caching 1083/1196 objects using disk: basic

Served from: www.theintegrationengineer.com @ 2012-05-17 09:28:30 -->
