Thursday, August 02, 2018

Unsubscribe Monday

Do you know what Cyber Monday is great for? Unsubscribing from all those spam or semi-spam emails you're getting.



Thursday, September 24, 2015

Screen Data Loading in Progress

Any Progress Programmer who has worked with the QAD ERP package is familiar with the "CIM format" of loading screens from specially formatted data files. I placed the phrase in quotes because although QAD can lay claim to the format they call CIM (originally an abbreviation for Computer Integrated Manufacturing) by enhancing this format to include deletion and enabling a batch mode system based on it, the format itself is native to standard Progress ABL functionality.

Many Progress Programmers who do not have familiarity with QAD do not know about this format for data loading. It's not like this format is necessary to load data into the database. It is sort of a strange format, and using it with a standard screen is a lot less straightforward than writing

create credit.
import delimiter "," account_code effect_date cr_amount.

which could load a table from a CSV file in short order. But the nice thing about using CIM format, or as I like to call it, Screen Data Loading format, is that
  1. you can very closely mimic the actions of someone entering or updating data via a Progress input screen,
  2. that way all input screen code can be reused and also 
  3. all referential integrity is maintained and
  4. the formatting is very similar to standard, delimited formats and just as readable.

To illustrate what I mean and how CIM format works, imagine you have a Progress program named mainmenu.p which is the main screen for an accounting system. This program brings up a credit input screen when you choose the code "CRINP". The input screen contains three fields and runs in a repeating block until END-ERROR is encountered (F4 in Unix, ESC in Windows). At this point a field labeled "Commit?" comes up and if the user types a "Y" then the program commits all the entered data into the credit database table and returns to the calling program.



Here's what a program would look like to use the Screen Data Loading format available in Progress for that screen:

/* Screen Data Loading (SDL) sample code */
input from sdl-credit.txt.
output to sdl-credit.log append.
run mainmenu.p.
output close.
input close.

The contents of a typical sdl-credit.txt would look like the following.

"CRINP"
"2500" 05/25/14 1433.70
"5004" 05/26/14 500.00
- 05/24/14 100.00
"2500" 05/29/14 50.34
.
"Y"
.

Here's what happens upon executing of the Screen Data Loading code:
  • CRINP would trigger the credit entry screen.
  • In the next 4 lines, the first field would go into account code, the second into date and the third into amount.
  • The single unquoted hyphen in the third input line cause the first field to be skipped over. This is especially useful to bypass unnecessary fields or to accept defaults in an input program.
  • The single period on a line designated and END-ERROR condition which brings up the "Commit?" question.
  • The "Y" commits the data and control is returned to mainmenu.p at which point the second period causes that program to exit.
  • All output is appended to the specified output log file. This file can get rather long since each input field causes the screen to be rewritten in its entirety, but it is good for trapping errors.
As I explained earlier, QAD deserves a lot of credit for utilizing this format in their own batch loading system, popularizing it, adding a method for deletion functionality and extensive error trapping and reporting. But I was gratified to learn that this method works on any system designed using Progress ABL. I used it for one client who owned a home-grown system without user-friendly input screens. Using the Screen Data Loading method I've outlined here, I was able to instruct users to fill out spreadsheets which then I transformed into the proper format and loaded into the system.

Once a programmer becomes familiar with the format, the part of the development which requires the most intense work is what I call the pre-validation of the data. For ongoing processes, I always make sure each of the fields being loaded will not flag an error ahead of time. For one-time data loads, I usually just "let 'er rip" and check out the error file after the fact. Of course one always needs to watch out for data values going into the wrong fields. But this danger exists in coding for more standard formats, so it is not a pitfall unique to this particular format.

Contact me for all your Progress/QAD Development requirements.

Email: paul.fry@flexresourcing.com
Phone: 216-496-9915

Tuesday, April 19, 2011

Streamserve: Utilizing Its Strengths

One of my favorite things about being a Streamserve Consultant is sometimes I get to do short, high-value projects. Most often, these mini-projects—which take less than a day to complete—involve implementing a formatting remedy for the sloppiness of the earlier design work. So aside from being able to fix these issues from the comfort of my office chair, the greatest aspect is the high customer satisfaction achieved.

