<?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:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" gd:etag="W/&quot;D08HQ3o7fip7ImA9WhRVE08.&quot;"><id>tag:blogger.com,1999:blog-7456102419060969949</id><updated>2012-01-11T15:50:32.406-08:00</updated><category term="Others" /><category term="Excel tips" /><category term="Rexx Utilities" /><category term="ISPF automation" /><category term="Mainframe tips" /><category term="Workbooks" /><category term="Insights" /><category term="Excel at home" /><category term="Excel for business" /><title>Technology Shift</title><subtitle type="html">Focusing on people-driven innovation</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://www.technologyshift.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://www.technologyshift.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/7456102419060969949/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>nuts</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>31</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/TechnologyShift" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="technologyshift" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">TechnologyShift</feedburner:emailServiceId><feedburner:feedburnerHostname xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://feedburner.google.com</feedburner:feedburnerHostname><entry gd:etag="W/&quot;A0QEQHw-eCp7ImA9WxFVFk4.&quot;"><id>tag:blogger.com,1999:blog-7456102419060969949.post-4938769819492336375</id><published>2010-06-15T15:01:00.000-07:00</published><updated>2010-06-15T15:01:41.250-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-15T15:01:41.250-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Excel for business" /><category scheme="http://www.blogger.com/atom/ns#" term="Workbooks" /><title>Simple Inventory and Sales Tracker Spreadsheet</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;If you are looking for a simple way to track your inventory and sales, here is a Excel 2007 spreadsheet that could be of help. &lt;br /&gt;
&lt;br /&gt;
This Simple Inventory and Sales Tracker Spreadsheet has a tab that shows your current inventory, sales and re-stocking transactions.&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: left;"&gt;&lt;/div&gt;&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_6k53y8ID--A/TBfvXm3LtKI/AAAAAAAAAPE/IQMO3vhREx0/s1600/Inventory.jpg" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="256" src="http://3.bp.blogspot.com/_6k53y8ID--A/TBfvXm3LtKI/AAAAAAAAAPE/IQMO3vhREx0/s320/Inventory.jpg" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Click image to enlarge Inventory tab&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;b&gt;Tracking Inventory&lt;/b&gt; &lt;br /&gt;
The Inventory tab&amp;nbsp; shows the current state of your inventory. This automatically calculated by considering your beginning inventory, re-stocking and sales made for the product. It also contains the unit sales price used for sales transactions.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt; &lt;/b&gt;&lt;br /&gt;
&lt;b&gt;Recording Sales&lt;/b&gt;&lt;br /&gt;
Sales are processed using the Sales tab. To facilitate recording, a drop-down lists are provided with one containing all of the products listed in the Inventory tab and another for the methods of payment accepted. The unit price is also dynamically determined from the Inventory tab and used to automatically calculate the sales price.&lt;br /&gt;
&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_6k53y8ID--A/TBfzKHXSR4I/AAAAAAAAAPI/zCrMvqP8BCc/s1600/SAles.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="256" src="http://2.bp.blogspot.com/_6k53y8ID--A/TBfzKHXSR4I/AAAAAAAAAPI/zCrMvqP8BCc/s320/SAles.jpg" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Click image to enlarge Sales tab&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Re-stocking transactions&lt;br /&gt;
&lt;/b&gt;&lt;br /&gt;
Whenever you need to re-stock your inventory, every purchase should be recorded in the Stock Replenishment tab. This tab also contains the same drop-down feature found in the Sales tab. All transactions recorded in this tab will immediately be reflected in the Inventory tab.&amp;nbsp; &lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_6k53y8ID--A/TBf0tIyHTiI/AAAAAAAAAPM/zDq5hQjaiug/s1600/Restocking.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="248" src="http://1.bp.blogspot.com/_6k53y8ID--A/TBf0tIyHTiI/AAAAAAAAAPM/zDq5hQjaiug/s320/Restocking.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Want to purchase this product?&lt;/b&gt;&lt;br /&gt;
This Simple Inventory and Sales Tracker Spreadsheet is an easy tool to use. If you are interested with this, this product is available for purchase for GBP 4.99 using  the button below. Before you buy please ensure that you read the &lt;a href="http://www.technologyshift.com/p/products-and-services.html"&gt;purchase  and delivery process&lt;/a&gt; and our &lt;a href="http://www.technologyshift.com/p/terms-of-use.html"&gt;terms of  use&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;form action="https://www.paypal.com/cgi-bin/webscr" method="post"&gt;&lt;input name="cmd" type="hidden" value="_s-xclick" /&gt;&lt;br /&gt;
&lt;input name="hosted_button_id" type="hidden" value="FY6ZBB5ZM9X9G" /&gt;&lt;br /&gt;
&lt;input alt="PayPal - The safer, easier way to pay online." border="0" name="submit" src="https://www.paypal.com/en_US/GB/i/btn/btn_buynowCC_LG.gif" type="image" /&gt;&lt;br /&gt;
&lt;img alt="" border="0" height="1" src="https://www.paypal.com/en_GB/i/scr/pixel.gif" width="1" /&gt;&lt;/form&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7456102419060969949-4938769819492336375?l=www.technologyshift.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/cOQL2hgGEgd1eJEtjMZQ8XDxhY8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cOQL2hgGEgd1eJEtjMZQ8XDxhY8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/cOQL2hgGEgd1eJEtjMZQ8XDxhY8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cOQL2hgGEgd1eJEtjMZQ8XDxhY8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TechnologyShift?a=hlEljuaIan8:MbNl3WHiOOc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TechnologyShift?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TechnologyShift/~4/hlEljuaIan8" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7456102419060969949/posts/default/4938769819492336375?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7456102419060969949/posts/default/4938769819492336375?v=2" /><link rel="alternate" type="text/html" href="http://www.technologyshift.com/2010/06/simple-inventory-and-sales-tracker.html" title="Simple Inventory and Sales Tracker Spreadsheet" /><author><name>nuts</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_6k53y8ID--A/TBfvXm3LtKI/AAAAAAAAAPE/IQMO3vhREx0/s72-c/Inventory.jpg" height="72" width="72" /></entry><entry gd:etag="W/&quot;D0AHR3g4eyp7ImA9WxFRGU8.&quot;"><id>tag:blogger.com,1999:blog-7456102419060969949.post-2644025346626849339</id><published>2010-05-03T15:11:00.000-07:00</published><updated>2010-05-03T15:28:56.633-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-03T15:28:56.633-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Workbooks" /><category scheme="http://www.blogger.com/atom/ns#" term="Excel at home" /><title>Credit  Card and Consumer Debt Payment Calculator</title><content type="html">&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_6k53y8ID--A/S99K04WA_MI/AAAAAAAAAPA/9FekdIQ2aNA/s1600/Debt+repayment.jpg" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="248" src="http://2.bp.blogspot.com/_6k53y8ID--A/S99K04WA_MI/AAAAAAAAAPA/9FekdIQ2aNA/s320/Debt+repayment.jpg" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Click image to enlarge&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;Most people have a hard time determining the right payment allocation for servicing debts. In general, there are two prevailing thoughts on this subject. These two debt repayment strategies are snowballing (suggesting that the debt with the smallest balance should paid first) and avalanche method (focusing on the interest rate with the debt with the highest one being serviced first).&lt;br /&gt;
&lt;br /&gt;
This Credit&amp;nbsp; Card and Consumer Debt Payment Calculator spreadsheet is available to support these two debt repayment strategies - showing you how much money should be paid for each outstanding debt for that period. Aside from these two strategies, an third strategy is being introduced called Targeted Avalanche.&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
The Targeted Avalanche method uses the same principle as the Avalanche method with one minor difference. The Targeted Avalanche strategy uses the estimated interest amount to be incurred in the next period instead of the interest rate. In terms of the efficient use of your money, this is our preferred method of payment.&lt;br /&gt;
&lt;b&gt; &lt;/b&gt;&lt;br /&gt;
&lt;b&gt;Using the Credit&amp;nbsp; Card and Consumer Debt Payment Calculator&lt;/b&gt;&lt;br /&gt;
First, fill in the&amp;nbsp; names of the creditor or lending company, the account balances for each debt and the associated monthly interest rate.Unlike other debt payment calculators, you don't need to sort your entries using any criteria. This automatically done for you.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Second, put in the required minimum monthly payments for each account. This is is the minimum amount you pay to avoid incurring penalty charges. For the credit card debts, your monthly statement will contain the information. For other type of debts, you maybe required to correspond with your lending provider to get the correct figure.&lt;br /&gt;
&lt;br /&gt;
Finally, enter the amount of money available to pay-off your debt. This amount will be easier to determine if you prepare a monthly budget before preparing this from.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Want to purchase this product?&lt;/b&gt;&lt;br /&gt;
This Credit&amp;nbsp; Card and Consumer Debt Payment Calculator is an easy tool to use. If you are interested with this, this product is available for purchase for GBP 4.99 using  the button below. Before you buy please ensure that you read the &lt;a href="http://www.technologyshift.com/p/products-and-services.html"&gt;purchase  and delivery process&lt;/a&gt; and our &lt;a href="http://www.technologyshift.com/p/terms-of-use.html"&gt;terms of  use&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;form action="https://www.paypal.com/cgi-bin/webscr" method="post"&gt;&lt;input name="cmd" type="hidden" value="_s-xclick" /&gt;&lt;br /&gt;
&lt;input name="hosted_button_id" type="hidden" value="7VH9F8AAKGGN4" /&gt;&lt;br /&gt;
&lt;input alt="PayPal - The safer, easier way to pay online." border="0" name="submit" src="https://www.paypal.com/en_US/GB/i/btn/btn_buynowCC_LG.gif" type="image" /&gt;&lt;br /&gt;
&lt;img alt="" border="0" height="1" src="https://www.paypal.com/en_GB/i/scr/pixel.gif" width="1" /&gt;&lt;/form&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7456102419060969949-2644025346626849339?l=www.technologyshift.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/HLuukM4CPeGzuaqN3RqWIfF0rWI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/HLuukM4CPeGzuaqN3RqWIfF0rWI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/HLuukM4CPeGzuaqN3RqWIfF0rWI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/HLuukM4CPeGzuaqN3RqWIfF0rWI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TechnologyShift?a=GtT5-fGpzN0:IfhUuayi-1g:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TechnologyShift?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TechnologyShift/~4/GtT5-fGpzN0" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7456102419060969949/posts/default/2644025346626849339?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7456102419060969949/posts/default/2644025346626849339?v=2" /><link rel="alternate" type="text/html" href="http://www.technologyshift.com/2010/05/credit-card-and-consumer-debt-payment.html" title="Credit  Card and Consumer Debt Payment Calculator" /><author><name>nuts</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_6k53y8ID--A/S99K04WA_MI/AAAAAAAAAPA/9FekdIQ2aNA/s72-c/Debt+repayment.jpg" height="72" width="72" /></entry><entry gd:etag="W/&quot;AkUHRn04eCp7ImA9WxBaGUs.&quot;"><id>tag:blogger.com,1999:blog-7456102419060969949.post-3859535321280752203</id><published>2010-03-30T09:55:00.000-07:00</published><updated>2010-03-30T09:57:17.330-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-30T09:57:17.330-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ISPF automation" /><title>ISPF as a training aid</title><content type="html">Recently, I received a query from a Project Manager - could I setup a training tool that could help application developers pick up site-specific commands. This was a major problem as his team is new and had limited experience on the application system being supported.&lt;br /&gt;
&lt;br /&gt;
In the mainframe, this challenge is common with all the third-party and in-house utilities being added to the system. To address this, developers have two choices. First, they can  either pick up the application manual but more often than not it is not  available and sifting through the information in the manual could be  quite a challenge. Second, they can search through existing programs and  copy the syntax. The issue with this second approach is that this would  not provide the complete view of the command syntax and may even  perpertuate issues with mistakes being copied a couple of times better.&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;b&gt;&lt;/b&gt;&lt;br /&gt;
At first, my first suggestion was to create a set of ISPF help panels that the developers can invoke. This is a very viable solution with the availability of ISPF Tutorial functionality. But there is one small issue with the approach. Invoking the tool would mean leaving the Edit session and requires the need for Cut and Paste to copy the code syntax.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;The solution&lt;/b&gt;&lt;br /&gt;
I realised that there is an even better solution more suited to this need - the ISPF Model facility. ISPF developers are familiar with this ISPF models as this provides syntax for common ISPF services/commands. I rely on this heavily when I was new to ISPF programming but have not used this recently. I remembered how quickly I was able to learn the command syntax which fits the requirement for this training tool request.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Developming the tool is easy. It involves extending an existing ISPF selection panels and the creation of new ISPF panels and skeletons (which are templates containing the command syntax). With this, the tool was developed in just two days and can easily be maintained by any developer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;The benefit&lt;/b&gt;&lt;br /&gt;
After introducing the site-specific ISPF models, the onboarding time for new member was drastically reduced. The feedback was that it was easy to use and contains all the information needed by the developer. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There were also unexpected benefits from implementing the tool. Even the experienced developers had been more productive and allow them to focus more on other value-adding activities as there was less time spent on answering queries on command syntax from new members.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The tool also provided a means to introduce coding standards. It was done by extending the command templates to include common error-trapping code stubs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you are interested with this project and want to know more, &lt;a href="http://www.technologyshift.com/2008/07/feedback-form.html"&gt;send us your enquiry&lt;/a&gt; and we can provide you the details for a minimal fee.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7456102419060969949-3859535321280752203?l=www.technologyshift.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/dw7xhMzCAfT39ef_UGyJwCBlA8Q/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/dw7xhMzCAfT39ef_UGyJwCBlA8Q/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/dw7xhMzCAfT39ef_UGyJwCBlA8Q/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/dw7xhMzCAfT39ef_UGyJwCBlA8Q/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TechnologyShift?a=fiQtDYLAMDg:kDOUCTRCYPE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TechnologyShift?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TechnologyShift/~4/fiQtDYLAMDg" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7456102419060969949/posts/default/3859535321280752203?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7456102419060969949/posts/default/3859535321280752203?v=2" /><link rel="alternate" type="text/html" href="http://www.technologyshift.com/2010/03/ispf-as-training-aid.html" title="ISPF as a training aid" /><author><name>nuts</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author></entry><entry gd:etag="W/&quot;A0EER309eip7ImA9WxFVFk4.&quot;"><id>tag:blogger.com,1999:blog-7456102419060969949.post-5388127742743002102</id><published>2009-11-11T15:48:00.000-08:00</published><updated>2010-06-15T15:06:46.362-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-15T15:06:46.362-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Workbooks" /><category scheme="http://www.blogger.com/atom/ns#" term="Others" /><title>Mainframe FTP download in Excel</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_6k53y8ID--A/Svs0AanE5VI/AAAAAAAAAOs/AV9-NY8v_eE/s1600-h/FTP+in+Excel.gif" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_6k53y8ID--A/Svs0AanE5VI/AAAAAAAAAOs/AV9-NY8v_eE/s320/FTP+in+Excel.gif" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;One of the many tasks that IT professionals do when working in mainframe systems is to retrieve data from the mainframe to the desktop. This requirement may range from adhoc downloading of code for review or backup to regular periodic reports.&lt;br /&gt;
&lt;br /&gt;
Although there are processes integrated within the mainframe emulators, most of these involves alot of setup everytime you need to download a file. With this, I thought of creating my own tool that would simplify the process.&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;The FTP in Excel tool requires far few information to use. Some of the fields like the TSO ID and hostname can be setup just once while others have choices provided through dropdown lists. In other cases, the values have default values just in case you forgot to populate them.&lt;br /&gt;
&lt;br /&gt;
To use the too, you have to provide the following information:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;b&gt;TSO ID&lt;/b&gt; which corresponds to the userid you provide in the TSO/E Logon screen&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Mainframe host name&lt;/b&gt; refers to the name of the mainframe you are trying to connect to. This corresponds to the value associated to the "System ID" field found in the ISPF Primary Menu Panel. Another way to get this is through the ZSYSNODE variable found by choosing the the Dialog Test/Variables option from the ISPF Primary Menu.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Mainframe Dataset name&lt;/b&gt; column contains the list of datasets you need to access in the mainframe &lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Text Filename &lt;/b&gt;column contains the list of local files to be used. Please ensure that you include the file extensions. Common extensions are .txt for text and .csv for comma delimited files.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;FTP Direction&lt;/b&gt; determines whether you are uploading or downloading data from the mainframe.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Type&lt;/b&gt; tells the Excel what of data you are downloading, whether it is text-based (for txt and csv files) or binary files (IMG).&lt;/li&gt;
&lt;/ul&gt;Once you have set the required information, you are now ready to proceed with the donwload by pressing the &lt;b&gt;Process FTP Request&lt;/b&gt; button. This prompt you for your TSO/E Logon password an then proceed to process your request. This may take a few minutes depending on the number and size of the files but it will prompt you once the process is complete. You can now view the files you created (in the same folder where you save the FTP in Excel tool for downloads and in the mainframe system for uploads). That is how simple it is.&lt;br /&gt;
&lt;br /&gt;
If you are interested with this tool, you can purchase this for GBP 4.99 using the button below. Before you buy please ensure that you read the &lt;a href="http://www.technologyshift.com/2007/06/purchase-and-delivery.html"&gt;purchase and delivery process&lt;/a&gt; and our &lt;a href="http://www.technologyshift.com/search/label/Terms%20of%20use"&gt;terms of use&lt;/a&gt;.&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;form action="https://www.paypal.com/cgi-bin/webscr" method="post"&gt;&lt;input name="cmd" type="hidden" value="_s-xclick" /&gt;&lt;br /&gt;
&lt;input name="hosted_button_id" type="hidden" value="9630143" /&gt;&lt;br /&gt;
&lt;input alt="PayPal - The safer, easier way to pay online." border="0" name="submit" src="https://www.paypal.com/en_US/GB/i/btn/btn_buynowCC_LG.gif" type="image" /&gt;&lt;br /&gt;
&lt;img alt="" border="0" height="1" src="https://www.paypal.com/en_GB/i/scr/pixel.gif" width="1" /&gt;&lt;br /&gt;
&lt;/form&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7456102419060969949-5388127742743002102?l=www.technologyshift.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/NE0gO-MlkI0KTPXh2U3iNeM5l54/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NE0gO-MlkI0KTPXh2U3iNeM5l54/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/NE0gO-MlkI0KTPXh2U3iNeM5l54/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NE0gO-MlkI0KTPXh2U3iNeM5l54/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TechnologyShift?a=dkufAsdbOPo:Pmb9zD0LIrc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TechnologyShift?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TechnologyShift/~4/dkufAsdbOPo" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7456102419060969949/posts/default/5388127742743002102?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7456102419060969949/posts/default/5388127742743002102?v=2" /><link rel="alternate" type="text/html" href="http://www.technologyshift.com/2007/06/mainframe-ftp-download-in-excel.html" title="Mainframe FTP download in Excel" /><author><name>nuts</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_6k53y8ID--A/Svs0AanE5VI/AAAAAAAAAOs/AV9-NY8v_eE/s72-c/FTP+in+Excel.gif" height="72" width="72" /></entry><entry gd:etag="W/&quot;DEYNQnc8cSp7ImA9WxFRGU8.&quot;"><id>tag:blogger.com,1999:blog-7456102419060969949.post-1217253931245403891</id><published>2009-09-04T11:44:00.000-07:00</published><updated>2010-05-03T15:36:33.979-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-03T15:36:33.979-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Workbooks" /><category scheme="http://www.blogger.com/atom/ns#" term="Excel at home" /><title>Envelope Method Budgetting in Excel 2007</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_6k53y8ID--A/Sv8JDX5kz8I/AAAAAAAAAO0/tQNoOOYQBaQ/s1600-h/Envelope+Budgert+%28Check+Register+format%29.gif" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_6k53y8ID--A/Sv8JDX5kz8I/AAAAAAAAAO0/tQNoOOYQBaQ/s320/Envelope+Budgert+%28Check+Register+format%29.gif" /&gt;&lt;/a&gt;&lt;/div&gt;Most people find tracking where their hard-earned money went hard. There are many solutions available but nothing works as good as the envelope budget method.&lt;br /&gt;
&lt;br /&gt;
The concept of envelope budget is pretty simple. When you get paid, you allocate all of your money into pre-determined outgoings (expenses and savings) - traditionally through marked envelopes. This way you guarantee you don't spend more than your income or beyond what you allocated for each expense category. &lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;But rather than using actual envelopes, we can set this up using Excel. This Envelope budget implemented in Excel 2007 follows a check register format. The top columns represents the common expense categories. funds for long-term goals and savings for short-term goals.&lt;br /&gt;
&lt;br /&gt;
To use the tool, you just need to record all cash flow transactions. Budget planning is done everytime you receive any cash using the "&lt;i&gt;Money in&lt;/i&gt;" column. All records with non-zero "&lt;i&gt;Money in&lt;/i&gt;" column shows the budget plan for the amount received. To help you out, the periodic average for each expense column is calculated and the remaining unallocated cash is shown in the "&lt;i&gt;Free amount&lt;/i&gt;" column.&lt;br /&gt;
&lt;br /&gt;
As for the cash outgoings, the amount incurred will be recorded on the approrpriate category on the day it is payed. The unused allocation for each category is being tracked through the "Balance" row. As the category balnce is being used up, the cell changes color - turning to red when the balance falls to zero.&lt;br /&gt;
&lt;br /&gt;
This Envelope based budget workbook in Excel 2007 is an easy tool to use. If you are interested with this, you can purchase this for GBP 4.99 using  the button below. Before you buy please ensure that you read the &lt;a href="http://www.technologyshift.com/p/products-and-services.html"&gt;purchase  and delivery process&lt;/a&gt; and our &lt;a href="http://www.technologyshift.com/p/terms-of-use.html"&gt;terms of  use&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;form action="https://www.paypal.com/cgi-bin/webscr" method="post"&gt;&lt;input type="hidden" name="cmd" value="_s-xclick"&gt;&lt;br /&gt;
&lt;input type="hidden" name="hosted_button_id" value="6TSKEVQFMV286"&gt;&lt;br /&gt;
&lt;input type="image" src="https://www.paypal.com/en_US/GB/i/btn/btn_buynowCC_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online."&gt;&lt;br /&gt;
&lt;img alt="" border="0" src="https://www.paypal.com/en_GB/i/scr/pixel.gif" width="1" height="1"&gt;&lt;br /&gt;
&lt;/form&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7456102419060969949-1217253931245403891?l=www.technologyshift.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/foNu3Lnt8FZokrVTkJiuiFlJsoU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/foNu3Lnt8FZokrVTkJiuiFlJsoU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/foNu3Lnt8FZokrVTkJiuiFlJsoU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/foNu3Lnt8FZokrVTkJiuiFlJsoU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TechnologyShift?a=siEe2pIHIR4:KZBpCFG7uaU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TechnologyShift?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TechnologyShift/~4/siEe2pIHIR4" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7456102419060969949/posts/default/1217253931245403891?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7456102419060969949/posts/default/1217253931245403891?v=2" /><link rel="alternate" type="text/html" href="http://www.technologyshift.com/2009/09/envelope-budget-in-excel-2007.html" title="Envelope Method Budgetting in Excel 2007" /><author><name>nuts</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_6k53y8ID--A/Sv8JDX5kz8I/AAAAAAAAAO0/tQNoOOYQBaQ/s72-c/Envelope+Budgert+%28Check+Register+format%29.gif" height="72" width="72" /></entry><entry gd:etag="W/&quot;DEEGSXk8fSp7ImA9WxNUFk4.&quot;"><id>tag:blogger.com,1999:blog-7456102419060969949.post-399078377092268816</id><published>2009-06-20T16:11:00.001-07:00</published><updated>2009-11-07T15:30:28.775-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-07T15:30:28.775-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ISPF automation" /><title>Mainframe environment setup for system migration</title><content type="html">A multi-year rationalisation project is being pursued to consolidate the mainframe processes. Currently, there are as many mainframe systems and applications as there are different geographic customer market. This fragmented architecture resulted to a complex environment to support and maintain.&lt;br /&gt;
&lt;span id="fullpost"&gt;&lt;br /&gt;
To implement this strategy, it was decided that a common system should be used by all branches representing a geographical market. This is to be done by migrating to the new system one branch at a time.&lt;br /&gt;
&lt;br /&gt;
As part of the conversion, the developers would need to setup branch-specific &lt;span id="SPELLING_ERROR_0"&gt;datasources&lt;/span&gt; and jobs/&lt;span id="SPELLING_ERROR_1"&gt;jcls&lt;/span&gt;. Prior to our involvement, this task was done manually by two offshore contractors and completed in at least six weeks (depending on the size of the branch). With the number of branches to be converted, this turnaround time was unacceptable.&lt;br /&gt;
&lt;br /&gt;
This issue was addressed by introducing a set of automation utilities to accomplish the task.&lt;br /&gt;
These utilities took one person five days to develop and test. The results is a set of customised jobs and &lt;span id="SPELLING_ERROR_2"&gt;VSAM&lt;/span&gt; file allocations specific for the job.&lt;br /&gt;
&lt;br /&gt;
With the automation tools, the branch setup process now takes just four hours and requires just one developer. The process also resulted to less errors that is inherent to manual process.&lt;br /&gt;
&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7456102419060969949-399078377092268816?l=www.technologyshift.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/APLBxKqBvM6v4UzIVCyZLsTgpLI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/APLBxKqBvM6v4UzIVCyZLsTgpLI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/APLBxKqBvM6v4UzIVCyZLsTgpLI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/APLBxKqBvM6v4UzIVCyZLsTgpLI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TechnologyShift?a=o137GV-DcWo:yhM9U3IaF7o:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TechnologyShift?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TechnologyShift/~4/o137GV-DcWo" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7456102419060969949/posts/default/399078377092268816?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7456102419060969949/posts/default/399078377092268816?v=2" /><link rel="alternate" type="text/html" href="http://www.technologyshift.com/2009/06/mainframe-environment-setup.html" title="Mainframe environment setup for system migration" /><author><name>nuts</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author></entry><entry gd:etag="W/&quot;CkICSHc5eSp7ImA9WxFTGUg.&quot;"><id>tag:blogger.com,1999:blog-7456102419060969949.post-8572621739456223343</id><published>2008-11-25T16:17:00.000-08:00</published><updated>2010-04-10T18:49:29.921-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-10T18:49:29.921-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Insights" /><title>Re-engineering the way we work</title><content type="html">&lt;div&gt;"What if the business is apprehensive to re-engineer the current system? Are there other opportunities for pursuing a re-engineering initiative?"&lt;br /&gt;
&lt;br /&gt;
This is how my conversation with the Development Area Manager started today. &lt;span id="fullpost"&gt;&lt;br /&gt;
&lt;br /&gt;
From the &lt;a href="http://www.technologyshift.com/2008/11/succeeding-through-incremental-re.html"&gt;initial discussion we had on re-engineering&lt;/a&gt; a few weeks back, he went to our business partners and pitch the idea to them. The initial reaction we received was a bit lukewarm. Without the support of the business partners, we are looking for other ways to push the re-engineering agenda.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;Innovate how we operate.&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;Rather than focusing on the client system, we can use the same re-engineering principles on how we work. The approaches used in systems re-engineering can be applied in innovations for application delivery and maintenance.&lt;br /&gt;
&lt;br /&gt;
To do this, we will need to review the processes involved in application development and maintenance. By revisiting each phase on the software development life cycle, we identify the tasks we can re-engineer. To help us in our analysis, I have identified the following categories that we can focus on.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;Recurring, repetitive and manual intensive tasks&lt;/span&gt;. From experience, most proposals will fall in this category.  Not only are these are easy to identify, most developers will be drowning you with proposals as these are tasks we hate doing. It is good to work on these category first (especially since we are just starting to build the skills of our team) as the re-engineering activities required are simpler.&lt;br /&gt;
&lt;br /&gt;
The re-engineering approach for these type of tasks requires a combination of standardisation and automation. First we need to establish the series of steps required to accomplish the task. From these steps we can determine which of them (if not all) we can automate through mainframe facilities like &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;ISPF&lt;/span&gt; Edit Macros and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;ISPF&lt;/span&gt; Services.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;Tasks with wait times or requires monitoring&lt;/span&gt;. Monitoring activities (like those by Production Support staff) are essential to ensure that exceptions are addressed promptly. Although important, the time spent waiting are opportunities better spent on activities that adds more value. With this, it is important that we find other ways of monitoring aside from&lt;br /&gt;
having somebody continuously looking at a computer screen until an event happens.&lt;br /&gt;
&lt;br /&gt;
For monitoring non-critical activities, we can avoid manually monitoring them through the use of automated notification - the simplest of which is the &lt;a href="http://www.technologyshift.com/2008/05/automated-email-notification-for-zos.html"&gt;email notification through the SMTP (Simple Mail Transfer Protocol) service&lt;/a&gt;. We can consider modifying a non-critical job to send the error details to the appropriate group if exceptions are encountered.&lt;br /&gt;
&lt;br /&gt;
SMTP can also be used for automated report distribution. Rather than have someone kick off a process to create and email a report, we can replace this with a mainframe job to be triggered when the input file is created to process the file for us.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;Tasks where human decisions are made&lt;/span&gt;. I am not suggesting that we replace all of the intelligent decision making activities with an automated process as this is not possible. In situations where the decision making is complex, we can help the decision maker by ensuring that all the information he needs are easily accessible. The benefit with this is that we don't change the way people work, we just eliminate the administrative part and let them focus on the parts of their job that adds value.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;Tasks requiring system downtime&lt;/span&gt;. The activities that fall in this category overlaps with the other previous categories. We need to further categorised them into this type because of their impact to the business. System downtime (whether the downtime is for software migration or data/error recovery during production support) means there are no business activities in our system. Business opportunities are lost on periods when our system is inaccessible. With this, we must give special attention to activities falling in this category.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;
Pushing re-engineering forward.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
There is a good incentive to devote the time it takes to re-engineer our development processes. If done right, these re-engineering successes will be the best marketing tool in selling the re-engineering agenda to our business partners. The tangible results are more powerful than any PowerPoint presentation we can muster. This will open up a wider horizon of opportunities for us in the future.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7456102419060969949-8572621739456223343?l=www.technologyshift.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/FdxvYxA6u0A21icz9RcGegXGN5g/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/FdxvYxA6u0A21icz9RcGegXGN5g/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/FdxvYxA6u0A21icz9RcGegXGN5g/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/FdxvYxA6u0A21icz9RcGegXGN5g/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TechnologyShift?a=eUqNq6Lbqk8:Z1dECrj6Sac:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TechnologyShift?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TechnologyShift/~4/eUqNq6Lbqk8" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7456102419060969949/posts/default/8572621739456223343?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7456102419060969949/posts/default/8572621739456223343?v=2" /><link rel="alternate" type="text/html" href="http://www.technologyshift.com/2008/11/re-engineering-way-we-work.html" title="Re-engineering the way we work" /><author><name>nuts</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author></entry><entry gd:etag="W/&quot;CkICSHc5eip7ImA9WxFTGUg.&quot;"><id>tag:blogger.com,1999:blog-7456102419060969949.post-2826612410059551562</id><published>2008-11-12T10:04:00.001-08:00</published><updated>2010-04-10T18:49:29.922-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-10T18:49:29.922-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Insights" /><title>Succeeding through incremental re-engineering</title><content type="html">&lt;div&gt;If it ain't broke, don't fix it!&lt;br /&gt;
&lt;br /&gt;
It is the most common argument against a re-engineering agenda. It is argued that although the current system maybe slow and inefficient, people were so dependent on them for so long that migrating to an untested system is unthinkable.&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;Today, I heard this again and then some more.&lt;br /&gt;
&lt;div&gt;&lt;span id="fullpost"&gt;&lt;br /&gt;
I was invited by our Development Area Manager to have coffee with him. This gave us the chance to discuss how we can pursue an effective re-engineering initiative. I was asked based on the recommendation of his colleague (another Development Area Manger for another business) who worked with me in the past in pursuing a re-engineering agenda together. &lt;br /&gt;
&lt;br /&gt;
In this conversation, the primary concern raised was on the area of risk. Previous experience shows that re-engineering has a high degree of failure and probability of introducing errors to the system. The larger the system the higher the degree of risk one has to take.&lt;br /&gt;
&lt;br /&gt;
There was also the concern of the perceived high costs related to re-engineering. Most re-engineering pursuits in the past had been expensive - driven by much hyped tools and processes. There is additional associated costs on supporting the new system until it stabilises (which can take longer that what management are willing to accept).&lt;br /&gt;
&lt;br /&gt;
I understand these concerns as I have witnessed these issues manifesting while pursuing re-engineering in the past. But these concerns are driven by one factor - size. With this in mind, these concerns can be managed by implementing re-engineering initiatives in smaller chunks.&lt;br /&gt;
&lt;br /&gt;
The incremental re-engineering framework, also known as evolutionary re-engineering, is the process we have followed in the past. Through incremental opportunistic approach, both the risk and cost concerns can be addressed.&lt;br /&gt;
&lt;br /&gt;
Focusing on a smaller part of the system provides better error recovery. Given the smaller size, errors are easier to investigate and fix. If a major issue is found, the re-engineered component can be backed out with less disruption to the system.&lt;br /&gt;
&lt;br /&gt;
Given the size of some re-engineering projects, development costs can sometimes be absorbed by current projects. We have demonstrated this through the &lt;a href="http://www.technologyshift.com/2008/07/discovering-mainframe-automation.html"&gt;new batch setup utility&lt;/a&gt; we created last July. We used the the first week allotted to the branch setup if done manually to create this utility. Not only did we complete the setup before the two week deadline, we now have a utility that drastically cut turnaround time for every new branch we setup.&lt;br /&gt;
&lt;br /&gt;
For managers, incremental re-engineering offers other advantages. The incremental approach provides increased flexibility to address changing priorities and strategy. Fewer resources are committed to re-engineering projects in shorter period of time. This allows managers to re-align resources quickly if required.&lt;br /&gt;
&lt;br /&gt;
There is also a high degree of user acceptance. For some of these re-engineering initiatives, the changes are least disruptive, if not transparent to the user. In other instances, these focused projects provides immediate and tangible benefits (improved response time, simplified process, less errors) that are quickly noticed by users.&lt;br /&gt;
&lt;br /&gt;
With these advantages, incremental re-engineering projects provides a better chance of success. These advantages together with the successful project implementations will make it easier to justify incremental re-engineering projects to management.&lt;br /&gt;
&lt;/div&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7456102419060969949-2826612410059551562?l=www.technologyshift.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/qQ9Jz4kD8Lc8ozBYIzfWOxIr5w8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/qQ9Jz4kD8Lc8ozBYIzfWOxIr5w8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/qQ9Jz4kD8Lc8ozBYIzfWOxIr5w8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/qQ9Jz4kD8Lc8ozBYIzfWOxIr5w8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TechnologyShift?a=0AgH1pPf96o:IX5a-FjQ_WQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TechnologyShift?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TechnologyShift/~4/0AgH1pPf96o" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7456102419060969949/posts/default/2826612410059551562?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7456102419060969949/posts/default/2826612410059551562?v=2" /><link rel="alternate" type="text/html" href="http://www.technologyshift.com/2008/11/succeeding-through-incremental-re.html" title="Succeeding through incremental re-engineering" /><author><name>nuts</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author></entry><entry gd:etag="W/&quot;DUMHQnc_eip7ImA9WxRREko.&quot;"><id>tag:blogger.com,1999:blog-7456102419060969949.post-5331207357257302641</id><published>2008-09-18T14:11:00.000-07:00</published><updated>2008-09-24T10:30:33.942-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-09-24T10:30:33.942-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Excel tips" /><title>Excel Bullet Graphs to Replace Gauges</title><content type="html">Executive dashboards are now common in business. A dashboard provides key data that is concise, easy to read and to interpret. To do this, one of the common tools used are gauges.&lt;br /&gt;&lt;br /&gt;Although it is widely used, gauges have one big flaw - huge space is needed for implementation. As a replacement, Stephen Few (&lt;a href="http://www.perceptualedge.com/"&gt;Perceptual Edge&lt;/a&gt;) suggested a new bar graph variation called bullet graphs. Stephen created a good document discussing the &lt;a href="http://www.perceptualedge.com/articles/misc/Bullet_Graph_Design_Spec.pdf"&gt;bullet graph specification&lt;/a&gt; so I will not be discussing it here.&lt;br /&gt;&lt;br /&gt;Instead, I will discuss how to implement the last variation of the bullet graph that Stephen Few discussed in the specification document. This version of the bullet graph will not only tell you how far you are from your target but will also show whether you are on track in meeting this target.&lt;br /&gt;&lt;br /&gt;For demonstration, I will be re-creating in Excel the example bullet graph shown below.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_6k53y8ID--A/SNp45YrxOuI/AAAAAAAAALI/Le-6ZSnlziI/s1600-h/bullet1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_6k53y8ID--A/SNp45YrxOuI/AAAAAAAAALI/Le-6ZSnlziI/s400/bullet1.jpg" alt="" id="BLOGGER_PHOTO_ID_5249641242927643362" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Chart Data Preparation&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_6k53y8ID--A/SNLpKhvOsOI/AAAAAAAAALA/2b-SKGnvqng/s1600-h/bullet3.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://1.bp.blogspot.com/_6k53y8ID--A/SNLpKhvOsOI/AAAAAAAAALA/2b-SKGnvqng/s400/bullet3.jpg" alt="" id="BLOGGER_PHOTO_ID_5247512882904477922" border="0" /&gt;&lt;/a&gt;First we need to prepare the data to be used by the chart. To create the graph, the appropriate values are provided in the cell range A3:E3. These values are used in controlling the information in the Chart Data.&lt;br /&gt;&lt;br /&gt;Set cells A6, B6, A8 and B8 to zero. Cell A7 contains the Current value so this should point to A3. Cells C6 and C8 contain the Poor limit so these are set to C3. Cell E6 is pointing to the Target value in E3.&lt;br /&gt;&lt;br /&gt;For  the other cells, specify the following formula:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;=MAX(B3-A7,0)&lt;/span&gt; in  cell B7&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;=MAX(C6-SUM(A7:B7),0)&lt;/span&gt;  in  cell C7  &lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;=D3-C6&lt;/span&gt; in cells D6 and D8 &lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;=MAX(SUM(C6:D6)-SUM(A7:C7),0)&lt;/span&gt; in cell D7&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;Creating the initial Stacked bar graph&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;To create the initial bullet graph, follow these steps.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Highlight the range A6:D8 then select &lt;span style="font-weight: bold;"&gt;Insert&gt;Chart&lt;/span&gt;  from the menu.&lt;/li&gt;&lt;li&gt;On the Standard Types tab in the Chart Wizard, select Bar from the Chart type and Stacked Bar in the Chart sub-type. Click Next.&lt;/li&gt;&lt;li&gt;Choose Columns in the Series in option. Click Next.&lt;/li&gt;&lt;li&gt;Uncheck all options in the Gridlines tab,  the Show legend option in the Legend tab. Click Next then click Finish to show the stacked bar. It should look something like this.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_6k53y8ID--A/SNLa05Jg70I/AAAAAAAAAKg/fGIDhhBfzsM/s1600-h/bullet3.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_6k53y8ID--A/SNLa05Jg70I/AAAAAAAAAKg/fGIDhhBfzsM/s400/bullet3.jpg" alt="" id="BLOGGER_PHOTO_ID_5247497118068830018" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;Updating format of bullet graph&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now, we would need to change the color and presentation of the columns.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Right click any data point in the graph and choose Format Data Series. Click the Options tab and set the Gap width to 0. This will remove the gaps between each stacked bars.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;For each data series, update formatting to match the one shown in the example. Remove all borders for each data series and change the color appropriately. Series 1 and 2 are both blue with series 2 set to a shade lighter. Series 3 and 4 are both gray with series 4 a bit lighter.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Remove the border from the Plot area.&lt;/li&gt;&lt;li&gt;Right click the X axis to format it. Click the Font tab and uncheck the Auto scale option. Click the Scale tab and uncheck Auto option for the Minimum, Maximum and Major unit . fields and set them to the desired value (0, 300, 50). I advised this step so that you control the scaling.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;After these steps, you should something similar to this.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_6k53y8ID--A/SNLg2R_cV4I/AAAAAAAAAKo/qo57cKo60pY/s1600-h/bullet3.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_6k53y8ID--A/SNLg2R_cV4I/AAAAAAAAAKo/qo57cKo60pY/s400/bullet3.jpg" alt="" id="BLOGGER_PHOTO_ID_5247503738987108226" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Adding the Target line.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The target line is added through the steps below.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Right click in any area of the chart and choose Source Data. Click the Series tab then click the Add button to introduce a new data series named Series 5. In the Values field, point it to cell E6. Click OK&lt;/li&gt;&lt;li&gt;Click the new data series added and update the formula from =SERIES(,,Sheet3!$E$6,5) to =SERIES(,Sheet3!$E$6,2,5).&lt;/li&gt;&lt;li&gt;Again, right click Series 5 and choose Chart type. In the Chart type, choose XY(Scatter). Click OK.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Right click the secondary X axis (the one on top) to format it. Click the Scale tab and uncheck Auto option for the Minimum, Maximum and Major unit . fields and set them to the desired value (0, 300, 50). This is done to ensure consistency of the scale.&lt;/li&gt;&lt;li&gt;Right click the secondary Y axis (the one on the right) to change the scale. Click the Scale tab and uncheck Auto option for the Minimum, Maximum and Major unit . fields and set them to the desired value (1,2, 1). This is needed to position the line in the middle.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Again, right click Series 5 and choose Format Data Series. In the Pattern tab, set the Marker to None. Click the Y Error Bars and Both for the Display, and set the Fixed value to .7. Click OK.&lt;/li&gt;&lt;li&gt;Right Click the Error bar for Series 5 and choose Format Error Bars. In the Patterns tab, change the appropriate color, weight and marker. Click OK.&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-weight: bold;"&gt;Some more tidying up&lt;/span&gt;.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Right click the Chart area and choose Chart options. In the Axes tab, uncheck the all options except for Value (Y) axis of the Primary axis. Click OK.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Right click the Chart area and choose Format Chart area. Set the Border to none in the Patterns tab. Click OK.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Resize the bullet graph as desired and add the needed text. I recommend that the text should be in a cell instead of using the Title option in the chart.&lt;/li&gt;&lt;/ol&gt;After all these hard work, you should see something like this.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_6k53y8ID--A/SNLoxeuPy-I/AAAAAAAAAKw/I9vj2xxjBAY/s1600-h/bullet3.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_6k53y8ID--A/SNLoxeuPy-I/AAAAAAAAAKw/I9vj2xxjBAY/s400/bullet3.jpg" alt="" id="BLOGGER_PHOTO_ID_5247512452598320098" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7456102419060969949-5331207357257302641?l=www.technologyshift.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/lbe_y9PFAQpAA-rNQOtBrisLKVw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/lbe_y9PFAQpAA-rNQOtBrisLKVw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/lbe_y9PFAQpAA-rNQOtBrisLKVw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/lbe_y9PFAQpAA-rNQOtBrisLKVw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TechnologyShift?a=maXu3ouw6fw:7a0mZLHHZRo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TechnologyShift?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TechnologyShift/~4/maXu3ouw6fw" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7456102419060969949/posts/default/5331207357257302641?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7456102419060969949/posts/default/5331207357257302641?v=2" /><link rel="alternate" type="text/html" href="http://www.technologyshift.com/2008/09/excel-bullet-graphs-to-replace-gauges.html" title="Excel Bullet Graphs to Replace Gauges" /><author><name>nuts</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_6k53y8ID--A/SNp45YrxOuI/AAAAAAAAALI/Le-6ZSnlziI/s72-c/bullet1.jpg" height="72" width="72" /></entry><entry gd:etag="W/&quot;CkICSHc5eyp7ImA9WxFTGUg.&quot;"><id>tag:blogger.com,1999:blog-7456102419060969949.post-7472414527729435722</id><published>2008-09-10T15:00:00.000-07:00</published><updated>2010-04-10T18:49:29.923-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-10T18:49:29.923-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Insights" /><title>Bridging the automation gap</title><content type="html">Process re-engineering is back  on the management agenda. Pressured by the global economic downturn, big and small outfits alike are pursuing this to cut costs and return to profitability.&lt;br /&gt;&lt;br /&gt;For mainframe development teams, process re-engineering is synonymous to automation. The management from the companies I currently and previously work understand that this is the way to go to improve the efficiency of the way deliver software.&lt;br /&gt;&lt;br /&gt;To promote this, my previous employer required all developers to implement two productivity tools for the year. My current employer on the other hand has a similar but less direct approach - they pass on the responsibility to the team leads to pursue.&lt;br /&gt;&lt;br /&gt;On the surface, both approaches looks feasible. By giving everyone the opportunity to pursue automation, you would expect a greater number of tools to be created. This should be easy as developers offers the same type of service to other non-IT departments. Right?&lt;br /&gt;&lt;br /&gt;But the truth is, this is not always the case. In most teams I joined, there is no indication that automation is part of the development process. I ended building the team to be able to pursue this through mentoring and coaching.&lt;br /&gt;&lt;br /&gt;How could it be that the IT personnel, the very people whose primary responsibility is closely linked to innovation, does not do the same in their everyday work?&lt;br /&gt;&lt;br /&gt;Simple. Most mainframe developers  does not have the necessary skills for automation. The facilities needed are different from the development tools used for delivering solutions to the client. Seldom do developers have the opportunity to learn to work with these tools in spite of their availability.&lt;br /&gt;&lt;br /&gt;Part of the reason for this is our sole focus to solutions delivery that kept us from looking at our own processes. We are exhausted trying to deliver the next release that we have no time left to take a step back and discover how we can do our own tasks better.&lt;br /&gt;&lt;br /&gt;To succeed, company perception needs to changed. Most often, automation is pursued by companies on a brink of disaster. Costs are running high and automation is deemed to be the quick fix.&lt;br /&gt;&lt;br /&gt;Automation should be part of a long-term mainframe strategy. Focus should first be on training to enable developers to pursue this. Better results will follow if you have a good team behind it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7456102419060969949-7472414527729435722?l=www.technologyshift.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/jEOlf7B9ytz47vAyKft82oi73R0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/jEOlf7B9ytz47vAyKft82oi73R0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/jEOlf7B9ytz47vAyKft82oi73R0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/jEOlf7B9ytz47vAyKft82oi73R0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TechnologyShift?a=x-TqCHR9e6Y:NGhql8AZ6bY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TechnologyShift?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TechnologyShift/~4/x-TqCHR9e6Y" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7456102419060969949/posts/default/7472414527729435722?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7456102419060969949/posts/default/7472414527729435722?v=2" /><link rel="alternate" type="text/html" href="http://www.technologyshift.com/2008/09/bridging-automation-gap.html" title="Bridging the automation gap" /><author><name>nuts</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author></entry><entry gd:etag="W/&quot;CkICSHc5fCp7ImA9WxFTGUg.&quot;"><id>tag:blogger.com,1999:blog-7456102419060969949.post-8032997175222837925</id><published>2008-08-15T17:02:00.001-07:00</published><updated>2010-04-10T18:49:29.924-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-10T18:49:29.924-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Insights" /><title>Not all mainframe tools are created equal</title><content type="html">Allan (a former colleague who is now working for Accenture Dublin) needed some direction on one of his tasks. He needed to remove extra spaces on fields found in a file. Each 600-byte record is composed of 50 pipe-delimited fields. It is a simple task normally done through ISPF Edit (change) command.&lt;br /&gt;&lt;br /&gt;Not this one.&lt;br /&gt;&lt;br /&gt;The file involved contains more four hundred thousand records. Given the size, it is not possible to open the file in Edit mode. The only choice he have for the update is through code.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Choosing the right tool.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Most developers will do this in Cobol using indexing techniques on character arrays. The issue with this approach is its inefficiency. given that each character in the 600-byte record needs to be checked (and potentially moved), the amount of CPU processing needed is high. Multiply this by 400,000, then it becomes prohibitive.&lt;br /&gt;&lt;br /&gt;There are others who will opt for interpreted languages. commonly used are CLIST, REXX, Easytrieve and SAS. Using some of these may result to less CPU processing but not low enough to be acceptable.&lt;br /&gt;&lt;br /&gt;Allan knows about the issues with these approaches. Instead they turn their focus on utilities mainly used for data manipulation. As suggested by his team mate, they considered using Fileaid. Based on experience, I mentioned that Fileaid requires high CPU time that it may not be suited for their need. True enough, their testing confirmed this as it took 1.5 minutes (CPU time) to process just 2000 records.&lt;br /&gt;&lt;br /&gt;For this task, DFSORT/Syncsort will be a good tool to use. Allan was somewhat expecting my suggestion as he saw me use them extensively in the past. With five lines of code and a quick test, they found an acceptable solution. Their sample run of 15000 records only took .03 minutes (CPU time) to complete.&lt;br /&gt;&lt;br /&gt;This is why being familiar with what your mainframe system has to offer is crucial. In today's world, the accomplishment of the task is not enough. Doing it efficiently should be our goal. With mainframe's long history, a wide range of utilities is available to us. Many of these have overlapping functionalities. This is your key to be able to find the efficient solution suited for your task. There no easy way to do this but but to continuously explore the tools in your system.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7456102419060969949-8032997175222837925?l=www.technologyshift.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Wp3z3z7VC7fJmiam8ObffScS6gM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Wp3z3z7VC7fJmiam8ObffScS6gM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Wp3z3z7VC7fJmiam8ObffScS6gM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Wp3z3z7VC7fJmiam8ObffScS6gM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TechnologyShift?a=c22oqLCQ5lM:wcCmq0OfHZo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TechnologyShift?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TechnologyShift/~4/c22oqLCQ5lM" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7456102419060969949/posts/default/8032997175222837925?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7456102419060969949/posts/default/8032997175222837925?v=2" /><link rel="alternate" type="text/html" href="http://www.technologyshift.com/2008/08/not-all-mainframe-tools-are-created.html" title="Not all mainframe tools are created equal" /><author><name>nuts</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author></entry><entry gd:etag="W/&quot;CkcBQH88eSp7ImA9WxNUFk4.&quot;"><id>tag:blogger.com,1999:blog-7456102419060969949.post-7958916388886369986</id><published>2008-07-29T14:54:00.000-07:00</published><updated>2009-11-07T13:40:51.171-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-07T13:40:51.171-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Mainframe tips" /><title>How to use variables in SORT Cards?</title><content type="html">Do you know what a sort utility is in the mainframe? DFSORT or Syncsort maybe? How well do you know it?&lt;br /&gt;&lt;br /&gt;Most probably, you have used it (or at least seen it being used) in mainframe jobs. It is quite common and simple that you can easily be misled into thinking that you know how the tool works. Most often than not, there are many features that you may not be aware of even when you frequently use this tool.&lt;br /&gt;&lt;br /&gt;One common complaint is that you can not pass parameters to a control card within a jobstep. You will be surprised to learn that this facility have been available for quite awhile now. Here's an example on how you pass variables to a sort control card.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;//S1 EXEC SORT&lt;br /&gt;//SYMNAMES  DD  *&lt;br /&gt;CONDVAL,C'MIKE'&lt;br /&gt;//SORTIN  DD DSN=&lt;span style="font-style:italic;"&gt;YOUR.INPUT.DATASET&lt;/span&gt;,DISP=SHR&lt;br /&gt;//SORTOUT DD DSN=&lt;span style="font-style:italic;"&gt;YOUR.OUTPUT.DATASET&lt;/span&gt;,&lt;br /&gt;//           DISP=(NEW,CATLG,CATLG),UNIT=SYSDA,&lt;br /&gt;//           DCB=(RECFM=FB,BLKSIZE=0)&lt;br /&gt;//SYSIN  DD *&lt;br /&gt;&amp;nbsp;INCLUDE COND=(1,4,CH,EQ,CONDVAL)&lt;br /&gt;&amp;nbsp;SORT FIELDS=COPY&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This looks like a typical SORT step found in JCLs except for the added SYMNAMES dataset definition. Sort's variable definition follows the "name,value" syntax with each variable defined occupies one line. &lt;br /&gt;&lt;span style="font-style: italic;font-family:courier new;" &gt;&lt;br /&gt;name,value&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You can refer to the variables in the SYMNAMES dataset in your control card instead of directly declaring the value. This allows you to have a static control card with the ability to accept dynamic values. &lt;br /&gt;&lt;br /&gt;Let me ask again. How well do you know SORT? If not well enough, take time to learn its features.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7456102419060969949-7958916388886369986?l=www.technologyshift.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/MQpFYr4P_VzT9i-05wI3N_G7C6I/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MQpFYr4P_VzT9i-05wI3N_G7C6I/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/MQpFYr4P_VzT9i-05wI3N_G7C6I/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MQpFYr4P_VzT9i-05wI3N_G7C6I/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TechnologyShift?a=r5fsxrY4FaM:1X_LZBOh-uY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TechnologyShift?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TechnologyShift/~4/r5fsxrY4FaM" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7456102419060969949/posts/default/7958916388886369986?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7456102419060969949/posts/default/7958916388886369986?v=2" /><link rel="alternate" type="text/html" href="http://www.technologyshift.com/2008/07/how-to-use-variables-in-sort-cards.html" title="How to use variables in SORT Cards?" /><author><name>nuts</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author></entry><entry gd:etag="W/&quot;CkICSHc5fip7ImA9WxFTGUg.&quot;"><id>tag:blogger.com,1999:blog-7456102419060969949.post-8511599959827272929</id><published>2008-07-15T14:43:00.000-07:00</published><updated>2010-04-10T18:49:29.926-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-10T18:49:29.926-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Insights" /><title>Payoff from mainframe automation</title><content type="html">Remember the &lt;a href="http://www.technologyshift.com/2008/07/discovering-mainframe-automation.html"&gt;mainframe automation tool that we recently deployed&lt;/a&gt;? After a little more than a week, we are now realising the dividends from our little experiment.&lt;br /&gt;&lt;br /&gt;From the beginning, we did not incur any additional cost as the tool was developed on the time allotted for the original task. So any time it is used after the initial one produces cost savings for us.&lt;br /&gt;&lt;br /&gt;The first opportunity came today.&lt;br /&gt;&lt;span id="fullpost"&gt;&lt;br /&gt;Because of a miss during analysis and design, we needed to regenerate the files we created for the new branch. The error was caused by incorrect parameters supplied by the designer that was used during the initial run.&lt;br /&gt;&lt;br /&gt;Without the tool, the rerun would have taken us back around two days. Now, it only took five minutes to setup the job and another twenty minutes to generate the files. The designer and the project manager were relieved that we were able to address the issue immediately.&lt;br /&gt;&lt;br /&gt;The files are crucial for the test phase. No testing can occur without them. A delay in setup greatly impacts the critical path with its cascading effect to the succeeding phases of the development life cycle.&lt;br /&gt;&lt;br /&gt;With the quick turnaround because of the tool, the issue was addressed with minimal impact. In the eyes of the user, the fix was transparent as the users were able to begin testing on schedule.&lt;br /&gt;&lt;br /&gt;This is just the direct measurable, quantifiable benefits for us. The biggest benefits from automation is flexibility and agility.&lt;br /&gt;&lt;br /&gt;Developers are juggling multiple tasks all the time. Without automation, you need to pull them away from their current task to address the issue. This distraction impacts their creativity and their ability to perform on their current task. The longer the distraction is, the greater its impact.&lt;br /&gt;&lt;br /&gt;With automation, you limit the disruptions if not totally remove it. By having a simple tool, you have a choice of letting other developers who are free to do the task and allow others to continue with their current tasks.&lt;br /&gt;&lt;br /&gt;The tool's simplicity also addresses the issue of single point sensitivity. Instead of having the business intelligence solely on the developers, this is now integrated within the tool.&lt;br /&gt;&lt;br /&gt;Developers also benefits from automation. This provides a level of agility that allows us to focus on tasks that adds more value by freeing us from mind-numbing, repetitive and time consuming ones. This provides opportunities for learning and for finding ways to do our job more efficiently and serve our clients better.&lt;br /&gt;&lt;br /&gt;These are the reasons why I believe that automation should be pursued. Of course, having the quick payback this week just made argument for it a lot easier to make.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7456102419060969949-8511599959827272929?l=www.technologyshift.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/tY9J6EucrUTP3p8eNhBOIVR8hbo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/tY9J6EucrUTP3p8eNhBOIVR8hbo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/tY9J6EucrUTP3p8eNhBOIVR8hbo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/tY9J6EucrUTP3p8eNhBOIVR8hbo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TechnologyShift?a=Pb6QsqdDQL4:3F6xy5NXGG0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TechnologyShift?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TechnologyShift/~4/Pb6QsqdDQL4" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7456102419060969949/posts/default/8511599959827272929?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7456102419060969949/posts/default/8511599959827272929?v=2" /><link rel="alternate" type="text/html" href="http://www.technologyshift.com/2008/07/payoff-from-mainframe-automation.html" title="Payoff from mainframe automation" /><author><name>nuts</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author></entry><entry gd:etag="W/&quot;CkICSHc5fyp7ImA9WxFTGUg.&quot;"><id>tag:blogger.com,1999:blog-7456102419060969949.post-6724950588405719999</id><published>2008-07-07T17:09:00.000-07:00</published><updated>2010-04-10T18:49:29.927-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-10T18:49:29.927-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Insights" /><title>Discovering mainframe automation</title><content type="html">It finally happened - a team member took a bite on my automation bait.&lt;br /&gt;&lt;br /&gt;In the first few weeks from joining the company, I created three ISPF Edit macros and presented this to the team. I did a demonstration and shared the code. I was hoping it will influence the team towards the automation route (similar to what I did with the previous teams I work with).&lt;br /&gt;&lt;br /&gt;I thought that my strategy did not work as months passed with nothing happening. But everything changed today.&lt;br /&gt;&lt;span id="fullpost"&gt;&lt;br /&gt;One of the application developers went up to me for some advice. He is currently working on a new branch being created in the system and was assigned to generate all of the datasets needed for all environments.&lt;br /&gt;&lt;br /&gt;The entities needed in the file creation process already exists but needed to be customised. This means copying all of the  jobs and control cards used in the last branch setup and updating certain strings within each entity to the values associated with the new branch.&lt;br /&gt;&lt;br /&gt;It is a simple job that can be achieved by ISPF Edit commands. The only issue with this is that he is dealing with more than five hundred files and at least six development environments. Editing more than three thousand entities is very tedious and prone to errors. Nobody in his right mind should do this.&lt;br /&gt;&lt;br /&gt;With this, he remembered my talk about automation back in January and was hoping if I could help him out.&lt;br /&gt;&lt;br /&gt;Before I gave my response, I asked him to show me how he would do it manually. First, he open a member to edit it. He then applied some filters using &lt;span style="font-style: italic;"&gt;Exclude all&lt;/span&gt; ISPF edit command to isolate those lines to be updated. Lastly, he executed a series of &lt;span style="font-style: italic;"&gt;Change all&lt;/span&gt; Edit commands to apply the updates needed.&lt;br /&gt;&lt;br /&gt;Based on what I saw, it is a good candidate for an ISPF Edit macro automation. The steps are defined and can easily be translated to executable calls in REXX.&lt;br /&gt;&lt;br /&gt;To create the macro, we started with a basic template in REXX shown below.&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;000001 /*REXX*/&lt;br /&gt;000002 address isredit "macro"&lt;br /&gt;000003 &lt;span style="font-style: italic;"&gt;&amp;lt;insert commands here&amp;gt;&lt;/span&gt;&lt;br /&gt;000004 exit 0&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Now all we need to do is insert the commands specific for the task. Using the manual steps I was shown previously, we proceeded in translating this commands to REXX calls. This is done by concatenating the &lt;/span&gt;&lt;span style="font-style: italic;" id="fullpost"&gt;address isredit&lt;/span&gt;&lt;span id="fullpost"&gt; text to the commands entered in the command line. So an exclude command below:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;EXCLUDE DSN ALL&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;will appear as&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;address isredit "EXCLUDE DSN ALL"&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;in the Edit macro.&lt;br /&gt;&lt;br /&gt;A few more lines (less than ten) and the automation tool is finished. We tried it in one entity and it worked as expected.&lt;br /&gt;&lt;br /&gt;He was too eager to use the macro that he started editing the other members in the library. I stopped him from doing so because we can do so much more. From my point of view, the tool is not complete.&lt;br /&gt;&lt;br /&gt;I suggested that he does not need to manually go through each member as this step can also be automated. We can to create a REXX executable that lists all members in the library, goes through each member in the list and executes the macro to do the update.&lt;br /&gt;&lt;br /&gt;Another thirty minutes to create the additional REXX executable and we are done. We tested it and it ran for three minutes to update all members in the library. By doing this, we have completed a task estimated for two days in less than three hours (less if you only consider the actual development time, taking away the time spent in mentoring). Best of all, this tool is available the next time a new branch is setup.&lt;br /&gt;&lt;br /&gt;After that, he is hooked. He came up with the same conclusion as I had before - "This is the way forward". Now, he is taking his new tool a bit further by providing a user interface to make it easier to use. From the looks of it, he will be finished before the week ends.&lt;br /&gt;&lt;br /&gt;From experience, I have encountered many similar tasks that can be solve by a simple ISPF Edit macro. You may have one in mind right now and I maybe able to help you out. If you are interested, just &lt;a href="http://www.technologyshift.com/2008/05/contact.html"&gt;contact me&lt;/a&gt;.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7456102419060969949-6724950588405719999?l=www.technologyshift.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/1Z1-7RNnzy5PGNNhG6DTB5Ut42E/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/1Z1-7RNnzy5PGNNhG6DTB5Ut42E/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/1Z1-7RNnzy5PGNNhG6DTB5Ut42E/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/1Z1-7RNnzy5PGNNhG6DTB5Ut42E/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TechnologyShift?a=J4tzPUwhDZo:V1bH5-LcRDM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TechnologyShift?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TechnologyShift/~4/J4tzPUwhDZo" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7456102419060969949/posts/default/6724950588405719999?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7456102419060969949/posts/default/6724950588405719999?v=2" /><link rel="alternate" type="text/html" href="http://www.technologyshift.com/2008/07/discovering-mainframe-automation.html" title="Discovering mainframe automation" /><author><name>nuts</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author></entry><entry gd:etag="W/&quot;CkUDRnc_eCp7ImA9WxFTGUg.&quot;"><id>tag:blogger.com,1999:blog-7456102419060969949.post-2367508719321619761</id><published>2008-06-10T16:58:00.000-07:00</published><updated>2010-04-10T18:44:37.940-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-10T18:44:37.940-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Rexx Utilities" /><title>Mainframe automation for logical screens setup</title><content type="html">Mainframe developers working in the ISPF environment need to have more than one logical screen to work effectively.&lt;br /&gt;
&lt;br /&gt;
You have an edit session for the source code, another for Changeman, maybe another one for the listing (SDSF or maybe IOF). Most environments are setup to allow you to create up to eight screens (although the actual limit is 32).&lt;br /&gt;
&lt;br /&gt;
Probably you have a list of preferred screens that you setup during startup. Most likely, you have a recorded macro that does this for you. This is fine but there is one issue with doing this.&lt;br /&gt;
&lt;br /&gt;
There are many mainframe emulators out in the market - Hummingbird, Eicon Aviva, Extra. A recorded macro will not be portable between these tools.&lt;br /&gt;
&lt;br /&gt;
To address, I recommend a another solution - creating a TSO command to do this setup.&lt;br /&gt;
&lt;span id="fullpost"&gt;Below is an copy what I currently have in example of&lt;br /&gt;
&lt;span style="font-family: courier new;"&gt;&lt;br /&gt;
/* REXX */&lt;br /&gt;
/* Name : INITSCR */&lt;br /&gt;
/* Website : WWW.TECHNOLOGYSHIFT.COM */&lt;br /&gt;
ADDRESS "ISPEXEC"&lt;br /&gt;
"VGET (ZPANELID)"&lt;br /&gt;
"SELECT PGM(ISPSTRT) PARM(SCRNAME ST PERM;SDSF;ST;SWAP) "&lt;br /&gt;
"SELECT PGM(ISPSTRT) PARM(SCRNAME SRC PERM;3.4;SWAP) "&lt;br /&gt;
"SELECT PGM(ISPSTRT) PARM(SCRNAME CHK PERM;SCRNAME ON;SWAP) "&lt;br /&gt;
ZCMD = "SCRNAME TOOLS PERM"&lt;br /&gt;
"DISPLAY PANEL("ZPANELID") COMMAND(ZCMD) "&lt;br /&gt;
"SELECT PGM(ISRDSLST) PARM(DSL USERID.TOOLS) "&lt;br /&gt;
EXIT 0&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
Copy this code and paste in a new member in one of the concatenated SYSPROC libraries. To invoke it, you should type in the command line TSO followed by the member name. In mine, the command would be TSO INITSCR.&lt;br /&gt;
&lt;br /&gt;
To customised this, you should know the following.&lt;br /&gt;
&lt;li&gt;ISPSTRT is the program needed to create a new screen. As you can see, the PARM contains the commands you needed to execute for the screen&lt;/li&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;li&gt;ISRDSLST will show you the dataset list (3.4) using the name specified in the PARM&lt;/li&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
That's it. Regardless of what mainframe emulator you use, this will work in any of them. Try it and see how it goes.&lt;br /&gt;
&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7456102419060969949-2367508719321619761?l=www.technologyshift.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/enySUlvx1kYI9SfNK4HOYUD8Vj8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/enySUlvx1kYI9SfNK4HOYUD8Vj8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/enySUlvx1kYI9SfNK4HOYUD8Vj8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/enySUlvx1kYI9SfNK4HOYUD8Vj8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TechnologyShift?a=eU-fyUt_hfI:mcZH0s-5Zk0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TechnologyShift?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TechnologyShift/~4/eU-fyUt_hfI" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7456102419060969949/posts/default/2367508719321619761?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7456102419060969949/posts/default/2367508719321619761?v=2" /><link rel="alternate" type="text/html" href="http://www.technologyshift.com/2008/06/setting-up-logical-mainframe-sessions.html" title="Mainframe automation for logical screens setup" /><author><name>nuts</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author></entry><entry gd:etag="W/&quot;A0QHQnc8fyp7ImA9WxNUFk8.&quot;"><id>tag:blogger.com,1999:blog-7456102419060969949.post-657516035216264526</id><published>2008-06-08T07:30:00.000-07:00</published><updated>2009-11-07T13:28:53.977-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-07T13:28:53.977-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Excel tips" /><title>Simplifying Excel formula</title><content type="html">Have you worked with a formula that because it is too long ends up wrapping around a cell when you tried editing it?&lt;br /&gt;
&lt;br /&gt;
Later you realise you made a mistake and updating it is confusing. Worse, this formula is used in several cells so missing one update is easy.&lt;br /&gt;
&lt;br /&gt;
This is a common issue that Excel users encounter. Good thing there is a simple way to address this.&lt;br /&gt;
&lt;span id="fullpost"&gt;&lt;br /&gt;
Before you start, you will need to change an option within your Excel session. This is needed to ensure that the formula you are creating will be consistent even if applied in different cells.&lt;br /&gt;
&lt;br /&gt;
Go to the &lt;span style="font-style: italic;"&gt;&lt;span style="font-weight: bold;"&gt;Tools&lt;/span&gt;&lt;/span&gt; menu and choose &lt;span style="font-style: italic;"&gt;&lt;span style="font-weight: bold;"&gt;Options&lt;/span&gt;&lt;/span&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_6k53y8ID--A/SExwSoH5yuI/AAAAAAAAAGg/FL_U0ZCteIk/s1600-h/p1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_6k53y8ID--A/SExwSoH5yuI/AAAAAAAAAGg/FL_U0ZCteIk/s320/p1.jpg" alt="" id="BLOGGER_PHOTO_ID_5209662334271343330" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
A pop-up window will be shown. In this pop-up, click the &lt;span style="font-weight: bold;"&gt;&lt;span style="font-style: italic;"&gt;General&lt;/span&gt;&lt;/span&gt; tab and check the &lt;span style="font-weight: bold;"&gt;&lt;span style="font-style: italic;"&gt;R1C1 reference style&lt;/span&gt;&lt;/span&gt; setting. You should see something similar to the one below.&lt;br /&gt;
&lt;br /&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_6k53y8ID--A/SExxVDM5JCI/AAAAAAAAAGo/P4EOqXgf-yg/s1600-h/p2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_6k53y8ID--A/SExxVDM5JCI/AAAAAAAAAGo/P4EOqXgf-yg/s320/p2.jpg" alt="" id="BLOGGER_PHOTO_ID_5209663475411395618" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Now you are ready to for the solution. First, you create and test the long formula in  the cell where it is needed. I have included below an actual formula I am using. One thing to note is that the same calculation is needed on the cells below it.&lt;br /&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_6k53y8ID--A/SExzMu9pa3I/AAAAAAAAAGw/xp8t0NrmjSk/s1600-h/p3.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_6k53y8ID--A/SExzMu9pa3I/AAAAAAAAAGw/xp8t0NrmjSk/s320/p3.jpg" alt="" id="BLOGGER_PHOTO_ID_5209665531563043698" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Once you are satisfied with the formula in the cell, you will need to copy the formula to the clipboard.&lt;br /&gt;
&lt;br /&gt;
The next step will be to &lt;a href="http://www.technologyshift.com/2008/05/easy-access-to-referred-ranges.html"&gt;define a name&lt;/a&gt; but instead of specifying a range in the &lt;span style="font-weight: bold;"&gt;&lt;span style="font-style: italic;"&gt;Refers to&lt;/span&gt;&lt;/span&gt; textbox, paste the formula you previously saved in the clipboard.&lt;br /&gt;
&lt;br /&gt;
The new defined name is now ready for use. This is like any other function that returns a value. So on all cells that needed the formula, type equal sign and then the name you defined.&lt;br /&gt;
&lt;br /&gt;
That's it. If you need to correct some errors, you only need to update it on one place (in the Define Name option) and the changes will be reflected on the cells that calls it.&lt;br /&gt;
&lt;br /&gt;
You can even make this simpler by breaking your formula into segments (with each defined with a unique descriptive name), making your formula easier to manage.&lt;br /&gt;
&lt;br /&gt;
Why don't you try it and see how it goes.&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7456102419060969949-657516035216264526?l=www.technologyshift.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ZPavoY58hghEHBM4VPfVuLRUCgQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZPavoY58hghEHBM4VPfVuLRUCgQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ZPavoY58hghEHBM4VPfVuLRUCgQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZPavoY58hghEHBM4VPfVuLRUCgQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TechnologyShift?a=RBusWx8-wZ4:mjXfVrVTzAw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TechnologyShift?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TechnologyShift/~4/RBusWx8-wZ4" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7456102419060969949/posts/default/657516035216264526?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7456102419060969949/posts/default/657516035216264526?v=2" /><link rel="alternate" type="text/html" href="http://www.technologyshift.com/2008/06/simplifying-excel-functions.html" title="Simplifying Excel formula" /><author><name>nuts</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_6k53y8ID--A/SExwSoH5yuI/AAAAAAAAAGg/FL_U0ZCteIk/s72-c/p1.jpg" height="72" width="72" /></entry><entry gd:etag="W/&quot;Ak4MQH05cSp7ImA9WxNUFUg.&quot;"><id>tag:blogger.com,1999:blog-7456102419060969949.post-4183475671867118501</id><published>2008-05-19T15:01:00.000-07:00</published><updated>2009-11-06T17:56:21.329-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-06T17:56:21.329-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Mainframe tips" /><title>Automated email notification for z/OS</title><content type="html">&lt;span style="font-size: 100%;"&gt;Despite the tools available in the mainframe, there are still tasks done manually.&lt;br /&gt;
&lt;br /&gt;
Operation support personnel are needed to monitor jobs for abends. They spent their days staring at the screen, refreshing the screen manually by pressing the Return key.&lt;br /&gt;
&lt;br /&gt;
Even mainframe developers cannot escape this. When you are doing testing, you may be required to wait for a long-running job before you can initiate your own tests.&lt;br /&gt;
&lt;br /&gt;
Fortunately there is a simple way to address this using the email service commonly available in the mainframe.&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span id="fullpost"&gt;&lt;span style="font-size: 100%;"&gt;&lt;br /&gt;
Since most companies are using TN3270 (with TCP/IP) to connect to the mainframe, the &lt;a href="http://en.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol"&gt;Simple Mail Transfer Protocol (SMTP)&lt;/a&gt; service is probably already active in your system. If not, you will need the help of your systems support group to enable it.&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;span style="font-size: 100%; font-weight: bold;"&gt;Getting started&lt;/span&gt;&lt;span style="font-size: 100%;"&gt;.&lt;br /&gt;
Setting up a JCL that sends email from the mainframe is easy. You can start with any copy step using mainframe utilities with repro capability. IEBGENER, IDCAMS, SAS, Fileaid, and Eztrieve are some of the many choices available.&lt;br /&gt;
&lt;br /&gt;
My personal preference is SORT and the jobstep will be similar to the one below.&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;span style="font-family: courier new; font-size: 100%;"&gt;&lt;span style="font-size: 85%;"&gt;//SORT     EXEC PGM=SORT,REGION=0M&lt;br /&gt;
//SYSOUT   DD SYSOUT=*&lt;br /&gt;
//SORTMSG  DD SYSOUT=*&lt;br /&gt;
//SORTIN   DD DISP=SHR,DSN=&lt;/span&gt;&lt;span style="font-size: 85%; font-style: italic;"&gt;your.email.dsn&lt;/span&gt;&lt;span style="font-size: 85%;"&gt;&lt;br /&gt;
//SORTOUT  DD SYSOUT=(B,SMTP)&lt;br /&gt;
//SORTWK01 DD UNIT=SYSDA,SPACE=(CYL,(10,10),RLSE),DISP=(NEW,PASS)&lt;br /&gt;
//SYSIN    DD *&lt;br /&gt;
SORT FIELDS=COPY&lt;/span&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span style="font-size: 100%;"&gt;&lt;br /&gt;
As you can see, it looks like any regular SORT job. The only noticeable difference is with the output  (SORTOUT). Instead of a dataset, the output is being routed to the sysout that will be picked up by the SMTP later for processing.&lt;br /&gt;
&lt;br /&gt;
There is another difference that is not apparent. The data found in the input (SORTIN) requires to follow a certain format. The simplest of which is shown below.&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;span style="font-size: 85%;"&gt;&lt;span style="font-family: courier new;"&gt;helo &lt;span style="font-style: italic; font-weight: bold;"&gt;hostname&lt;/span&gt;&lt;br /&gt;
mail from: &amp;lt;&lt;span style="font-style: italic; font-weight: bold;"&gt;youremail@address&lt;/span&gt;&amp;gt;&lt;br /&gt;
rcpt to: &amp;lt;&lt;span style="font-style: italic; font-weight: bold;"&gt;receiver@address&lt;/span&gt;&amp;gt;&lt;br /&gt;
data&lt;br /&gt;
From:     &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 85%; font-weight: bold;"&gt;&lt;span style="font-family: courier new;"&gt;&lt;span style="font-style: italic;"&gt;youremail@address&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 85%;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span style="font-size: 85%;"&gt;&lt;span style="font-family: courier new;"&gt;To:       &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 85%; font-weight: bold;"&gt;&lt;span style="font-family: courier new;"&gt;&lt;span style="font-style: italic;"&gt;receiver@address&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 100%;"&gt;&lt;span style="font-family: courier new;"&gt;&lt;span style="font-size: 85%;"&gt;&lt;br /&gt;
Subject:  &lt;/span&gt;&lt;span style="font-size: 85%; font-style: italic; font-weight: bold;"&gt;your subject&lt;/span&gt;&lt;span style="font-size: 85%;"&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;span style="font-size: 85%; font-style: italic; font-weight: bold;"&gt;your body text&lt;/span&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
You need to update the items in italics. Most of these are familiar variables found in any other email except for the hostname. This variable refers to the JES node name for your system.&lt;br /&gt;
&lt;br /&gt;
The items you need to think about are the subject and the body text. For abend monitoring, the common information included in the subject are the jobname, abending step and the return code. Depending upon the nature of the abend, you can include additional details in the body text of the email.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;Beyond end-of-job notification.&lt;br /&gt;
&lt;/span&gt;What if you can do formatting?&lt;br /&gt;
&lt;br /&gt;
How about adding some attachments?&lt;br /&gt;
&lt;br /&gt;
These capabilities are available through Multipurpose Internet Mail Extensions (MIME). MIME is the standard for multi part, multimedia, and binary data in e-mails.&lt;br /&gt;
&lt;br /&gt;
MIME is important as it opens the opportunity to create reports and sending them directly to the users. No more need for printing. Reports are sent on time. There is an added security as no other person has access to the reports except for the intended recipients.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Email standards discussion is another article in itself.  If you want to learn more about this, I recommend reading this &lt;a href="http://www.planetmvs.com/mvsmail/index.html"&gt;good article from Planet MVS&lt;/a&gt;.&lt;/span&gt;&lt;br /&gt;
&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7456102419060969949-4183475671867118501?l=www.technologyshift.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Ho06hneM90aBGufnoRCiGT7kIWo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Ho06hneM90aBGufnoRCiGT7kIWo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Ho06hneM90aBGufnoRCiGT7kIWo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Ho06hneM90aBGufnoRCiGT7kIWo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TechnologyShift?a=loZeNdZ8oTM:swZABSZiDUI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TechnologyShift?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TechnologyShift/~4/loZeNdZ8oTM" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7456102419060969949/posts/default/4183475671867118501?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7456102419060969949/posts/default/4183475671867118501?v=2" /><link rel="alternate" type="text/html" href="http://www.technologyshift.com/2008/05/automated-email-notification-for-zos.html" title="Automated email notification for z/OS" /><author><name>nuts</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author></entry><entry gd:etag="W/&quot;A0EER309fCp7ImA9WxFVFk4.&quot;"><id>tag:blogger.com,1999:blog-7456102419060969949.post-8734535616252384401</id><published>2008-05-18T12:17:00.000-07:00</published><updated>2010-06-15T15:06:46.364-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-15T15:06:46.364-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Workbooks" /><category scheme="http://www.blogger.com/atom/ns#" term="Others" /><title>Excel solution for a mainframe task</title><content type="html">People always goes back to what is familiar. IT professionals are no different.&lt;br /&gt;
&lt;br /&gt;
When confronted with an issue, mainframe developers will look for solutions within the legacy system.  Most will deal with these using Cobol. Others will lean on using other utilities.&lt;br /&gt;
&lt;br /&gt;
But sometimes you can get solution outside of your development platform.&lt;br /&gt;
&lt;span id="fullpost"&gt;&lt;br /&gt;
Previously, I have shown how to create a simple utility that can &lt;a href="http://www.technologyshift.com/2008/05/mainframe-automation-in-five-lines.html"&gt;convert julian date to a gregorian format&lt;/a&gt;. Now, I will show you another simple alternative using Excel implemented  through the formula shown below.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family:courier new;"&gt;=DATE(A1&lt;/span&gt;&lt;em style="font-family: courier new;"&gt;&lt;/em&gt;&lt;span style="font-family:courier new;"&gt;/1000),1,MOD(A1,1000))&lt;/span&gt;&lt;em style="font-family: courier new;"&gt;&lt;/em&gt;&lt;br /&gt;
&lt;br /&gt;
where A1 is the cell containing a number representing the julian date with &lt;span style="font-style: italic;"&gt;ccyyddd&lt;/span&gt; format.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Different approaches. Both delivers similar level of simplicity.&lt;br /&gt;
&lt;br /&gt;
So why even bother?&lt;br /&gt;
&lt;br /&gt;
If your focus is on cutting mainframe-related costs, moving processes away from the systems can help. There are many opportunities for this in the area of data analysis and manipulation. How much you can gain will depend on how much of your processes you can migrate.&lt;br /&gt;
&lt;br /&gt;
Non-mainframe solutions can provide a fail safe process. Connection issues, although maybe a rare occurrence, will impact your ability to deliver - especially those high-profile adhoc requests.&lt;br /&gt;
&lt;br /&gt;
For mainframe developers, this breaks the monotony of green texts on a dark screen. This kind of exercise nurtures creativity as it allows you to think differently.&lt;br /&gt;
&lt;br /&gt;
So the next time you are assigned a mainframe task, try coming up with two solutions - one mainframe and another non-mainframe. See how it goes?&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7456102419060969949-8734535616252384401?l=www.technologyshift.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/IJEqh_lTJx70HcgLXVHeLKr5yQI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IJEqh_lTJx70HcgLXVHeLKr5yQI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/IJEqh_lTJx70HcgLXVHeLKr5yQI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IJEqh_lTJx70HcgLXVHeLKr5yQI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TechnologyShift?a=PThPoso9jBI:bT5rOg1j2ZM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TechnologyShift?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TechnologyShift/~4/PThPoso9jBI" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7456102419060969949/posts/default/8734535616252384401?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7456102419060969949/posts/default/8734535616252384401?v=2" /><link rel="alternate" type="text/html" href="http://www.technologyshift.com/2008/05/excel-solution-for-mainframe-task.html" title="Excel solution for a mainframe task" /><author><name>nuts</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author></entry><entry gd:etag="W/&quot;CkYMRHg4fyp7ImA9WxFTGUg.&quot;"><id>tag:blogger.com,1999:blog-7456102419060969949.post-6314418405820608158</id><published>2008-05-14T15:26:00.000-07:00</published><updated>2010-04-10T18:43:05.637-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-10T18:43:05.637-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Rexx Utilities" /><title>Julian Date Conversion : Automation in five lines</title><content type="html">Working with legacy data, it is common to encounter dates in Julian format - a product from an era when a character of data was very precious. This format is meaningless to most unless converted to the more familiar Gregorian format - a task we can easily automate.&lt;br /&gt;
&lt;br /&gt;
&lt;span id="fullpost"&gt;You may already have a solution in place in your system. Just in case you don't, I am sharing one with you.&lt;br /&gt;
&lt;br /&gt;
First, create a new member in one of the SYSPROC libraries. Copy the code below and paste to this new member.&lt;br /&gt;
&lt;br /&gt;
&lt;span id="fullpost"&gt;&lt;span style="font-family: courier new;"&gt;/* REXX */&lt;br /&gt;
PARSE ARG JDATE&lt;br /&gt;
GDATE = DATE('S',JDATE,'J')&lt;br /&gt;
SAY GDATE&lt;br /&gt;
EXIT 0&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
That's it. Five lines of code and you are done.&lt;br /&gt;
&lt;br /&gt;
To use the tool, type &lt;span style="font-weight: bold;"&gt;TSO &lt;/span&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;membername yyddd&lt;/span&gt; in the command line. The membername corresponds to the name of the new member created and yyddd is the Julian date to be converted.&lt;br /&gt;
&lt;br /&gt;
This is one of the very first tools I created. The tool's simplicity does not diminish its value as I and the people I shared this with are still using this even today (although the one I have was modified to include a GUI).&lt;br /&gt;
&lt;br /&gt;
Now, if you hear that automation is complex, show them this example.&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7456102419060969949-6314418405820608158?l=www.technologyshift.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/D7Is4-CVSjCC5nHyXzca0huC3I0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/D7Is4-CVSjCC5nHyXzca0huC3I0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/D7Is4-CVSjCC5nHyXzca0huC3I0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/D7Is4-CVSjCC5nHyXzca0huC3I0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TechnologyShift?a=-UPNG9sjqdM:_x3sNtOeI9k:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TechnologyShift?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TechnologyShift/~4/-UPNG9sjqdM" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7456102419060969949/posts/default/6314418405820608158?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7456102419060969949/posts/default/6314418405820608158?v=2" /><link rel="alternate" type="text/html" href="http://www.technologyshift.com/2008/05/mainframe-automation-in-five-lines.html" title="Julian Date Conversion : Automation in five lines" /><author><name>nuts</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author></entry><entry gd:etag="W/&quot;CkUARH0yfSp7ImA9WxFTGUg.&quot;"><id>tag:blogger.com,1999:blog-7456102419060969949.post-1161742153620378850</id><published>2008-05-13T14:14:00.000-07:00</published><updated>2010-04-10T18:44:05.395-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-10T18:44:05.395-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Rexx Utilities" /><title>Mainframe tool for regression testing</title><content type="html">It's just a typical regression testing for a mainframe developer. You submit a JCL and wait until it is completed. You open a new session window to review the output dataset and verify that it matches the expected results. Quite simple.&lt;br /&gt;
&lt;br /&gt;
But when you spend your whole week repeating the same task, this is very mind numbing. You are bound to commit errors. You can't do away with it so you must find ways to address this - by automating some of the steps in the process.&lt;br /&gt;
&lt;span id="fullpost"&gt;&lt;br /&gt;
One of the thing you can do is be able to view the output datasets without getting out of the JCL (without starting a new seesion window). An ISPF Edit macro is appropriate for this type of task.&lt;br /&gt;
&lt;br /&gt;
To create one, you will need to edit a new member in one of the libraries associated to SYSPROC. Copy and paste the code below to that member.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: courier new;"&gt;/* REXX */&lt;br /&gt;
/* Visit WWW.TECHNOLOGYSHIFT.COM */&lt;br /&gt;
ADDRESS ISREDIT&lt;br /&gt;
"MACRO"&lt;br /&gt;
"RESET"&lt;br /&gt;
"(CURRLN) = LINE .ZCSR"&lt;br /&gt;
CURRLN = TRANSLATE(CURRLN,' ',"=,'")&lt;br /&gt;
"(ROW1,COL1) = CURSOR"&lt;br /&gt;
CURRLN = LEFT(CURRLN,POS(' ',CURRLN,COL1) - 1)&lt;br /&gt;
CURRLN = WORD(CURRLN,WORDS(CURRLN))&lt;br /&gt;
&lt;br /&gt;
IF SYSDSN(CURRLN) = "OK" THEN&lt;br /&gt;
ADDRESS ISPEXEC "VIEW DATASET('"CURRLN"')"&lt;br /&gt;
&lt;br /&gt;
EXIT 0&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
To invoke the macro, you just go and edit any JCL you are testing. Type the macro name (corresponds to the member name) in the command line, position the cursor under the name of the dataset you want to review, then press enter. You should be viewing the dataset now.&lt;br /&gt;
&lt;br /&gt;
Congratulations! With a few lines of code, you created your very first automation. Now you see how simple it is?&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7456102419060969949-1161742153620378850?l=www.technologyshift.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/A9dLBpsRFb3LGLsJ5vdxcDlB3lw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/A9dLBpsRFb3LGLsJ5vdxcDlB3lw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/A9dLBpsRFb3LGLsJ5vdxcDlB3lw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/A9dLBpsRFb3LGLsJ5vdxcDlB3lw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TechnologyShift?a=Cer1YcPIbiQ:qiKATxcRk54:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TechnologyShift?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TechnologyShift/~4/Cer1YcPIbiQ" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7456102419060969949/posts/default/1161742153620378850?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7456102419060969949/posts/default/1161742153620378850?v=2" /><link rel="alternate" type="text/html" href="http://www.technologyshift.com/2008/05/little-help-on-regression-testing.html" title="Mainframe tool for regression testing" /><author><name>nuts</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author></entry><entry gd:etag="W/&quot;A04NQns5eCp7ImA9WxNUFk8.&quot;"><id>tag:blogger.com,1999:blog-7456102419060969949.post-8824343386703063760</id><published>2008-05-12T15:32:00.000-07:00</published><updated>2009-11-07T13:39:53.520-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-07T13:39:53.520-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Excel tips" /><title>Excel's "missing" date function</title><content type="html">While working on one of my personal projects, I needed an Excel date function that I have used before. I typed the formula in a cell and a weird thing happened - the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;Intellisense&lt;/span&gt; did not show me the parameters I need to put in.&lt;br /&gt;&lt;br /&gt;&lt;span id="fullpost"&gt;&lt;br /&gt;&lt;br /&gt;So I did what a clever Excel user does, press F1. To my surprise, my query did not retrieve anything from Help. I know the function exists because Excel was able to recognize it and I have used before.&lt;br /&gt;&lt;br /&gt;You know what I found out - it is still available but undocumented. Typical Microsoft behavior. Luckily, I was able to find the syntax for it.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;(Re)Introducing &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;DATEDIF&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;DATEDIF&lt;/span&gt; returns the difference between two dates. The results is expressed in either years, months or days.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:times new roman;" &gt;Syntax&lt;/span&gt;&lt;br /&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-IE"&gt;&lt;span style="font-weight: bold;font-family:times new roman;" &gt;=&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;DATEDIF&lt;/span&gt;(start_date, end_date, return_type)&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-IE"&gt;&lt;span style="font-weight: bold;"&gt;start_date&lt;/span&gt; &lt;/span&gt;&lt;span lang="EN-IE"&gt;is the date that represents the start date&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-IE"&gt;&lt;span style="font-weight: bold;"&gt;end_date&lt;/span&gt; &lt;/span&gt;&lt;span lang="EN-IE"&gt;is the date that represents the end date&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-IE"&gt;&lt;span style="font-weight: bold;"&gt;return_type&lt;/span&gt; determines the type of the return value.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="font-family:courier new;"&gt;&lt;span lang="EN-IE"&gt;&lt;span style="font-weight: bold;"&gt;Interval&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;Value returned&lt;/span&gt; &lt;o:p style="font-weight: bold;"&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="font-family:courier new;"&gt;&lt;span lang="EN-IE"&gt;&lt;span style="font-weight: bold;"&gt;m&lt;/span&gt; Complete calendar months between the dates. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="font-family:courier new;"&gt;&lt;span lang="EN-IE"&gt;d Number of days between the dates. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="font-family:courier new;"&gt;&lt;span lang="EN-IE"&gt;y Complete calendar years between the dates. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="font-family:courier new;"&gt;&lt;span lang="EN-IE"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;ym&lt;/span&gt; Complete calendar months between the dates as if they were&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="font-family:courier new;"&gt;&lt;span lang="EN-IE"&gt;of the same year (disregards year in evaluation). &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="font-family:courier new;"&gt;&lt;span lang="EN-IE"&gt;&lt;span style="font-weight: bold;"&gt;yd&lt;/span&gt; Complete calendar days between the dates as if they were&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="font-family:courier new;"&gt;&lt;span lang="EN-IE"&gt;of the same year &lt;/span&gt;&lt;span lang="EN-IE"&gt;(disregards year in evaluation).&lt;/span&gt;&lt;span lang="EN-IE"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="font-family:courier new;"&gt;&lt;span lang="EN-IE"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;md&lt;/span&gt;&lt;/span&gt; Complete calendar days between the dates as if they were&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="font-family:courier new;"&gt;&lt;span lang="EN-IE"&gt;of the same month and same year &lt;/span&gt;&lt;span lang="EN-IE"&gt;(disregards both year and&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="font-family:courier new;"&gt;&lt;span lang="EN-IE"&gt;month in evaluation).&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="font-family:courier new;"&gt;&lt;span lang="EN-IE"&gt;&lt;span style="font-family:georgia;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="font-family:courier new;"&gt;&lt;span lang="EN-IE"&gt;&lt;span style="font-family:georgia;"&gt;I have tried the function parameters written here but I can't guarantee its accuracy (MS does not even acknowledge its existence). Feel free to use it and provide me some feedback it what I written here is incorrect.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7456102419060969949-8824343386703063760?l=www.technologyshift.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/EbxpQz3sMqXzPTNlU0ATTFZvgEk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/EbxpQz3sMqXzPTNlU0ATTFZvgEk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/EbxpQz3sMqXzPTNlU0ATTFZvgEk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/EbxpQz3sMqXzPTNlU0ATTFZvgEk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TechnologyShift?a=X-P8ttEUc_g:vwFnQ7yNCUI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TechnologyShift?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TechnologyShift/~4/X-P8ttEUc_g" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7456102419060969949/posts/default/8824343386703063760?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7456102419060969949/posts/default/8824343386703063760?v=2" /><link rel="alternate" type="text/html" href="http://www.technologyshift.com/2008/05/missing-excel-date-function.html" title="Excel's &quot;missing&quot; date function" /><author><name>nuts</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author></entry><entry gd:etag="W/&quot;A04NQns5eCp7ImA9WxNUFk8.&quot;"><id>tag:blogger.com,1999:blog-7456102419060969949.post-4720188400898512079</id><published>2008-05-12T15:26:00.000-07:00</published><updated>2009-11-07T13:39:53.520-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-07T13:39:53.520-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Excel tips" /><title>Excel navigation made easy</title><content type="html">Have you ever wondered what is the best way to move around Excel? You may not believe this but using the keyboard is the best way to do this - quicker than the fastest mouse clicks you could muster.&lt;br /&gt;&lt;br /&gt;&lt;span id="fullpost"&gt;&lt;br /&gt;&lt;br /&gt;You don't believe me? Let me show you.&lt;br /&gt;&lt;br /&gt;Say you are working with column with 500 contiguous cells and you want to get to the last cell. Easy. Just press page up/down and the arrow keys until you see the last cell.&lt;br /&gt;&lt;br /&gt;What if your data is bigger - 100,000 records? You can use your mouse with the scroll bar. Navigating through this is tricky but it is more practical than using the keyboard, right?&lt;br /&gt;&lt;br /&gt;Not quite. A quicker keyboard stroke exists. Try doing this. Go to the column you are working on press Ctrl then the down Arrow key. Now you are in the last cell.&lt;br /&gt;&lt;br /&gt;What if you want to select all of the non-empty cells in the contiguous list? Simple. You only need to add one key to the previous two. Go to the first cell and press Ctrl, the Shift and the Arrow keys. That's it.&lt;br /&gt;&lt;br /&gt;The use of the Ctrl and Shift keys along with the navigation keys allows you to navigate around the worksheet quicker. The way to use them is listed below.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Ctrl+navigation key&lt;/span&gt; activates the last cell in a contiguous list for the direction specified.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Ctrl+Shift+nav key&lt;/span&gt; selects the cells from the original active cell to the last cell in a contiguous list for the direction specified.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Ctrl+Page up(down) key&lt;/span&gt; gets you to the next (previous) worksheet.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Ctrl+Shift+Page up(down) key&lt;/span&gt; allows you to select and group worksheets together.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Ctrl+End&lt;/span&gt; activates the last cell used in the worksheet.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Ctrl+ShiftEnd&lt;/span&gt; select the cells from the original activate cell to the last cell used in the worksheet.&lt;/li&gt;&lt;/ul&gt;Take time to use these keystrokes until they become intuitive. This is one Excel skill worth mastering.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7456102419060969949-4720188400898512079?l=www.technologyshift.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/u4yQj1UV-EJpteR8ItqhXM0Ur4k/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/u4yQj1UV-EJpteR8ItqhXM0Ur4k/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/u4yQj1UV-EJpteR8ItqhXM0Ur4k/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/u4yQj1UV-EJpteR8ItqhXM0Ur4k/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TechnologyShift?a=urFtBp3FPc4:vpUdJLOCwGA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TechnologyShift?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TechnologyShift/~4/urFtBp3FPc4" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7456102419060969949/posts/default/4720188400898512079?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7456102419060969949/posts/default/4720188400898512079?v=2" /><link rel="alternate" type="text/html" href="http://www.technologyshift.com/2008/05/quick-navigation-in-excel.html" title="Excel navigation made easy" /><author><name>nuts</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author></entry><entry gd:etag="W/&quot;A04NQns5eSp7ImA9WxNUFk8.&quot;"><id>tag:blogger.com,1999:blog-7456102419060969949.post-5766073473360760582</id><published>2008-04-12T15:23:00.000-07:00</published><updated>2009-11-07T13:39:53.521-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-07T13:39:53.521-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Excel tips" /><title>Easy access to referred ranges</title><content type="html">Using Excel can be cumbersome sometimes. As you gain more confidence, you introduce complexities within your formula and setup. To address this, Excel has many tools available for you and one of these is the Name definition facility .&lt;br /&gt;&lt;br /&gt;&lt;span id="fullpost"&gt;&lt;br /&gt;&lt;br /&gt;In Excel, you can define names that refers to frequently used Excel objects - from cells, ranges to complex formulas. This has many uses so it is worthwhile to discuss how to use it.&lt;br /&gt;&lt;br /&gt;Let us start with associating a static range to a name.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;First you need to highlight the range you want to use.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_6k53y8ID--A/SAvGbZ9dlUI/AAAAAAAAAE0/NEx471KqVfs/s1600-h/p1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_6k53y8ID--A/SAvGbZ9dlUI/AAAAAAAAAE0/NEx471KqVfs/s320/p1.jpg" alt="" id="BLOGGER_PHOTO_ID_5191461169602073922" border="0" /&gt;&lt;/a&gt;&lt;ul&gt;&lt;li&gt;Access the Name Definition facility by clicking &gt;&gt;&lt;span style="font-weight: bold;"&gt;Insert&lt;/span&gt;&gt;&gt;&lt;span style="font-weight: bold;"&gt;Name&lt;/span&gt;&gt;&gt;&lt;span style="font-weight: bold;"&gt;Define&lt;/span&gt;&gt;&gt; option in the menu.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_6k53y8ID--A/SAvSiJ9dlXI/AAAAAAAAAFM/ydtS8HzME1c/s1600-h/p2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_6k53y8ID--A/SAvSiJ9dlXI/AAAAAAAAAFM/ydtS8HzME1c/s320/p2.jpg" alt="" id="BLOGGER_PHOTO_ID_5191474479705724274" border="0" /&gt;&lt;/a&gt;&lt;ul&gt;&lt;li&gt;Then specify the name you have chosen in the Names in Workbook textbox (in this example it is lstName).&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_6k53y8ID--A/SAvIKp9dlWI/AAAAAAAAAFE/ybjnbhIWPvk/s1600-h/p3.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_6k53y8ID--A/SAvIKp9dlWI/AAAAAAAAAFE/ybjnbhIWPvk/s320/p3.jpg" alt="" id="BLOGGER_PHOTO_ID_5191463080862520674" border="0" /&gt;&lt;/a&gt;&lt;ul&gt;&lt;li&gt;Click the Add button to complete the process.&lt;/li&gt;&lt;/ul&gt;What you have created here is basically list associated to a name. If you want to refer to this range, you can easily do this by using the associated name.&lt;br /&gt;&lt;br /&gt;One advantage of this is that it simplifies updates . Say you refer to this range in many formula and you have to update it (maybe extend it to add new values), you need the range associated with name and the formula remains the same.&lt;br /&gt;&lt;br /&gt;There are other uses of names that are not included in today's  post. Maybe I can discuss them next time. Till then.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7456102419060969949-5766073473360760582?l=www.technologyshift.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/vc_UwQ5fHyQ2fs-VLr2oFTGyzUA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vc_UwQ5fHyQ2fs-VLr2oFTGyzUA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/vc_UwQ5fHyQ2fs-VLr2oFTGyzUA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vc_UwQ5fHyQ2fs-VLr2oFTGyzUA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TechnologyShift?a=y6Fp6_-SuBU:Sq88i85NR4s:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TechnologyShift?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TechnologyShift/~4/y6Fp6_-SuBU" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7456102419060969949/posts/default/5766073473360760582?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7456102419060969949/posts/default/5766073473360760582?v=2" /><link rel="alternate" type="text/html" href="http://www.technologyshift.com/2008/05/easy-access-to-referred-ranges.html" title="Easy access to referred ranges" /><author><name>nuts</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_6k53y8ID--A/SAvGbZ9dlUI/AAAAAAAAAE0/NEx471KqVfs/s72-c/p1.jpg" height="72" width="72" /></entry><entry gd:etag="W/&quot;CkcBQH88eip7ImA9WxNUFk4.&quot;"><id>tag:blogger.com,1999:blog-7456102419060969949.post-7178801923485599521</id><published>2008-03-11T15:51:00.000-07:00</published><updated>2009-11-07T13:40:51.172-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-07T13:40:51.172-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Mainframe tips" /><title>A different kind of match (process that is)</title><content type="html">Did you ever need to match data between two datasets in the mainframe? How were you able to do this in the past? Have you thought of finding the best way to do this?&lt;br /&gt;&lt;br /&gt;&lt;span id="fullpost"&gt;&lt;br /&gt;&lt;br /&gt;Matching and merging data is the one of the common tasks for data analysis that most legacy developers have a template Cobol program ready for this type of task. This is a common approach that I bet most developers out there have one tucked in, ready to be used when needed.&lt;br /&gt;&lt;br /&gt;I have no problem with a Cobol solution as it does the job. It is just that there are a lot of steps needed (tweaks on the keys, layout and the data to return, program compile) before I could use the program. For me it is too much especially if it is for a one off adhoc task.&lt;br /&gt;&lt;br /&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Is there a quicker way? &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Well, there is. In fact, there are many options you can choose from - EZtrieve, SAS or REXX to name a few. These tools provide a simpler approach but there is that provides the simplest solution and it involves a very unlikely tool.&lt;br /&gt;&lt;br /&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Trust SORT to sort it out.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Yes, you heard it. SORT utilities, &lt;a href="http://www.syncsort.com/"&gt;Syncsort&lt;/a&gt; in particular. The jobstep below is an example of how a typical match and merge SORT step will look like.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;//JSTEPA1 EXEC PGM=SORT,REGION=0M&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;//SYSOUT DD SYSOUT=*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;//SYSOUA DD SYSOUT=*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;//SYSDBOUT DD SYSOUT=*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;//SYSUDUMP DD SYSOUT=*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;//SORTWK01 DD UNIT=SYSDA,SPACE=(CYL,(10,05),RLSE)&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;//SORTWK02 DD UNIT=SYSDA,SPACE=(CYL,(10,05),RLSE)&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;//SORTWK03 DD UNIT=SYSDA,SPACE=(CYL,(10,05),RLSE)&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;//SORTJNF1 DD DISP=SHR,DSN=&lt;span style="FONT-STYLE: italic"&gt;match.file.one&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;//SORTJNF2 DD DISP=SHR,DSN=&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="FONT-STYLE: italic"&gt;match.file.two&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;//SORTOUT DD DSN=&lt;span style="FONT-STYLE: italic"&gt;merge.file.result&lt;/span&gt;,&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;// DISP=(NEW,CATLG,DELETE),DCB=(RECFM=FB,BLKSIZE=0),&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;// UNIT=SYSDA,SPACE=(CYL,(10,2),RLSE)&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;//SYSIN DD *&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;JOINKEYS FILE=F1,FIELDS=(23,9,A,33,4,A,37,2,A,39,2,A)&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;JOINKEYS FILE=F2,&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; FIELDS=(1,9,A,11,4,A,16,2,A,19,2,A)&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;REFORMAT FIELDS=(F1:1,68,F2:36,4,41,2,44,2,F1:77,271)&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;SORT FIELDS=COPY&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;END&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;This job has almost the same setup as any SORT step in a JCL. The differences are highlighted below.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Two input files. &lt;/span&gt;&lt;span style="font-size:+0;"&gt;Unlike your regular SORT step, this has two input files. &lt;/span&gt;&lt;span style="FONT-WEIGHT: bold"&gt;SORTJNF1&lt;/span&gt; and &lt;span style="FONT-WEIGHT: bold"&gt;SORTJNF2&lt;/span&gt; refers to the files to be matched. The output files remains the same.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="FONT-WEIGHT: bold"&gt;JOINKEYS FILE=F1,FIELDS/JOINKEYS FILE=F2,FIELDS&lt;/span&gt; refers to the keys to be used for matching. As shown, we can specify multiple keys and these keys don't even have to be on the same position. We just have to make sure that the corresponding key for F1 is of the same length as that in F2. The FIELDS parameter follow the following syntax &lt;/li&gt;&lt;/ul&gt;p,l,o where p is the position, l is the length and o is the sort order.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="FONT-WEIGHT: bold"&gt;REFORMAT FIELDS&lt;/span&gt; will contain the fields you need to return from both files. This will comprise the new merge record. The parameter after F1:/F2: refers the fields to be returned from the associated file.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;That's it. Five (four if you took out the END line) lines of code needed. No code compile needed. Do you know of a shorter way that what I shown?&lt;br /&gt;&lt;br /&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Note&lt;/span&gt;: The example shown is very simple. There are other parameters available to address many needs (filtering records to match, keeping unmatched record from files, etc) so it is worthwhile to explore this functionality.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7456102419060969949-7178801923485599521?l=www.technologyshift.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/RPy5rP1QDaDCGAXOvQxlscVhXGY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RPy5rP1QDaDCGAXOvQxlscVhXGY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/RPy5rP1QDaDCGAXOvQxlscVhXGY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RPy5rP1QDaDCGAXOvQxlscVhXGY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TechnologyShift?a=KDrsg17l81A:-d0pKL9iLjc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TechnologyShift?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TechnologyShift/~4/KDrsg17l81A" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7456102419060969949/posts/default/7178801923485599521?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7456102419060969949/posts/default/7178801923485599521?v=2" /><link rel="alternate" type="text/html" href="http://www.technologyshift.com/2008/05/different-kind-of-match-process-that-is.html" title="A different kind of match (process that is)" /><author><name>nuts</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author></entry><entry gd:etag="W/&quot;A04NQns5eSp7ImA9WxNUFk8.&quot;"><id>tag:blogger.com,1999:blog-7456102419060969949.post-6667816811488286471</id><published>2008-02-29T15:28:00.000-08:00</published><updated>2009-11-07T13:39:53.521-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-07T13:39:53.521-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Excel tips" /><title>Keeping unique records in Excel</title><content type="html">In data analysis, one of the most common task is the creations of summaries. To be able to do this, the first step you need to do would be to create a unique list of the field you need to summarized. There are many ways to do this and I am going to share with you the simplest one.&lt;br /&gt;&lt;br /&gt;&lt;span id="fullpost"&gt;&lt;br /&gt;&lt;br /&gt;1. Go to the column containing the data to be analyzed. &lt;strong&gt;Note:&lt;/strong&gt; the first top cell in the column will be treated as a header/label.&lt;br /&gt;&lt;br /&gt;2. From the menu, choose &lt;strong&gt;Data&lt;/strong&gt;, then &lt;strong&gt;Filter&lt;/strong&gt;, then &lt;strong&gt;Advanced Filter...&lt;/strong&gt;. You should see something similar to the screen below:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_6k53y8ID--A/RqjN1JAbKNI/AAAAAAAAAAk/cFcWNHoN8AU/s1600-h/AdvFilter.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_6k53y8ID--A/RqjN1JAbKNI/AAAAAAAAAAk/cFcWNHoN8AU/s320/AdvFilter.jpg" alt="" id="BLOGGER_PHOTO_ID_5091545691576805586" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;3. Once you clicked the Advanced Filter option, a pop up window will show you the Advance Filter options. Tick the &lt;strong&gt;Unique records&lt;/strong&gt;. To determine where the results will be saved, choose between &lt;strong&gt;Filter the list, in-place&lt;/strong&gt; (to keep the results in the same column) or &lt;strong&gt;Copy to another location&lt;/strong&gt;. I usually want my results in another column. If you are like me, you need to specify the target location. See example below which saves the results in column D.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_6k53y8ID--A/RqjOBZAbKOI/AAAAAAAAAAs/5sDVmVpGVSw/s1600-h/Unique.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_6k53y8ID--A/RqjOBZAbKOI/AAAAAAAAAAs/5sDVmVpGVSw/s320/Unique.jpg" alt="" id="BLOGGER_PHOTO_ID_5091545902030203106" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;4. Once you have selected your options, click OK. You should see the unique records after.&lt;br /&gt;&lt;br /&gt;That's all you need. It can't be any simpler than that.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7456102419060969949-6667816811488286471?l=www.technologyshift.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/RcFXr57tlvraUtq32HBtS9jKy9Y/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RcFXr57tlvraUtq32HBtS9jKy9Y/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/RcFXr57tlvraUtq32HBtS9jKy9Y/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RcFXr57tlvraUtq32HBtS9jKy9Y/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TechnologyShift?a=yi-bUpT4soU:XzSiVKHxEJY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TechnologyShift?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TechnologyShift/~4/yi-bUpT4soU" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7456102419060969949/posts/default/6667816811488286471?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7456102419060969949/posts/default/6667816811488286471?v=2" /><link rel="alternate" type="text/html" href="http://www.technologyshift.com/2008/02/keeping-unique-records-in-excel.html" title="Keeping unique records in Excel" /><author><name>nuts</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_6k53y8ID--A/RqjN1JAbKNI/AAAAAAAAAAk/cFcWNHoN8AU/s72-c/AdvFilter.jpg" height="72" width="72" /></entry></feed>

