Tax Savings for Software Companies in Texas

For the past 6 years, one of the major specialties of my company is writing software applications dealing with corporate taxation.  This has usually been internal, custom apps for a corporate tax department, but recently we have entered a partnership with a local accounting firm to do some web service-based applications.

The first of these applications is now available for beta testing, so now I’m reaching out to all Texas-based software development companies to help with testing out this application, as well as potentially save money on your taxes.  You may qualify!

Continue reading Tax Savings for Software Companies in Texas

Sqwitter – demonstrating a Seaside app

Squser>>allSqweets
“returns messages from self and friends”
| allsqweets |
allsqweets := SortedCollection sortBlock: [ :a :b | a timestamp < b timestamp ].
allsqweets addAll: self messages.
myFriends do: [ :each | allsqweets addAll: each messages ].
^ allsqweets

———————-

allSqweets  is a simple 4 line method, but delivers the core feature of Twitter: displaying a timeline of all a user’s  and his friends’ messages.  And thus started my exploration into Seaside, a Smalltalk framework for developing web applications.

I started playing around with Seaside last year, but time constraints prevented me from getting too far.  But, I’m at it again.  This latest burst of energy was in part generated by the “fail whale” of Twitter.  Prompted by friends, I started using Twitter a lot from the early part of this year.  Pretty cool, simple application, yet, why does it keep crashing?  Hey, though, it’s got a million users, so give it a break.

A more perplexing problem, to me at least, was the linking of replies.  Or the lack of said linking.  I click “reply” to someone’s twitter, post my reply.  There’s even a link on my posting “in reply to …”.  Click on it, and more times than not, it would link back to some other message, not the message I was replying to.  What’s up with that?  It got me thinking: conceptually, Twitter is a really simple application: what would it look like in Smalltalk?  Not trying to solve performance problems or scalability or anything real like that, but simply as a pure object exercise, just what would Twitter look like in Smalltalk?

I’ve been looking around for other web frameworks to develop in.  That’s why I’ve given Seaside a serious look.  On the prompting of other friends, I recently gave Ruby on Rails a look, and earlier had glanced over at Django.  Both, surprisingly, kind of gave me the shudders: pop in some code for your initial objects, and they auto-generate lots of code for you.  All code broken down into a clean separation of concerns: model files here (class definitions), view files there (web templates), controllers over there.  Nice, but now I’ve got lot’s of files, and I’ve got to navigate my way around to figure out what to modify where.  I’m sure once you get used to it, it’s easy to remember what directory has what files, but I’m impatient you see, and don’t have much spare time (see above).

All these files reminded me of my C development days, with scores of header files (.h), code files (.c), and my own make files, etc.  I’m not knocking these frameworks on the Ruby or Python languages – long ago, I learned that language wars are useless.  But, maybe it’s just my aesthetic:  I’ve always found Smalltalk super clean and easy to read and navigate, and it remains my fastest development language.  So, yeah, maybe Ruby and Python are “Rapid-Enough” Application Development environments, compared to, say Java or Visual Basic, but I yearn for truly Rapid Application Development again.

Then came Barcamp Houston.  Kind of creeped up on me.  It wasn’t til the morning of the conference when I suddenly got inspired:  I should present something here!  But, a late start to the day, and an already depleted laptop battery proved challenges for preparing any kind of presentation, much less something that wouldn’t embarress me.  I would need to spend a little time relearning the Seaside environment (which has undergone a few point releases since last year), and thinking through an application.

Then my thoughts went back to the Twitter applicaiton.  Wouldn’t that be a simple application to demonstrate within Seaside?  And sure enough, it was been: in fact, too simple to demonstrate some of Seaside’s more powerful features (like tasks and workflow – the real meat of “continuations”).  Nevertheless, a good test case to begin.

So, I still don’t have much time in my busy schedule, what with my own projects, my business, family, assisting in the launching of my wife’s new restaurant, etc., but I have been able to squeeze in a few hours here and there to develop Sqwitter, an implementation of Twitter in Squeak and Seaside.  The next several blog postings will walk through my development of Sqwitter, and should serve as a useful tutorial for Seaside (there are already some excellent tutorials on the web, and a book too).  When I finish the code, I’ll also roll the application out to a demonstration website for readers to play.

Next: Sqwitter objects and Seaside components.

How to Cpk the SQL Way

As mentioned earlier, I’ve been involved in client’s Production Reporting application project, when the subject of Cpk came up.  After a lot of inconsistent references to the statistic and lot’s of code that approximated but didn’t exactly calculate it, I finally discovered the proper formula for  Cpk.  Here it is:
Cpk  =   min (  USL - μ / 3 * \hat{\sigma}, μ - LSL / 3 * \hat{\sigma})