The one I just finished is a prime example. Using a function in the PageOut, I concatenated multiple lines pulled from a StreamIN input which comprised the Terms and Conditions text. Then when it is output in an field configured as "Auto-wrap", it looks like someone typed it in using Microsoft Word rather than piped it in from a legacy ERP. That was how it looked before because basically the implementer pulled it in a pushed it out "as-is". Here's the short StreamServe scripting statement I used to make it look professional:
$t_and_c_fmt = subStrRepl($t_and_c, HexStr("<0A>"), " ");

I set the variable $t_and_c_fmt up and suppressed the output of the one which had been pulled in ($t_and_c). The subStrRepl function substitutes a space for newline characters. And that is pretty much all it takes, other than resizing the box correctly which was another part of the request.

In the midst of this project, I was asked a common question by the client. "Should we change the formatting of the text as we are sending it?" My answer was emphatically negative. Always use StreamServe for what it does best! You paid for it, and chances are that at least one person in upper management groaned at the price tag. Must people don't use StreamServe for even one fourth of what it is capable of doing. A good example of that will probably be my next project which involves Streamserve SMS implementation. You did know Streamserve did text messages, didn't you?

Contact us for all your StreamServe Consulting needs.
Email: paul.fry@flexresourcing.com
Phone: 216-496-9915

Monday, February 07, 2011

Point of Sale Systems Integration

I've often wanted to do systems integration work on Point of Sale (POS) systems and I've finally been given a chance on a short term project. A common POS system used by a bistro chain needs to be wired for a third-party program and, since the system is Progress-based, I was chosen to do the work.

So far there have been a number of challenges appear, but nothing entirely prohibitive. The POS uses Progress's cheapest product available, Personal Database, which is the bare-bones Progress run-time engine. This product alone doesn't allow compilation of normal Progress 4GL code, a development license is required to do that. I don't have a version 9 license, but fortunately there is a "trick" which I'll explain.

You can use a Run-time version of the prowin32.exe executable to compile code encrypted using Progress's source encryption program. This program is not probably not going to be included in a Progress Personal Database install, so you are going to have to find it somewhere else. I have it as a holder of a Progress OpenEdge OE Studio 10.0A license, so that's how I get stuff to compile. The logic hasn't changed between versions 9 and 10 and has never been altered since its inception as far as I know.

This is 100% legal in terms of Progress licensing and has been used as a backdoor for developers since I learned it back in 1994 using Progress RDBMS Version 6. It even works across platforms, and a file encrypted on a Windows PC will compile on an AIX, Linux or other Unix system with a run-time version of the Progress executable (_progres). Just remember that wherever you encrypt your code, the ensuing file is binary so you don't want to use ASCII mode when transferring it using FTP. That's usually trouble-shooting tip #1 in my experience when the code won't compile.

If you would like to know more about how to accomplish POS system integration with Progress when source is not available, please contact us for a quote. We can handle all your Progress DBA and Progress Programming needs.
Email: paul.fry@flexresourcing.com
Phone: 216-496-9915

Monday, January 17, 2011

Some thoughts on Local Splash

If you are dying to know what Local Splash is all about, start a company and create a website for it. They will have one of their telemarketers call you within hours. They have called me about 5 times in the last month peddling a subscription SEO service which is pricier than most, and most likely no better than the garden variety one-time optimizers with much humbler operations.

Most of the calls I received from their Orange County HQ number, 949-436-7240, went dead when I answered, obviously owing to an efficient predictive dialer. This is somewhat annoying to most people, and was even more annoying to me after I heard their pitch--I'll explain why further on. I did pick up two of the calls before the robot shunned me for the next company in line, and that was good since it gave me a chance to get a feel for the face of the company and their strategy.

Both agents began their spiel with flattery which, though judging by their success must work on the newbies, the web-initiated will recognize immediately as nonsensical. The first agent, an older-sounding gentleman, informed me that when he "googled" my company that it came up on the second page. He congratulated me for this amazing feat. I asked him what search terms he used and he told me "I said I googled your company, sir." Uhhh... no, actually if you search for Flexible Resourcing it comes up as the first entry just like if you "google" a much bigger company like United Airlines. But that is not the point of SEO, is it? The man should be trying to sell me the trick of having my company at the top of the list for cleveland ohio computer services just like United comes up on the first page for "airlines". But as I started to ask him about what search terms he would suggest he was already trying to get me to commit with a credit card number. The call ended soon afterward.

