<?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>Deft Flux</title>
	<atom:link href="http://deftflux.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://deftflux.com</link>
	<description>recycling truckloads of electrons daily</description>
	<lastBuildDate>Mon, 24 May 2010 15:40:16 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>EPICOR shines</title>
		<link>http://deftflux.com/2010/03/24/epicor-shines/</link>
		<comments>http://deftflux.com/2010/03/24/epicor-shines/#comments</comments>
		<pubDate>Wed, 24 Mar 2010 15:16:12 +0000</pubDate>
		<dc:creator>Adam</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://deftflux.com/?p=50</guid>
		<description><![CDATA[During a recent ERP selection, we have had the pleasure of looking at several different systems for a local client. But today, I want to share a few of our high-level observations of Epicor.  Epicor is consistently coming in at almost double the price point of the other ERP systems that are normally considered for [...]]]></description>
			<content:encoded><![CDATA[<p>During a recent ERP selection, we have had the pleasure of looking at several different systems for a local client.  But today, I want to share a few of our high-level observations of <a href="http://epicor.com/" target="_blank">Epicor</a>.  Epicor is consistently coming in at almost double the price point of the other ERP systems that are normally considered for a business of this size.  The &#8220;problem&#8221; is that Epicor is consistenly twice as good.  First, each of the other ERP systems lacks one or two key modules &#8212; e.g. payroll, maintenance, or purchasing.  When you subtract the price of those modules from Epicor or add the price of a third-party add-on to the other ERP, the price is closer to competitive.  Then, you consider how much work the folks at Epicor have put into making the software usable (the other vendors have not kept pace) and you have to add a &#8220;time saved&#8221; factor to the price of the software.  We have seen that the Epicor designers have not rested.  They are constantly releasing improvements and we can say that &#8212; mostly in usability, but sometimes even in function &#8212; their software compares well even with players like JDEdwards and SAP.  For lack of time, we shan&#8217;t go into more details, but it wouldn&#8217;t surprise me if Epicor stay in this game despite their high price.  If they can bring it down just a touch, they may win the game.  The point &#8212; for your future selection efforts, it may pay to consider Epicor.</p>
]]></content:encoded>
			<wfw:commentRss>http://deftflux.com/2010/03/24/epicor-shines/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Agile Dragonfly Launch</title>
		<link>http://deftflux.com/2009/10/16/agile-dragonfly-launch/</link>
		<comments>http://deftflux.com/2009/10/16/agile-dragonfly-launch/#comments</comments>
		<pubDate>Fri, 16 Oct 2009 19:04:05 +0000</pubDate>
		<dc:creator>Adam</dc:creator>
				<category><![CDATA[Announcements]]></category>

		<guid isPermaLink="false">http://deftflux.com/?p=39</guid>
		<description><![CDATA[The Ruby Ruby on Rails project formerly known as Southeastern Safety Services has transitioned from a single-client custom solution to a project that is available to any insurance inspector (or any inspector for that matter) around the world.  We have called this web-based service Agile Dragonfly.  Sign-up is quick and easy and we think the [...]]]></description>
			<content:encoded><![CDATA[<p>The Ruby Ruby on Rails project formerly known as Southeastern Safety Services has transitioned from a single-client custom solution to a project that is available to any insurance inspector (or any inspector for that matter) around the world.  We have called this web-based service Agile Dragonfly.  Sign-up is quick and easy and we think the user experience is pleasant.  We would be pleased as punch if you would let your fingers do the walking on over to the <a href="http//agiledragonfly.com/" target="_blank">Agile Dragonfly</a> site and try out the live demo.</p>
]]></content:encoded>
			<wfw:commentRss>http://deftflux.com/2009/10/16/agile-dragonfly-launch/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ruby on Rails</title>
		<link>http://deftflux.com/2009/03/13/ruby-on-rails/</link>
		<comments>http://deftflux.com/2009/03/13/ruby-on-rails/#comments</comments>
		<pubDate>Fri, 13 Mar 2009 15:04:32 +0000</pubDate>
		<dc:creator>Adam</dc:creator>
				<category><![CDATA[Open Source]]></category>

		<guid isPermaLink="false">http://deftflux.com/?p=34</guid>
		<description><![CDATA[We at Deft Flux have been using Ruby on Rails for a new web site.  We are developing a web site that will help inspectors of homes and businesses do their jobs better and easier.  The site will automate the communications between the inspection requesters, the inspection managers, and the inspectors and make information transfer [...]]]></description>
			<content:encoded><![CDATA[<p>We at Deft Flux have been using Ruby on Rails for a new web site.  We are developing a web site that will help inspectors of homes and businesses do their jobs better and easier.  The site will automate the communications between the inspection requesters, the inspection managers, and the inspectors and make information transfer reliable. But back to Ruby on Rails.  After using the Ruby language and the Rails framework for a couple of months now, we are in love.  The Ruby language is terse; it is powerful. What else could you ask for?  The Rails framework makes it easy tie your object oriented application into your relational database of choice.  Moreover, Rails automates your database migrations when you upgrade your application so that you don&#8217;t accidentally bollix things.</p>
<p>We understand that some commercial languages (e.g. .NET and ColdFusion) and PHP are implementing frameworks like Rails.  We are stoked that Ruby on Rails is amongst the pioneers and that the power of the language makes it a pleasure to use.</p>
]]></content:encoded>
			<wfw:commentRss>http://deftflux.com/2009/03/13/ruby-on-rails/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Date to JDE Date</title>
		<link>http://deftflux.com/2008/11/18/date-to-jde-date/</link>
		<comments>http://deftflux.com/2008/11/18/date-to-jde-date/#comments</comments>
		<pubDate>Tue, 18 Nov 2008 16:38:09 +0000</pubDate>
		<dc:creator>Adam</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://deftflux.com/?p=14</guid>
		<description><![CDATA[I know since we posted the JDE date to real date function, everyone has been wondering where the real date to JDE date function is.  Well, &#8220;ask and you shall receive.&#8221; drop function myuser.DateToJ! CREATE function myuser.DateToJ (RealDate date) returns decimal(8,0) language sql deterministic no external action begin atomic if RealDate is null then return [...]]]></description>
			<content:encoded><![CDATA[<p>I know since we posted the JDE date to real date function, everyone has been wondering where the real date to JDE date function is.  Well, &#8220;ask and you shall receive.&#8221;</p>
<p><span id="more-14"></span></p>
<pre>
drop function myuser.DateToJ!

CREATE function myuser.DateToJ (RealDate date)
    returns decimal(8,0)
    language sql
    deterministic
    no external action
begin atomic
   if RealDate is null then
      return 0;
   else
      return ((Year(RealDate) - 1900) * 1000) + DayOfYear(RealDate);
   end if;
end!

select myuser.DateToJ(date('2008-11-18'))
from myuser.dual!
</pre>
]]></content:encoded>
			<wfw:commentRss>http://deftflux.com/2008/11/18/date-to-jde-date/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>J. D. Edwards Unit of Measure Conversion</title>
		<link>http://deftflux.com/2008/10/09/jde-unit-of-measure-conversion/</link>
		<comments>http://deftflux.com/2008/10/09/jde-unit-of-measure-conversion/#comments</comments>
		<pubDate>Thu, 09 Oct 2008 17:57:59 +0000</pubDate>
		<dc:creator>Adam</dc:creator>
				<category><![CDATA[JDEdwards]]></category>

		<guid isPermaLink="false">http://deftflux.com/?p=6</guid>
		<description><![CDATA[As long as we are discussing JD Edwards running on DB/2. Here&#8217;s another potentially useful function.  This one converts a value from one unit of measure to another based on the F41002 table.  It does this by converting the FromUOM to the primary UOM and thence to the ToUOM. --#SET DELIMITER ! drop function myuser.JDEConvert! [...]]]></description>
			<content:encoded><![CDATA[<p>As long as we are discussing JD Edwards running on DB/2.  Here&#8217;s another potentially useful function.  This one converts a value from one unit of measure to another based on the F41002 table.  It does this by converting the FromUOM to the primary UOM and thence to the ToUOM.  </p>
<p><span id="more-6"></span></p>
<pre>--#SET DELIMITER !
drop function myuser.JDEConvert!

CREATE function myuser.JDEConvert(Item decimal(10,0), FromUOM varchar(3),
                                  ToUOM varchar(3), Units decimal(15,7))
   returns decimal(15,7)
   language sql
   not deterministic
   reads sql data
begin atomic

   declare PrimaryUnits decimal(15,7);
   declare ToUnits decimal(15,7);

   /*declare exit handler for sqlexception
      return null;*/

   /* This is for the sake of speed mainly */
   if Units = 0 then
      return 0;
   end if;
   if FromUOM = ToUOM then
      return Units;
   end if;

   /* -----------------------------------------------------------------
      we know we don't have any conversion directly between the from unit
      and the to unit, so what we do is look for a conversion like so...
      FromUOM to PrimaryUOM to ToUOM
      ----------------------------------------------------------------- */
   for cfF41002 as
      select f.umum fum, f.umrum frum, round(f.umconv/10000000,7) fconv, round(f.umcnv1/10000000,7) fcnv1,
             t.umum tum, t.umrum trum, round(t.umconv/10000000,7) tconv, round(t.umcnv1/10000000,7) tcnv1
        from f41002 f join F41002 t on t.umitm = f.umitm
       where f.umitm = Item
         and FromUOM in (f.umum, f.umrum)
         and ToUOM in (t.umum, t.umrum)
   do
       /* This could be slightly simplified, but this way is easier to read I think. */
       if fum = FromUOM then
          set PrimaryUnits = Units * fcnv1;
       else
          set PrimaryUnits = (Units / fconv) * fcnv1;
       end if;

       if tum = ToUOM then
          set ToUnits = PrimaryUnits / tcnv1;
       else
          set ToUnits = (PrimaryUnits * tconv) / tcnv1;
       end if;

       return ToUnits;

       /*return ToUnits;*/

   end for;

   return null;

end!

select imsrtx,
       '1' || imuom1 || ' =', JDEConvert(imitm, imuom1, 'LB', 1) || ' lbs.',
       '1' || imuom2 || ' =', JDEConvert(imitm, imuom2, 'LB', 1) || ' lbs.'
  from f4101</pre>
<p>(In the past, we had a function that found the requested conversion by recursively searching direct conversions till it found a path between the From UOM and the ToUOM.  We all know recursion is more fun and usually requires less code.  In this case the recursive method was less efficient and created more problems than it solved, so we sadly had to rewrite to this method, which we are just as proud of.)</p>
]]></content:encoded>
			<wfw:commentRss>http://deftflux.com/2008/10/09/jde-unit-of-measure-conversion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>J. D. Edwards Date to DB/2 Date</title>
		<link>http://deftflux.com/2008/10/08/j-d-edwards-date-to-db2-date/</link>
		<comments>http://deftflux.com/2008/10/08/j-d-edwards-date-to-db2-date/#comments</comments>
		<pubDate>Wed, 08 Oct 2008 16:06:32 +0000</pubDate>
		<dc:creator>Adam</dc:creator>
				<category><![CDATA[JDEdwards]]></category>

		<guid isPermaLink="false">http://deftflux.com/?p=5</guid>
		<description><![CDATA[During nine years of blackguarding the J. D. Edwards date format (also known as JDate, also misnamed Julian Date),  I have resisted learning to write DB/2 stored procedures because the need to use them while developing OneWorld applications is minimal and OneWorld is the only context in which I have encountered DB/2.  Well, I have [...]]]></description>
			<content:encoded><![CDATA[<p>During nine years of blackguarding the J. D. Edwards date format (also known as JDate, also misnamed Julian Date),  I have resisted learning to write DB/2 stored procedures because the need to use them while developing OneWorld applications is minimal and OneWorld is the only context in which I have encountered DB/2.  Well, I have finally encountered that special confluence of  necessity and available time that produces a tool &#8212; in this case a function. I broke down, I learned, and I wrote that JDate to DB/2 Date function. Here is that code, in case you should find it useful:</p>
<p><span id="more-5"></span></p>
<pre>
-- We have to set the delimiter to ! so we can use
-- ; inside our function.  This is an intelligent comment
-- just for DB/2, but don't forget to tell your SQL tool to use !.
--#SET DELIMITER !
drop function myuser.JToDate!

CREATE function myuser.JToDate (JDEDate decimal(8,0))
    returns date
    language sql
    deterministic
    no external action
begin atomic
   if JDEDate = 0 then
      return null;
   else
      return date(char(1900000 + Round(JDEDate, -3) + (JDEDate - Round(JDEDate, -3))));
   end if;
end!

select JToDate(108098), JToDate(0), JToDate(imupmj)
from F4101!</pre>
<p>I recommend the <a href="http://mysite.verizon.net/Graeme_Birchall/id1.html">DB/2 SQL Cookbook</a> as a pleasant mix of examples and syntax flows from which to learn.</p>
<p align="right">- Adam</p>
]]></content:encoded>
			<wfw:commentRss>http://deftflux.com/2008/10/08/j-d-edwards-date-to-db2-date/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Gnu For Windows</title>
		<link>http://deftflux.com/2008/10/02/gnu-for-windows/</link>
		<comments>http://deftflux.com/2008/10/02/gnu-for-windows/#comments</comments>
		<pubDate>Thu, 02 Oct 2008 18:26:39 +0000</pubDate>
		<dc:creator>Adam</dc:creator>
				<category><![CDATA[Open Source]]></category>

		<guid isPermaLink="false">http://deftflux.com/?p=4</guid>
		<description><![CDATA[We here at Deft Flux have always preferred Unix style operating systems and commands to Microsoft.  The problem was that our clients always use Microsoft operating systems and until recently, it was always too much of a hassle to get gnu utilities up and running on a Microsoft workstation, especially when you&#8217;re moving to a [...]]]></description>
			<content:encoded><![CDATA[<p>We here at Deft Flux have always preferred Unix style operating systems and commands to Microsoft.  The problem was that our clients always use Microsoft operating systems and until recently, it was always too much of a hassle to get gnu utilities up and running on a Microsoft workstation, especially when you&#8217;re moving to a new one every few months.  Well, since the good folks at gnu started compiling programs for windows and providing installation programs (to cover dependancies), we decided every workstation needs gnu utilities.  First, we install gvim because it is the best text editor ever written.  Then we install grep, core utilities, and finally sed.  Thus we have assembled, on a Microsoft workstation, a group of what are arguably the most useful programs ever written, pound for pound.</p>
<p><span id="more-4"></span>Now when you are using gvim, you are editing files faster than ever.  But when you are using grep and sed and so on, you get a request to remove commas from the names of 20,000 files and you say &#8220;with pleasure.&#8221;<code>dir /b | grep , | \<br />
sed -e "s/^.*/\d034&amp;\d034 /;h" -e "s/,/_/;x" \<br />
-e "s/^.*/mv &amp;/;G" -e "s/\n//"</code></p>
<ul>
<li>We used dir at the beginning because it runs faster than ls in a Windows directory with 20,000 files.  One could just as easily use ls.</li>
<li>Even though we could have done the same thing with sed, we used grep just to take away one sed command.</li>
<li>We broke the sed commands into pieces because we were having problems with how Windows was passing arguments to sed.  This also makes the line [slightly] more readable.</li>
<li>The sed edits operate on this wise:
<ul>
<li>Add quotation marks to the beginning and the end of the file name.</li>
<li>Save the resulting string in a buffer (clipboard).</li>
<li>Replace commas in the file name with underscores.</li>
<li>Exchange the fixed file name with the buffer.  Now we&#8217;re working with the original file name.</li>
<li>Add the mv command before the original file name.</li>
<li>Paste the fixed filename after the mv and original file name.</li>
</ul>
</li>
</ul>
<p>Redirect this output to a file and you have a script to remove all of those pesky commas.  Sweet?  We think so.</p>
]]></content:encoded>
			<wfw:commentRss>http://deftflux.com/2008/10/02/gnu-for-windows/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Defeat Microsoft Access&#8217; SQL Reformatter</title>
		<link>http://deftflux.com/2008/09/22/defeat-microsoft-access-sql-reformatter/</link>
		<comments>http://deftflux.com/2008/09/22/defeat-microsoft-access-sql-reformatter/#comments</comments>
		<pubDate>Mon, 22 Sep 2008 20:52:22 +0000</pubDate>
		<dc:creator>Adam</dc:creator>
				<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://deftflux.com/?p=21</guid>
		<description><![CDATA[Many of us would just rather not use Microsoft Access for anything, but there are those times when you are forced to do it. In times like these, you have a problem. In times like these, you need a solution. The problem is that if you write SQL that is at all interesting, it quickly [...]]]></description>
			<content:encoded><![CDATA[<p>Many of us would just rather not use Microsoft Access for anything, but there are those times when you are forced to do it.  In times like these, you have a problem.  In times like these, you need a solution.  The problem is that if you write SQL that is at all interesting, it quickly becomes unreadable.  If you try to beautify your SQL with some nice line breaks and indentation, Microsoft Access will &#8220;fix&#8221; that for you the next time you open your query.  We struggled with this for some time till we realized that Access will not touch SQL inside of an inline view.  So your solution is to put your SQL inside of an inline view.  Instead of seeing this after you save and open your query:</p>
<pre>SELECT field1, field2, field3, field4, field5
FROM table1 a inner join table2 b on field1 = field2 and field3 = field4
WHERE field1 = 'junk' and field3 = 'that' and field5 is not null</pre>
<p>You could see this:</p>
<pre>select * from (
SELECT field1, field2,
       field3, field4, field5
  FROM table1 a inner join table2 b on field1 = field2
                                   and field3 = field4
 WHERE field1 = 'junk'
   and field3 = 'that'
   and field5 is not null
) as a</pre>
<p>The only problem is that Access gets confused about the parenthesis around the view and replaces them with brackets.  For us, replacing the brackets with parenthesis is a better situation than manually beautifying the code all over again every time we open it.</p>
]]></content:encoded>
			<wfw:commentRss>http://deftflux.com/2008/09/22/defeat-microsoft-access-sql-reformatter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JDEdwards Data Dictionary Where Used</title>
		<link>http://deftflux.com/2008/06/17/jdedwards-data-dictionary-where-used/</link>
		<comments>http://deftflux.com/2008/06/17/jdedwards-data-dictionary-where-used/#comments</comments>
		<pubDate>Tue, 17 Jun 2008 02:09:59 +0000</pubDate>
		<dc:creator>Adam</dc:creator>
				<category><![CDATA[JDEdwards]]></category>

		<guid isPermaLink="false">http://deftflux.com/?p=3</guid>
		<description><![CDATA[If you have ever used the JDEdwards cross-reference facility in an attempt to find where a certain table column is used, you understand that it can be difficult, especially when the alias for your column is common. Let&#8217;s say you have a custom table [F550001] that has a column [URRF], and you need to find [...]]]></description>
			<content:encoded><![CDATA[<p>If you have ever used the JDEdwards cross-reference facility in an attempt to find where a certain table column is used, you understand that it can be difficult, especially when the alias for your column is common.</p>
<p>Let&#8217;s say you have a custom table [F550001] that has a column [URRF], and you need to find all programs that use the F550001.URRF.  Well, you may have 50 custom programs that use F550001 and there may be 250 programs, native and custom, that use the alias URRF.  You can see the difficulty in searching through 50 programs to find 5 that reference F550001.URRF.</p>
<p>If, however, you take the 50 custom programs that reference F550001 and export them to the spreadsheet program of your choice and then export the 250 programs that reference the URRF to another spreadsheet, you can filter the 50 references to F550001 down to only those programs that also reference URRF.  Now, you still may have a few extra programs in your list &#8212; programs that don&#8217;t reference F550001.URRF &#8212; but you now have a much smaller list to work from.</p>
]]></content:encoded>
			<wfw:commentRss>http://deftflux.com/2008/06/17/jdedwards-data-dictionary-where-used/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hello world!</title>
		<link>http://deftflux.com/2007/06/04/hello-world/</link>
		<comments>http://deftflux.com/2007/06/04/hello-world/#comments</comments>
		<pubDate>Mon, 04 Jun 2007 14:34:38 +0000</pubDate>
		<dc:creator>Adam</dc:creator>
				<category><![CDATA[Announcements]]></category>

		<guid isPermaLink="false">http://deftflux.com/?p=1</guid>
		<description><![CDATA[Hello world.  Deft Flux is now a real company.]]></description>
			<content:encoded><![CDATA[<p>Hello world.  Deft Flux is now a real company.</p>
]]></content:encoded>
			<wfw:commentRss>http://deftflux.com/2007/06/04/hello-world/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic page generated in 0.406 seconds. -->
<!-- Cached page generated by WP-Super-Cache on 2010-09-03 15:21:39 -->
<!-- Compression = gzip -->