Where USL is the Upper Specification Limit, LSL is the Lower Specification Limit,  μ is the arithmetic mean of the results and \hat{\sigma}, sigma hat, is the estimated standard deviation (sigma hat is going to turn out to be the kicker in this equation).

Let’s say you have a product you have to make that must be within some specifications: like, the length of a sub sandwich.  It should always be 12″ long, but it’s acceptable if the final sandwich comes out between 11″ (LSL) and 13″ (USL).  Cpk is the minimum of either the average deviation from the upper limit divided by 3 times the estimated standard deviation, or the average deviation from the lower limit divided by 3 times the standard deviation.

All this would be easy to calculate using SQL if just plain ole standard deviation were involved.  However, using standard deviation instead of estimated standard deviation (sigma vs. sigma hat), and you have the equation for Ppk, a  different statistic.   Always one to be lazy, I ask our client: “would it be okay to report just the Ppk statistic?”  Of course, the answer was no! Continue reading How to Cpk the SQL Way

Computing Cpk statistics using SQL

Part 1 – Introduction

For the past several years I have performed a myriad of projects for this favorite chemicals company client of mine.  Recently, I was called in to help design and develop a Production Reporting application for them, to meet new requirements from their new, German-based, owners.  The application reports on things like how much product is produced, what was consumed to produce it, production yields, etc.  Several factories are involved, so we’re tieing all the data into one database.

The first challenge involved converting all the English-based measurements into metric.  Yes, I did say it was one of those metric-loving European countries, right?  So, we’ve been going over different conversion equations – some of them are interesting, because they’ve involved variable factors like the energy content of natural gas and the specific gravity of  oil.

Still, though, a piece of cake – just linear equations to convert from one unit of measure to another.  Had more problems with the quality of data (often missing from several plants) than the equations themselves. So, we’re progressing fine on the application; then, one day I’m in a meeting with all the plant managers, and they start talking about CPK statistics. They talked like of course everyone knows what this statistic is.  I’m sitting there, though, going “huh?”  I have a computer science undergraduate degree, with oodles of calculus, differential equations and statistics, and a economics graduate degree with its own heavy mathematical load in correlation analysis and statistics.  Yet, I’ve never heard of Cpk (properly, that’s how the statisticians spell it, C sub pk.  I still don’t know what the initials mean).

Continue reading Computing Cpk statistics using SQL

Bridges and Phones – Social Media Economics

In microeconomics, economists like to talk about substitution goods and complementary goods. A classic complementary good to peanut butter is jelly: both are usually consumed together in that delectable sandwich known as PB & J. Economists care about this, because when consumption goes up in peanut butter, you’ll likely see an increase in jelly too, if the goods are tightly complementary. Price changes in one will likely lead to price changes in the other.

A substitute good, well that’s kind of obvious, it’s a good that can easily substitute for another. Soy drink is a substitute for milk – at least, if you’re in my household. Natural gas is a substitute for electricity, when heating your house. If the substitute is easy to switch, a price increase in one will lead to increased demand in another – a nice, easy economics predictive tool. Continue reading Bridges and Phones – Social Media Economics

First thoughts on presentation at HTC

This Wednesday I did a short presentation at the Houston Technology Center’s “Starting a Web-Based Business” lunch series.  My presentation was on “Open Source Tools for Software Development”, and I highlighted several tools that my development team uses regularly.

I’ll post that presentation shortly, but here I just wanted to jot down a few notes from reactions to the presentation – feedback I got after the talk.

  •  One manager, owner of a well-established software firm here in Houston, liked the idea of wikis for organizing his team; but he’s still looking for a better project management tool, something “larger” than Poi, the issue-tracker I demonstrated.  Something that could track milestones, and keep the team on track.

    Yes, I’d like to see better tools for PM too.  Traditionally, we’ve used MS Project.  Problem is, it’s not easy to share – at Interliant, we tried the Lotus Notes-based Project Gateway, but ultimately found it awkward to use.  Basecamp, an online service, looks attractive – not sure yet how well it scales, and compels your team to use it.

    One thing we do, though, when a project gets hot and heavy, is that we fix the milestone dates at regular intervals: once a week or once every two weeks there’s going to be a build.  That stays fixed; what adjusts, though, are which features that make it into the build.  Our only rule is that the feature must be a tangible end-user benefit – we can’t “deliver” just background architecture or design in the next release, and expect that to be considered progress by our client.  Managing at this point becomes simpler, as the project schedule just shows a set of period milestones; ts in the status meetings we discuss which features will make it into the next build – the customer, of course, sets priorities, and there’s some give-and-take on features that may slip because of their complexity, or unexpected problems.

    Still need a tool, though, to capture and display these milestones and feature deliverables!  Must search more …

  • One manager of IT at the Houston Chronicle mentioned they use Capistrano for deployment, instead of Ant.  It’s Ruby-based, but you can use it for automating all sorts of things.  It looks very promising, so I’ll have to check it out.  Ant is cool, is built into Eclipse, and does the job, but it’s XML.  Rather a yicky way to write out deployment scripts!
  • Another fellow approached me after the talk and said his friend is involved in a large-scale application that uses, of all things, Smalltalk!  It does heuristics, and I think it was oil field-related.  I’m hoping I’ll get to meet this guy, and learn more.  I still love Smalltalk … just can’t find any projects where it’s a winner here in town  🙁