This morning I received another call from a younger denizen of the call-center. He had a much groovier style and after announcing that he was from Local Splash, a Google Partner, he immediately confessed that the reason for his call was that my company was one of the "more relevant companies out there." Relevant to what? Please. I was born at night, but I wasn't born last night.

This second call ended even more abruptly, and one of the reasons is that I was eager to put up this post. Both callers claimed to have checked out my website, but how could they have had the time? A predictive dialer connects an agent to a cold prospect within a matter of seconds, and although it's possible that they know I have a website, the detailed knowledge of its contents insinuated by the telemarketer seems to me to be feigned. So now if I do receive another call from one of them who claims to have visited, I'll ask them what they think of my post about their company's marketing strategy.

If you want to know more about Local Splash, just google them. Their website comes up on the first page!

Or, if you are less than amused by Local Splash's marketing tactics, you can report them to Google here to attempt to get their partnership revoked.

UPDATE: After receiving 3 or 4 more robocalls, I finally called the corporate office and talked to someone who doesn't have a call quota. He explained that I should never have been contacted in this manner and promised to have my name removed from the cold-call predictive dialing machine. I told him that it might be a good idea to have the marketers use a different name than Local Splash to avoid stains on the company's reputation. He agreed and even said that he had suggested that to upper management in the past. It was an interesting conversation, and I have stopped getting the calls.

Tuesday, May 25, 2010

Take a stroll down memory lane

Found this slideshow to be sort of amusing, and it sports a hilarious title: "How Microsoft Windows 3.0 Dragged the IBM PC into the Graphics Age." Maybe "dragged and dropped" would be a more apropos characterization to borrow from the GUI nomenclature. Here's the intro:

Microsoft introduced Windows 3.0 on May 22, 1990. This is the desktop operating systems that finally succeeding in bringing the IBM standard PC world into age of the graphical user interface. Before this time, most people using IBM standard PCs ran Microsoft's MS-DOS or the nearly identical IBM-branded PC-DOS operating system that limited users to running what today could only be considered a primitive command-line interface to enter program instructions. There was no reason to use a mouse with an IBM PC, because PC applications were simply masses of text displayed on green or amber screens. There were two earlier versions of Windows, but they were not widely adopted. Most people who wanted to work with a true graphical interface bought the Apple Macintosh. And it was mainly the Macintosh and the manifest advantages of a GUI that drove Microsoft to develop Windows. The release of Windows 3.0 was essentially the culmination of more than six years of Microsoft research and development to bring a Mac-like graphical interface to PCs. It's been a graphical world ever since and most people born less than 20 years ago probably haven't a clue what it would be like to control a computer without a GUI. This eWEEK slide show illustrates what the advent of windows 3.0 meant to the personal computing world.

I remember that my assignment at the time was still working as a Progress 4GL/SYMIX developer mostly with client UNIX character systems. A number of my colleagues were still using dumb terminals instead of telnet clients and protesting "Why do you need a PC?" Then I showed them how to cut and paste text commands and entire files between telnet sessions with Windows 3.0 and a mouse, saving a significant amount of time and keystrokes. It had never occurred to them that a Graphical User Interface like Windows 3.0 could be a transparent interface protocol between two entirely different remote hosts. They were used to thinking in terms of UUCP logins as the only mode of transferring files, or sometimes you got lucky and the client had enabled an FTP port.

Of course now it doesn't occur to the kiddies not to use cut and paste at will, so we have to remind them that plagiarism is still unethical.

Wednesday, October 14, 2009

Value Added Tax for the United States?

The possibility of the United States adopting a Value Added Tax is in the news as of late. Here's something from Reuters. Excerpt:

Hank Gutman, KPMG tax principal, director of the Tax Governance Institute, and former chief of staff of the U.S. Congressional Joint Committee on Taxation,will serve as moderator of the panel discussion.

"The realities of the U.S. fiscal situation—including an estimated $1.4 trillion deficit for Fiscal Year 09, projected deficits in excess of 5 percent of Gross Domestic Product and rising demands from entitlement programs—are leading tax policy makers to consider additional revenue sources," said Gutman. "A value-added tax, which taxes the transfer of goods and services, will clearly be on the table as a topic of increasing discussion," he added, pointing out that VAT is one of the world's most popular taxes and is in use in more than 130 countries.

Of course, my focus on the VAT has to do with selling consulting services. Obviously I haven't had to collect sales tax on my services since they are not taxable. I'm not sure this is the case with a value-added tax. Because I'm incorporated and have my corporation pay me for services, won't I have to pay VAT on the difference between my W2 compensation and what I bill per hour? In which case it would seem like increasing my W2 wages would be a good idea to avoid a large VAT. But that would naturally raise income taxes.

So I guess I'll go back to the old standby of raising my rates in case of a VAT. That ought to work. I guess that guy was right about death and taxes. Can't avoid either.


Here's an interesting paragraph from the somewhat shoddy yet nevertheless very informative VAT page on Wikipedia.

Revenues from a value added tax are frequently lower than expected because they are difficult and costly to administer and collect. In many countries, however, where collection of personal income taxes and corporate profit taxes has been historically weak, VAT collection has been more successful than other types of taxes. VAT has become more important in many jurisdictions as tariff levels have fallen worldwide due to trade liberalization, as VAT has essentially replaced lost tariff revenues. Whether the costs and distortions of value added taxes are lower than the economic inefficiencies and enforcement issues (e.g. smuggling) from high import tariffs is debated, but theory suggests value added taxes are far more efficient.

The page also discusses how massive accounting efforts are expended on enforcing a value-added tax, so net revenues from VATs are often lower than projected. Big surprise there. Also the regressive nature of the VAT is criticized, but it notes that the burden of any tax is shouldered most by the consumer except for a progressive income tax.

Wednesday, February 04, 2009

Third party deals are a mixed bag

I'm working through a consulting company right now and it has been a great experience so far. The staff is professional, they don't micromanage and they can deal with my rates, about which they never complain.

I received a call the other day from another consulting company and if my initial read is correct, dealing with them would be lousy. The account manager called me and talked to me for 20 minutes straight about how tough the sell was going to be to the particular customer. The entire conversation on his part was obliquely related to the expectation of hourly rates and how mine were higher than what they were hoping for.

My reaction to this is always the same: "OK. So?" In other words, what's the problem? If the number is too high, find somebody else. Well there's the problem. It's hard to find an independent consultant specializing in this particular niche technology. You can always call the software company who owns the technology we're talking about—they have consultants, too. Here's the catch: they want to score over 200% of my rate for their consultants.

So it's all relative to the market just like every service for sale. Here's the bottom line question for third parties: are they willing to tell the end client the "bad news"? Because I never hesitate.

Wednesday, March 07, 2007

Telecommuting Sensibilities

As the need for Progress and QAD professionals heats up – and it is heating up – contractors are once again trying to sell their services remotely, i.e., the "telecommuting" option. There are many facets to landing a telecommuting gig, and the biggest two are value and trust. Following is my advice to contractors in marketing their remote services based on my understanding of these two critical issues.

Many contractors are extremely poor sales people to begin with and their attempts to snag remote work are nothing short of laughable. One guy's pitch to me was that a stipulation of his joint custody agreement was that he remain within a certain geographic area. That alone does not merit throwing his résumé into the "when hell freezes over" pile, but it does earn a trip into my "don't call us, we'll call you" stack, maybe not at the bottom, but certainly not the top. It's simply too difficult to remarket skills when they are attended by certain kinds of baggage.

I usually try to explain to remote contractor hopefuls that trust is a big issue and that anything that might call said trust into question is a deal killer. It's different if you've already worked for the firm to whom you are marketing your remote services. But even then, there remains the expected and actual level of service and availability which is lower with a telecommuting professional by nature. This affects perceived value for the good reason that, for most consultants, working remotely usually impacts actual value. Even assuming absolute conscientiousness on the part of the consultant, usually he/she cannot react just as quickly to user demands nor contribute as effectively in meetings and conversations outside a facility. Simply put, there is a certain "X factor" missing where X can be loosely defined as "being there." This is true even if the firm is utilizing state of the art online meeting technology and the managers aren't shy about calling teleconferences and video conferences and the consultant is and extremely good communicator.