Thoughts on GSM

My thoughts on the first Got Social Media Conference:

Erica O’Grady and Kelsey Rutger put on an excellent conference yesterday at the Houston Technology Center. Got Social Media was an advanced introduction to social media today. Many thoughtful presentations. Here’s a few insightful remarks I took away from the conference:

  • “Markets As Conversation” – yes, something I’ve always advocated, and is a sub-text of the “Austrian School” approach to economics. Sorely lacking, though, in mainstream economics.
  • “Customers like having a voice”. Echos of above
  • non-profits online (in social media space) are spending a lot of time saying “thank you”. This is a nice lesson that I think the non-profits I work with will love to emphasize.
  • “Women are motivated by respect, being listened to” – Laura Mayes. Yes, there are gender differences in markets, and marketing. I’ve often stated that shopping is the ultimate expression of capitalism, and women are, stereotypically, the ultimate shoppers … so, by extension, women are the ultimate capitalists! Recognizing this, I think we will see, in the long run, a “softening” of markets and businesses – there will be more listening, more give-and-take … and hopefully less exploitation, fraud, and con games in the marketplace. But, that takes me to: Continue reading Thoughts on GSM

iPhone 1.1.3 upgrade is awesome

Just downloaded the latest upgrade to the iPhone.  While the 1.1.2 upgrade was just some patch fixes, this newest upgrade is really a fantastic enhancement to the iPhone.  Stunning even.  Just one feature to mention: location finding!  Using cell tower triangulation, the iPhone can plot your current location on a map.  Very, very cool.  Click the location button on the Google map, and after a bit of a pause, to do some calculations, the map will zoom into your location, with a circle drawn around the most probable location.

The circle will be bigger or smaller, depending on how accurate the data it’s using.  Sometimes, it hits me dead on to my current location; at other times (like, when I drove along Westheimer, within the loop), it was a bit off, drawing a circle about a mile wide.  In any case, a very, very helpful tool – I guess I won’t be needing a GPS device anytime soon!

Map pinning is a nice new feature too, as is the ability to customize the home screen.  Now I can put my favorite web pages (like the Houston Transtar real-time traffic map) directly on the home screen as an icon, avoiding a few extra clicks – first click Safari, then click bookmarks, then click the Transtar link.  Very convenient.  More apps to come soon, I’m sure, so that’s why they’re making room on the home page.

Stunning.  Now, if I could only think of a cool corporate tax application to write for the iPhone.  Hmmm??!!

StashCast

Well, no wonder my friend Luigi Bai has been so circumspect about his software development activities — his company has been in stealth mode! But now they’re out and about, and visible too. StashCast Media has just launched their website, and they’re promising to be a great new entry in the social media space.

Congratulations, Luigi, on your new venture, and best of luck to you!!

Personality

There was an old tradition in the computer world – especiallly in the Unix culture – of giving computers “colorful” named, grouped in some constellation of words, such as, oh, constellations, colors, cartoon characters, beers, and so on.This tradition has been supplanted, sadly, in much of corporate IT – coming from a PC culture. – of “embedded data” names or sequential numbers. You get computer names like HOUSQL001 – note the numeric range being reserved here, because you “might” get 998 other computers with the same location and function. Or, you get a simple US1421, a random number drawn out of a hat.This is boring. And wrong too. What happens if your computer changes location? Or function? Or takes on an additional function, like Mail? I have run in to IT managers that say “we just rename the machine”. Yikes!This is wrong, because computers have personality. Colorful .names are easier to remember and associate. I can always remember that Polaris is in our. Boston data center, and is our chief guidance center sits it runs DNS. I can never remember if US1187 is in Denver or Miami, nor what how it differs from US1178. This truly is a safety issue, if obe of them is a test machine and can be rebooted at will, while the other runs a life support system (and yes, I have logged in to the wrong customer’s machines before, about to issue a destructive command!) Continue reading Personality