To make up for what is lacking in a telecommuter's virtual presence as opposed to his/her actual presence I've only heard one good recommendation. It came by way of a contractor and it is simply that he would be willing to accept a 25-35% rate discount for doing remote work. I didn't have an opportunity to place the consultant with the client, unfortunately, but I did notice that the proposal has a double-effect. First, his lower amount became competitive even with off-shore rates which gets the attention of the hiring firm very quickly. Offer someone an off-shore rate deal with no cultural or language barriers and you might be accused of selling a pipe-dream to an IT manager.

Secondly, it tacitly acknowledges the value/availability discrepancy and shows the willingness to adjust the rate accordingly. After all, the decrease in drive time, mileage and travel costs are lower for the contractor, sometimes markedly so.

The dramatic "off-shore" comparison will not always be there; the rate still may be higher than the client firm wants to pay, for senior consultants especially, and the price difference may have little effect in those cases. But regardless, when contractors learn to implicitly say "I want to add value to your IT department" rather than "I want to charge a market (read: high) rate" they will have more success at landing a remote gig.

Wednesday, August 16, 2006

What should candidates expect from recruiters?

Simply seen, recruiters often appear to be like the "village match-maker", trying to pair up a candidate seeking a job with a firm looking for the job-seeker's talent. So who do recruiters work for? If they are being honest they'll admit that they are working for the hiring firm, not the candidate. After all, who's signing the check?

Having said that, recruiters are only paid for brokering deals mutually acceptable to both parties. Because this is the case, a recruiter's motivation can become the occasion for good fortune among the candidates he represents. Recruiters can do wonders to expedite and streamline the interviewing process and can be better at holding the hiring firm to the best compensation; an individual interviewing himself/herself often has an "I better take what they offer me" attitude.

The way this works best is if the recruiter works with the candidate as a coach rather than a mere broker. A recruiter who sees his business as primarily a brokerage often won't even tell a candidate when the client is no longer considering him/her for the position. As one of my candidates told me "Usually the phone just goes dead," and at that point he assumed he was no longer in the running. An even more common concern is when a so-called recruiter just takes a whole stack of resumes, sometimes ten or twenty, and just throws them all at the hiring firm. Then the HR person or department head has to spend a week going through each resume until information overload sets in. Or, more likely, he stares at the scary pile for several seconds and decides to leave work early that day.

The coach model is more successful for everyone involved. When the recruiter acts as a coach, he looks at the candidate in his/her entirety as a person and decides if they are a good fit for a position. He will ask questions to learn as much as he can about the candidate's professional skills and experience: how much have you used this skill? when is the last time you worked on this system? The recruiter will also ask about certain pertinent aspects of his/her personal life: how much traveling are you willing to do? are you willing to relocate? does this position fit your career path? etc. If they are not a good fit, the recruiter will tell him or her up-front rather than just trying the spaghetti method -- "throw 'em up and see if they stick." If the candidate is viably skilled, his or her contact information will be kept on file.

In my experience, not only is this method of recruiting necessary for basic human decency (we shouldn't treat persons as object to be sold, like crates of turnips), but aids in long-term business success. Around 75% of my placements have been on "second attempts"; when presented with a position to be filled I remembered someone who had the credentials needed to do the job. If I hadn't had real conversations about skills, experience and career issues with the candidate, I probably wouldn't have even recalled the candidate's existence.

I hope to post more about these philosophical questions about the recruiting practice in the future. Stay tuned. And feel free to comment.

Saturday, July 01, 2006

Full-time Recruiting Services

I have been working with a number of firms recently to help them achieve their staffing goals. Some of these firms are local to Northeast Ohio, but others are located in other parts of the country.

I've enjoyed the full-time recruiting work I've been doing the most because it has given me a chance to work with and present some of the most qualified and experienced IT professionals out there. Guiding them through the process either locally or remotely has been very fulfilling.

Please contact me if you have an interest in our high quality staffing services. Use the email link on the side-bar.

Friday, May 12, 2006

New Website

Welcome to my new website for Flexible Resourcing. I've decided to totally change it to be in "blog format." Why did I do this? Several reasons:

  1. I run several blogs already. I'm familiar with the format and I like it. I figured "Why fight it?"
  2. This way I'll be able to update my site more frequently and it should be quite a bit fresher and more interesting now.
  3. The consulting work performed by our firm is better presented in this format. This is because our concentration is always changing.

So no more boring, "static" content. And look for cool links in the margin blog-rolls.