Monday, December 29, 2008

CodeCast - Late Night Show for DotNet Developers

Congrats to Markus and Ken on starting CodeCast podcast. Not sure how well it's going to be considered a "late night show" - I've only ever listened to it during the day but it is good to hear short tidbits from all. Ken spoke about CodeCast back at SWFox.

A treat from their Dec 10th episode - Pex - a tool to automatically create unit tests. From the MS research site: Pex (Program EXploration) is a white-box test generation tool. Given a hand-written parameterized unit test, Pex analyzes the code to determine relevant test inputs fully automatically. The result is a traditional unit test suite with high code coverage. In addition, Pex suggests to the programmer how to fix bugs.

Hmmm...this might be a useful VFPX project in conjunction with FoxUnit.

I especially love how they start and mix each episode with a little "I'm listening to CodeCast" - reminded me of the old FoxShow intros (before my HD died).

Wednesday, December 10, 2008

Usability: Learning New Environments

I realized how quiet I've been here and while I have a number of posts waiting in draft, I've been so busy it's been impossible to complete them. But I did want to post this after I dealt with it yesterday.

I've been on an ASP.Net contract now for about 3 months which is an experience all unto itself - non MVC, non standard ASP.Net app using the DevExpress components. Since this is someone else's application "framework" and I'm simply a hired hand to help finish it off, I find I'm using parts of Visual Studio that I've never really thought of and/or used that often.

I'm not referring to actual development pieces like Datasets or class designers but the more basic elements of any IDE. It drives me nuts when things don't use the same short-cut keys that I'm used to, and while we can always change them to suit our moods, that's not the way I usually like to go. We live in a Windows world and so are used to certain things: F1= Help, Ctrl+C Copy, Ctrl+V = Paste (?!?!), Ctrl+F = Find, etc.

In Visual Studio, I've had several "where is that command" moments and come back going "why did they put that there?" I'm sure there's a good reason that the option to comment code is hidden 2 levels in the Edit menu (under Advanced) but I can't think of one, especially when an option like Create Guid is right on the Tools menu.

Does anyone create Guids more often than block comment?

My "duh" moment yesterday came when I was looking to find all references to a particular variable so I could figure out where a particular value was being set. I hit Ctrl+F and go to the QuickFind.

quickfind

Rather than cycle through it all, there must be an easier way - (something like Code references in VFP) - I choose Find Options - nothing there. I must be getting lazy because I immediately twittered it right before I found it under Find In Files.

Is that option really hidden away? Not quite, you can access it from the QuickFind drop-menu or by hitting Ctrl+Shift+F but it wasn't in my face right there.

But maybe more to the point, applications always seem to find ways of putting in more options and hiding them under menu options. Does Find and Replace really need its own sub-menu when you could likely put all of the choices in one dialog?

I'm all for keeping the basic menus shorter but the menu design choices that were made in Visual Studio just don't seem to make sense. I didn't feel too bad when some of the tweets I got back were about how buried some of the options were, which is what inspired the post. (don't even get me started on SQL Server 2005's menus or usability - I'm so happy I've switched to 2008 which is much better, although still not perfect)

When you design an application, to whom do you talk to ensure the experience is the best one possible for your users? If features that resolve the problem are priority #1, then shouldn't usability to find those features be priority #2?

So on that end, all of this to say, I built a little poll about what you do in development environments ASIDE from coding and designing.



What do you do in development environments?



I could be completely wrong on this - and have no doubt, many VS developers are shaking their heads going "what an idiot" - but no doubt, that was after they went through many of the same "where is this..." moments.

This isn't just a developer issue either - so it's useful to take the question "how do people discover this feature" and apply it to your own application design as well.

Sunday, November 23, 2008

Hardware choices

I'm in a quandry (and not because I haven't posted in a while - I have a number of posts in draft form that need to come).

I'm looking at new machines but I'm unsure. Do I invest in a better server to handle better VMs and possibly Hyper-V and then simply RDP into it when needed or do I look at a laptop for more VPCs?

Ideally it would be both - but economics these days limit the potential. Server hasn't been upgraded for 4 years (Dell SC400) but neither really has the laptop (Dell5150)

Platform doesn't matter these days. Thoughts?

Saturday, November 01, 2008

DevExpress Controls: Creating Characters Counters for Memo / Text boxes

I had to do this for a client so I thought I would share it. It uses the DevExpress ASPxGridView and Editor controls in an ASP.Net solution.

Here's some code to create a character counter for your text/memo boxes.  It's fairly common with regular javascript but it can be tricky with custom controls.

I used KeyUp because TextChanged only fires when you LEAVE the control.

Also note the use of GetText() to get the content. I struggled (stupidly!) with this trying to use the javascript text property.  The ASPxEditor javascript controls have their own javascript methods. GetText and SetText. (if you want to get scared, look at the amount of javascript that is generated when using an ASPxGridView control on a form)

<dxe:ASPxMemo ID="txtInfo" runat="server" Width="100%" Height="76px">
                <ClientSideEvents KeyUp="function(s,e){
                var ele = s.GetText();
                lblInfo.SetText(ele.length + '/4000 characters left');}" />
                </dxe:ASPxMemo>
<dxe:ASPxLabel ID="ASPxLabel1"  ClientInstanceName="lblInfo"  runat="server" Text="(maximum 4000 chars)">
                </dxe:ASPxLabel>

 Hope you find it useful. Here' s a link to my forum post.

 

HowTo: JavaScript Character Counters for Memo / Text boxes - Developer Express Inc.

Sunday, October 26, 2008

Super Useful Tips on Using DevExpress ASPxGridView

I've been using DevExpress's ASPxGridView on a fairly big ASP.Net project for the past few months. When I started using it, I was really frustrated. The documentation was written more like a class reference guide and the tutorials were fairly basic in nature.

The real MEAT of the controls didn't seem to be there - all this great potential but where?

The Community forums was a great place to look for details but as with many communities, it's hard to find all the answers. 

Hopefully, this post will help identify some of the areas where developers may be having some problems:

Fixing Edit Forms
1. Edit Form Column Layouts
The ASPxGridView lets you do direct "form" editing but when you first do it, the boxes usually go two per line. To resolve this, add
                              <SettingsEditing EditFormColumnCount="1" />
right under the grid definition.

2. Changing Edit Captions
You have a column that is titled Years but in the edit form, you want it to say "Years working for company". Within the column definition, add
<dxwgv:GridViewDataTextColumn FieldName="Years" Caption="Years"/>
          <EditFormSettings Caption="Years working for the company " />
</dxwgv:GridViewDataTextColumn>


Grouping Grids
The ASPxGridView lets you group the grids automatically.

1) Call grid.ExpandAll( ) right after the DataBind (or the Page_Load) to automatically open the groups (by default, they are closed)

2) The Group header starts by showing the name of the Group a colon and then the name. In the Grid definition, add"
Settings-GroupFormat="{1} {2}"

Commands
One thing I didn't like about the Grid View was that it would add New/Edit/Delete buttons on each row. Why show New on each one? I originally put a hyperlink on the top of the grid but instead, I've started to use the HeaderTemplate option instead.

Here's my initial Column set:
                    <Columns>
                        <dxwgv:GridViewCommandColumn VisibleIndex="0">
                            <NewButton Text="New" Visible="false">
                            </NewButton>
                            <EditButton Text="Edit" Visible="true">
                            </EditButton>
                            <DeleteButton Text="Delete" Visible="true">
                            </DeleteButton>
                            <HeaderTemplate><dxe:ASPxHyperLink ID="lblNew" runat=server Text="New" Font-Underline=true Cursor=pointer><ClientSideEvents Click="function(s,e){officers.AddNewRow();}" /></dxe:ASPxHyperLink></HeaderTemplate>
                        </dxwgv:GridViewCommandColumn>

The end result looks like this


Grid Form Validation
You can easily make a field mandatory in a grid by setting the IsRequired property to true. But there are two gotchas with this. By default, this puts a little exclamation mark by the field when you hit the Update button. The ErrorText property is then put into the tooltip.

Set the ErrorDisplayMode property to Text instead of the default which is ImagewithTooltip.

Another way to better manage this process is to put the validation settings directly into the code instead of the property settings.

loCol = grid.Columns(0)

            With locol.PropertiesTextEdit.ValidationSettings
                .RegularExpression.ValidationExpression = regexp
                .ErrorDisplayMode = DevExpress.Web.ASPxEditors.ErrorDisplayMode.Text
                .RegularExpression.ErrorText = msg
                .RequiredField.IsRequired = True

            End With

The above code also shows one of the other cool tips - instead of trying to validate the text after, by setting the ValidationExpression property, the input can be immediately validated via Regular Expression.

Column Widths
By default, the ASPxGridView will resize the widths based on the content. Some of our users found this disorienting when they edited the grid - because it would constantly change. Solution? Explicitly set the widths of each column.

I'm sure there are a lot more and some of the above are likely pretty obvious but I wish I had known about them when I first got started. I'll be adding to this post (or creating new ones) as I move forward.

The other cool part about devExpress is that a number of their developers are on Twitter, making it easier to find them and get help.


New Rule: Don't develop with Fingerprint Reader!

Who would have thought developers fingers could cause crashes?

I was working with my VS 2008 ASP.Net application and added some javascript to my default.aspx page when I started to get TypeLibBuilder crashes. WTF? Maybe it was my code --- maybe there was something going on in VS 2008 that I was missing. I shrugged and continued - because after all, when you get weird Windows crashes and you're working on a project, you do the obvious: restart your machine, pray to the Seattle gods and continue on your way.

Then I searched for it -

Big Problem Solved - No More TypeLibBuilder.exe Crashes!

Whoa! Killed DpAgent.exe in my Task Manager and no more errors.

Apparently my new MS Fingerprint Reader doesn't like JavaScript! Who knew?

Saturday, October 25, 2008

FoxShow #59: Profiling and Refactoring

The latest episode of The FoxShow features one of my sessions from Southwest Fox 2008: Profiling and Refactoring, a discussion on how to refactor and how the VFPX Code Analyst can help.

This session was given twice : this was the second time around. It was a good discussion including a back and forth on the benefit of comments. I, of course, took the controversial position that all comments should be banned from code except when they explain WHY something was done.

Thursday, October 23, 2008

The Fox Index

Here's a fun little piece from Southwest Fox 2008 where Ken Levy floats the idea of the Fox Index, a great use of those remaining copies of Visual FoxPro and then of course, Craig Boyd takes it one step further.



FoxShow Extra: Morning discussion with Alan Stevens on Agility

One of the great things about Southwest Fox was the open discussions that were had almost every minute. Thankfully, some discussions and "discussers" let them be recorded.

Here's a discussion Alan Stevens and I had one morning about his sessions on Agility and Ignorance as well as XML handling - a little FoxShow extra. It's short (about 16 minutes) but fun.

Enjoy!

Tuesday, October 21, 2008

Looking for VFP work?

If you're in the market for working full-time for a vertical market (transportation industry) company with a product family written in VFP 9 with lots of add-on modules (http://www.mtihorizon.com), and a migration path to SQL Server, drop me a line at amacneill @ meltech.com.

Will: communicate with customers regarding support problems, develop new solutions based on client needs, enhance product in both VFP and web environments

Requirements: VFP 9 experience, enthusiasm, good OOP background, DBF/SQL
Nice to have: C#, web development, EDI experience, mobile communication, transportation industry

Location: anywhere but need to be available during the regular day (EDT) - we do lots of remote stuff (thank you SourceOffSite!)

If interested, drop me a line at amacneill @ meltech.com.

Monday, October 20, 2008

A Little Performance Art...

A little performance art piece from Southwest Fox...(if it says unavailable, it's still being processed)




Saturday, October 18, 2008

SWFox: Evil Mastermind Wins Again!

One of the great sponsor giveaways at Southwest Fox was a 5-user license of SourceGear's Fortress. I've used Vault and Fortress but still stick with Source OffSite as our main development is handled through SourceSafe. Both work great with VFP. But the best part was in the conference bag: Evil Mastermind 2nd Exciting Issue!

Best quotes:
"You're a sales guy...if anyone understands evil, it's a sales guy"

"I want...I want...I want....and I want 5000 t-shirts!"

"We've got lots of masterminds using our products...I'm sure at least some of them are a little bit evil...I guess"

Kudos to Eric and the SourceGear team for another fun issue and great job, Southwest Fox team (was that you, Rick?) at getting the great swag!

SourceGear | Fortress

SW Fox: Why NOT Show your own apps?

One of the sessions that I didn't get to attend last night was the "Show us your apps". I think that session would have been really interesting.

Many of the attendees I spoke to were fairly shy about their own FoxPro applications. They would talk about it (as it is their "baby" so to speak) but when asked about specific features that they should show, they seemed to shy away.

That's unfortunate - because I don't think I've ever seen a single FoxPro app (with the possible exception of some purely framework-based apps) that hasn't included a unique feature or hook.

That's one of the reasons I'm particularly excited about Cathy Pountney's session about customization vertical market apps.  Only problem is that it's on right when I've got to get ready to leave. I think I'll have to corner her separately for a quick interview.

But back to my point, one my client apps is an application that was ported from DOS and brought kicking and screaming up to Windows and now finally over to SQL. It has TONS of Bad features (filtered grids, etc). BUT...it also includes some great features: built-in alerts, custom business rule validation.

So when asked to show my apps, I wouldn't show the bad stuff (well, I might to show that it exists everywhere) but the really cool stuff.

Everyone's got some kind of cool in their applications somewhere...why not show it?

The FoxShow #58: the VFPX Meeting

At Southwest Fox last night , we had a VFPX Meeting (that was also screencast over uStream).

The meeting went on for just under 2 hours but a lot of great ideas were thrown about, including ways for others to get involved, without having to code (something that many seemed to like).

I recorded it all for the FoxShow and while the audio may be iffy at times, it's a great listen!

Enjoy!

The FoxShow

Tweets from Southwest Fox 2008

While you won't necessarily see every post from Southwest Fox until maybe a few days after the show, you can keep up with it on Twitter.

Here's the hash tag and the search link: #swfox - Twitter Search

A really great conference with lots of fun stuff going on around here and the first real conf day (aside from pre-cons) is just over. 

Prepping for sessions, I only got to see one session which was Alan Steven's Agility. I'm going to put my notes up in a blogpost but I actually took my notes using Mindjet's MindManager and thought it would be cool to take them and also post them here.

 (this is a sample of out of the box MindManager exports)

More to come...

Saturday, September 13, 2008

VFPX Poll

I started a discussion on the FoxPro developers group on LinkedIn regarding VFPX. While VFPX had a huge number of people who signed up to receive notes about it, Foxpro developers I'm meeting aren't really aware of it. This was echoed by Rick Schummer when he asked about it at one of the conferences.

So I've created a little poll

Now, most people who read here will likely have heard about VFPX so feel free to post it around or send around to other FoxPro developers.

Wednesday, September 03, 2008

Ken Levy joins EPS

I would have put the automatic title link in the post here but the title of the page says "Untitled page" :( - you would also see this if you were subscribed to Markus on Twitter.

From the release:
"Ken Levy is joining EPS Software Corp. in the role of an Evangelist for several EPS brands. Ken is the founder of MashupX LLC, and through his new partnership with EPS, Ken will focus on EPS’ VFPConversion.com effort as well as CoDe Magazine (the leading independent magazine for .NET developers) and EPS’ custom software, mentoring, and consulting efforts around .NET and Microsoft server products. "

Evangelism? Ken? Somehow, those two often end up in the same sentence.

A great catch for EPS, certainly...

Monday, September 01, 2008

So where are all the FoxPro developers?

15 years ago, it was relatively easy to find developer communities - they existed pretty much in one place: CompuServe. Over the past 15 years however, they have spread out to wikis, newsgroups, independent sites (such as the UT or Foxite) as well as many who have gone into hiding. There are now tons of social networks out there and while some may dwell more on the social aspect, such as Facebook (which does have its own FoxPro group), others are more business related, such as LinkedIn.

When I first joined LinkedIn, I linked to a number of developer associates as either "past speaker at conferences" or other relationship concepts along those lines but since then LinkedIn made creating groups much easier. As soon as I created the FoxPro developers group, developers started to join.

The link is here:

LinkedIn: FoxPro Developers Group

What do you do with it? For starters, not much right off the bat. It's a pretty easy way to find other FoxPro developers you know and add them into your LinkedIn network but recently, LinkedIn started adding Discussions as a way for groups to communication so now there's a new tool as well. It's not really intended as a replacement for any UT or Foxite or ProFox where regular discussions are held but it will become whatever it becomes.

If you aren't using LinkedIn, it's a good business resource - as opposed to a traditional social networking site - and it works really well for finding former co-workers or others in a similar area.

Check it out and join the group!

Thursday, August 28, 2008

DevBlog: Why Vista is more stable than XP

I don't want to say much more to take away from Craig's great perspective here.

So some caveats:

1. I don't regularly run Vista - I want the right hardware to do so.
2. I don't like certain things about Vista - but then I don't like certain things about XP , or 98, or 95, or OS 10, or System 7 or ....you get the point.
3. Craig - this is what they should be doing instead of Mojave...yes, it's techy - but it explains it right. Kind of like the way Hybrid cars explain MPG better than Al Gore... or ...

I guess it's not quite so true tho...one ring to rule them all....

DevBlog: Why Vista is more stable than XP

Sunday, August 24, 2008

Get The SmallestDotNet

Scott Hanselman just posted some interesting details on the size of the .Net framework and I was surprised to see that it's really not as big as it always seems, based on typical installers.

Everytime you go to a typical DotNet download site, you see this "approximately 200 MB" download. Scary stuff if you're aiming to create a nice small download. But as he notes, this is because instead of creating a "pick the download that matches your configuration", Microsoft has an installer that covers every possible scenario, which unfortunately, DOES require 200MB.

So he's created SmallestDotNet: On the Size of the .NET Framework  - it didn't work so well on mine (as shown here):

<a href="http://content.screencast.com/users/Akselsoft/folders/Jing/media/fe8e9221-d9cf-4bf8-ad36-271a3051f694/2008-08-24_0425.png"><img src="http://content.screencast.com/users/Akselsoft/folders/Jing/media/fe8e9221-d9cf-4bf8-ad36-271a3051f694/2008-08-24_0425.png" width="405" height="166" border="0" /></a>

But it's better than nothing.

The only question that now arises is: but if I'm creating an installer, don't I have to be prepared for every possible installation? Possibly but apparently there's a tool "Client Profile Bootstrapper" that will make it easier in the future.

Note that this isn't for Dev DotNet stuff (like Team Explorer which is a 250MB download for what essentially is a file browser) - I wish there would be a similar post on this as well.

Great stuff and thanks, Scott!

Sunday, August 10, 2008

Demoing with Screencasts



After my post about screencasting (How to make Screencasting Made Easy AND Purposeful ), it was nice to see that Jason Calacanis also likes one key idea (based on his "how to demo your startup" email note.

His guideline: "the best products take less than five minutes to demo"

That post has lots of other great ideas for demos and they aren't just for startups - many established companies could benefit from this.

Tuesday, August 05, 2008

Olaf's Blogging

After what I would have to say was a great showcase of VFP Conference -tweeting , Olaf's started blogging...on one of his first posts, he shows how to do a Matrix-style screen in Cryllic, in FoxPro of course!

Welcome, Olaf!

Olaf's VFP Blog

Monday, August 04, 2008

How to make Screencasting Made Easy AND Purposeful

Everyone loves a good screencast, right?

You want to highlight your product or showcase a feature, so you start up your favorite screen recorder and record away. Then comes the fun part...the editing. Before you know it, a 15 minute screencast has turned into 2 hours of editing hell.

My personal torture tool of choice is Camtasia - which does a lot of cool features such as automatic zooming and panning and noise removal. But recently, I've talked about Jing - yes, it's by the same company (Techsmith) - but primarily as a screen image capture utility.

But this post isn't so much about talking about a product as it is about how to make these things easier. Whenever a great session is given at a conference, it's often because the presenter has done one of three things:
a) practiced
b) practising regularly  (if they were English)
c) rubbed their lucky rabbit's foot on a horseshoe after seeing a rainbow

In Screencasting, the same is true (well, except the part about the rabbit's foot - with screen casting, you just have to rub the top of the ...well, you get the idea). This is why people who regularly do screen casts smirk when someone says "just give me a 15 minute video" 30 minutes before a meeting.

But have you watched a 15 minute screencast? It can be painful. You're not watching Gone with the Wind or Braveheart or even a Discovery Channel documentary. If you've watched any of Scoble's video interviews, you know you have to be ready to bob and weave with the camera at any moment. Those are video interviews with some demos interspersed but usually, his team (of two) goes through the process of creating a shorter version to make it easier to interact with.

When you watch a great presenter doing an online seminar, after every 5-10 minutes of talking, they almost invariably do a poll or interact with the audience in some way. Even if it's just a way of making sure the poll-tracking features are working, it also serves to restart or re-enthuse the audience's attention span.

How can you do that in a 15 minute screen cast? I'm not sure you can. If you've got a topic that all of the watchers are absolutely enthralled by, then I don't think you need to worry but if you're trying to demonstrate part of your product or a cool tool, then I think it's best to come back to the old concept of "short is sweet".

So how does this relate back to Jing? Easy - Jing can only record 5 minutes of audio/video. Is that a limitation? Yes. Is it a GOOD limitation? I think so.

5 minutes means the following:
a) no fluffy white stuff (you will be forced to say what you want to say in exactly the amount of time you have)
b) you have to practice (so you can identify the fluff and rip it out)
c) No time for titles and special effects (hey - I like special effects but they can be annoying when I just want to see a feature)
d) Focus on the feature.
e) people who suffer from ADD may actually pay attention. (those of you with clients/bosses with ADD know what I'm talking about)
f) refactor your demo (see this post)

I'm a big fan of the Rapid E-Learning web site and a lot of it goes back to principles of adult learning, which forces you to think about things in terms of chunks and removing non-important details. One of the courses I took by FKA several years ago, spoke about breaking up your day into "review -> Learn -> Action -> Learn -> review" (or something fairly similar) and then how each TOPIC in your training could be done exactly the same way and if you were really good, you could bring this entire approach into every 15-30 minute part of the course. It's almost as if everything ever taught uses the conceot of the popular "I'm going to TELL you what I'm going to do, I'm going to do it and then I'm going to tell you what I've done".

If I've only got 5 minutes, it means that the real value of the screen cast has to be handled in 2-3 minutes, allowing for quick review or any brief explanation.

Since Jing ouputs directly to Flash, you also don't have the luxury of doing massive edits, which gets you (ok, and me as well - I'm as guilty as anyone on this) into a real good habit of preparing first, practicing second and then doing.

Here's a sample of one I did showcasing JiffleNow, a calendar scheduling tool I've been using of late (and yes, you can schedule time with me using this tool).

I still prefer Camtasia Studio for building proper screen casts but the idea of forcing actual feature demos into 5 minute chunks appeals to the purist in me. I started with the Jiffle demo but I think we can do more about these in making VFP easier to understand and use.

What do you think? How long is the ideal screencast for you?

Refactoring a Demo

I love refactoring code. Moreover, I think refactoring can also be used when looking at software demos.

I love looking at a piece of code that works (for the most part) but just doesn't feel right and taking it apart and putting it back together so that it makes more sense, not just for me but for the next person who comes along.

I find it funny that refactoring and unit testing come from the same core concepts (Agile) because if done correctly, code that was properly unit tested SHOULD result in code that is pretty well-written and refactor-proof. (I'm no expert on the philosophies behind this so please comment and rip this post to shreds)

So refactoring really comes into places where you've got unwieldy code (or worse, legacy code) that no one really can wrap their head around. By the time you've finished refactoring, you possibly COULD have some ways of unit testing it (if you were able to separate each logical piece out).

So how does this apply to demos?

Depending on who is giving the demonstration, a demo will consist of the following:

a) overview of features
b) description of benefits
c) demonstration of functionality
d) explanation of functionality
e) review of benefits / explanation of results
and possibly
f) showing of additional features

The actual content differs by person:
If a sales person gives a demo, it likely goes a->b->e.
A sales engineer: a->c->f->b (possibly e)
A developer: a->c->f->d (and sometimes you don't even need a)
A trainer: a->d->c
A trained user: c

If you want to really look at a valuable demonstration, why not refactor each piece of the demonstration asking the following questions (in this order):

1. What benefit are you trying to show?
2. What feature showcases this benefit the best? *
3. What is the bare minimum I can show to highlight this feature?
4. Is the result obvious?

* If more than one feature gives this benefit "best", then you may want to rethink the design.

How does this relate to refactoring code? Re-ask the questions, thinking about code:

1. What is this block of code supposed to do?
2. How could I rename this to make it easier for others to understand?
3. Have I made this as simple a call as possible for this function to run?
4. Is the result obvious to the calling program?

Development and sales departments almost invariably have a love/hate relationship. Turning some of the questions that are asked in both groups around to match the other's parlance might make a love-fest possible.

Are there any other areas that might benefit from "refactoring"?

Wednesday, July 30, 2008

Awesome Pie Charts with FoxCharts in zero time

If you haven't been trying out the VFPX project FoxCharts , or you tried but were a little frightened by how to implement it, here's some code that I wrote up quickly to build a nice little pie chart.

I call it GenPie and it gets called with any table and it will summarize it for you.

DO GenPie with "issues","cstatus","1","","Count of Issues"
or

DO genpie WITH HOME()+"SAMPLES\DATA\ORDERS","to_country","order_amt","","Orders"

The code essentially creates a form, drops FoxCharts on it and then uses a built-in cursor to create the chart. You can also pass it a Filter (before the title) and the starting color (in RGB).

DO genpie WITH HOME()+"SAMPLES\DATA\ORDERS","to_country","order_amt","","Orders",RGB(255,150,255)

Here's a sample:


LPARAMETERS tcTable,tcDirField,tcSizeField,tcFilter,tcTitle,tnStartColor
PUBLIC ox
ox = CREATEOBJECT("form")
IF EMPTY(tcTitle)

tcTitle = tcTable
ENDIF
ox.newobject("foxcharts","foxcharts","foxcharts")
ox.foxcharts.width = ox.width
ox.foxcharts.height = ox.height

IF EMPTY(tcFilter)
tcFilter= ".T."
ENDIF
SELECT &tcDirField,CAST(SUM(&tcSizeField) as numeric) as ntotal,COUNT(*) as ncnt FROM (tcTable) WHERE &tcFilter GROUP BY 1 INTO TABLE x

ox.foxcharts.sourcealias = "X"
ox.foxcharts.fieldxaxis = tcDirField
ox.foxcharts.visible = .t.
ox.foxcharts.ChartsCount=2
ox.foxcharts.fieldvalue1 = "ntotal"
ox.foxcharts.fieldvalue2 = "ncnt"
ox.foxcharts.Legend2="# Orders"
ox.foxcharts.Legend1="Total "
ox.foxcharts.ChartType = 1
ox.foxcharts.FieldLegend = tcDirField
ox.foxcharts.fieldcolor = ""
ox.foxcharts.colortype = 3
IF EMPTY(tnStartColor)
    tnStartColor = RGB(255,0,0)
ENDIF
ox.foxcharts.color1 = tnStartColor

ox.foxcharts.Title.Caption = tcTitle
ox.foxcharts.SubTitle.Caption = "Pie"
ox.foxcharts.yaxis.Caption=tcTable
ox.foxcharts.FontName = "Verdana"
ox.FoxCharts.ShowValuesonShapes = .T.
ox.foxcharts.DrawChart()

ox.foxcharts.visible = .t.

ox.show()

*!*    logif = _SCREEN.system.Drawing.Imaging.ImageFormat.Bmp
*!*    ox.foxcharts.oBmp.Save("x1.bmp",logif)


It's really easy and even though there are tons of options with it, this piece of code may make it a little easier to work with. If you notice the commented piece out just above, you can easily save the output as a bitmap.

FoxCharts totally rocks!

Sunday, July 20, 2008

Using Scour - Comparing Results

While many sites have compared the search results between Google, MSN and Yahoo, noting that generally they are all the same. I started using Scour recently which puts search results for all three into a single item (yes, it's a Point-based search which is interesting in and of itself but reminds me of most "point-based" systems - you'll never get enough points to make it of use without trying to game it). (you do get to "rate" each search response which may / may not have its own benefits - it's too early to tell).

Yes - the results of all three are generally the same BUT the relevance is interesting. Here's a sample (inspired from a tweet by Marina Martin):

The Pragmatic Programmer - Scour Search

Here are the results:


Notice anything?

1. While Amazon shows as the number one, MSN placed it as the number 1 result while Google/Yahoo placed it as number two. Just because I'm searching for a phrase that matches a book doesn't mean I want the book - it's great that it's there - but if I wanted to BUY the book, wouldn't I likely just go to Amazon or my favorite online bookstore?

2. Both Google and Yahoo link to essentially the same site but with a different URL (Google points to this one  (http://www.Pragprog.com) while Yahoo points to this one (http://www.pragmaticprogrammer.com). But the content itself is IDENTICAL.

3. Google's second result takes you to the main site whereas Yahoo's (doesn't show in the image) takes you to an articles page. which arguably has more details.

What all of this shows me is that the Search for all three companires is still reproducing the same site, trying to put a slightly different spin on essentially the same result. On the entire top 10 list, the same core site is listed 5 times, a book store is listed once (but at the top), Wikipedia is listed twice,  an interview with the authors is listed once , and the book distributor (OReilly) is listed once as well.

Is there really more valuable content on each of the 5 different links from the same site or would a person be more likely to "click" around the site? If that's the case, is it any wonder that people get frustrated by search?

Monday, July 14, 2008

Do you Scale?

Great post by Dare, Scalability: I Don't Think That Word Means What You Think It Does
following up on a post from Scott Loganbill at Google about their choice of "scalable" services.

Scalability is a funny question. Every application is designed to handle a certain type of architecture - it's usually one of those fundamental sales analysis questions "and how many orders do you typically process a day? How many people do you have working for you".

While scalability problems can be due to both technology and design, it's typically design that is the major culprit. (ok, yes, the guy that said he can run a 15,000 transaction a day system in Access - he likely chose the WRONG technology).

But everytime I think of scalability, I always think of 37 Signal's approach to scalability - in short, "Do you really need 12 servers now if you can run on two for a year?" - note read the comments from David Hansson "... Not worrying too much about scaling doesn’t mean building Basecamp on an Access database with a spaghetti soup of PHP making 250 database calls per request. It simply means having a profitable price per request, chilling the f*ck out, and dealing with problems as they arise."

Actually, their better quote is here. "If you've got a huge number of people overloading your system then huzzah! That's one swell problem to have."

Many of these posts and statements are generally made for large systems designed for mass usage. Not necessarily the same issues facing the systems that small businesses or even medium-sized businesses need. But still, just thinking about scalability when designing your databases can help in a big way.

I see silly design decisions that limit scalability all the time and they are generally made for no reason at all. A limit of 2 characters for Sequence numbers - what?!? you're never going to get over 99 items on a single order? Regardless of how unrealistic it may seem, chances are someone will hit it.

And then there are those that become requirements: A 5 character code for a customer ID - then the customer comes up and says I need to use 6. Is that really a scalability issue? Not really - until you've reached 26^5 customer codes, but the customer may perceive it as such. But the whole 26^5 argument does show there is a scalability design flaw in that definition. Will it ever show up? Hard to say.

Two Real Factors
So consider two different factors when it comes to scalability: hw uptime/access (as in can your hardware infrastructure handle a large number of users/transactions) and design (can your application handle a large number of users/transactions). Both go hand in hand yet demand different solutions.

The infrastructure factor can play off the design - if your application is designed for small groups but has lots of small groups, you can always put one group onto another server, if need be.

The Design can detrimentally affect the infrastructure. You can have as many servers as you want but if you constantly pull down lots of records when you only need one, you're asking for headaches.

And One more...
There is one more scalability factor to consider...and it's one that I think many people disregard because it's a Design issue but not so much an architecture design one - it's a user experience scalability design. Many applications were/are built for single transactions (the first web banking site for my bank only allowed one bill to be paid at a time). Just as much as uptime/downtime can play into it, if your application doesn't make it EASY to handle the increase in use, you can just forget about your other scalability problems.

Purists will say "Every software should scale " (and scale infinitely). Pragmatists will say "there will always be SOME scalability flaw in any design".

Think of this another way...even scales have scalability problems - in the design. Many only go to 300lbs. With the obesity epidemic these days, I'm not sure that's a limitation that users can overlook.

Wednesday, July 02, 2008

SQL Server 2008 to ship next week?

That's a juicy rumor. There's been a lot of posts about SQL 2008. It's the last of the next big dev things for 2008 from Microsoft based on the Heroes Happen Here and it's the one piece that I've been waiting for before doing any real production testing. 

SQL Server 2008 to ship next week? > > SQL Server Blog by Jason Massie

Looking forward to it - and if the rumor is true, Congrats SQL Team!

Crashing Fox

OK - so it says Firefox crash - but it's still a great photo. Thanks to Olaf for pointing to it!

Tuesday, July 01, 2008

Blogging the Prague DevCon

Twitter / OlafDoschke on Twitter, is doing an amazing job blogging the Prague Devcon conference.

He's doing it through Twitter at amazing speed which makes it very interactive.

He just finished doing Christof's Guineu session and Mike Feltman's Collection Classes.

I love it when people Live Blog conferences but never thought of using Twitter for it. I'm glad he did.

Thursday, June 26, 2008

What's Going On? : Letting the users know

As many UX (user experience) people will point out, the good ol' WAIT WINDOW command, while useful for showing progress, isn't very visually pleasing.



Many developers skip the WAIT WINDOW and favor a progress bar but as Andy Kramek has pointed out on his blog, when you're scanning through a 20,000 record table, tracking the percentage complete can slow you down.

While it's nice to show the actual percentage, even Vista now just shows an animated therm that really doesn't show progress.

What alternatives are there?

MSGSVC has a useful therm approach - which can display an animated icon.But it uses a Timer and those can take up valuable resources.

I've recently taken to putting up a form with an animated GIF on it among other things. I used to use the animated AVI file approach that MS recommended years ago but the big problem there is that it's too hard to create a nice AVI or the tools just aren't there to do it. (My users are getting tired of seeing the flying folders when I'm working - if anyone knows of a good resource for useful AVI animations for developers, please let me know).

Doesn't the animated GIF use resources? Yes, it does. So I've built it as a COM EXE and call it as its own tool.

LOCAL loForm
loForm = CREATEOBJECT("_akdisp.showani")
loForm.DisplayForm("Updating files...")

The showAni method simply displays a form in the center of the screen with an animated GIF on it.

Then when I'm done,

loForm.HideForm()

Are there problems with this approach? Oh yeah, it's set to always appear on top so the user could, in theory, flip back into the main application and not see anything. In addition, I have to register the EXE which could be a problem with certain user permissions but I haven't seen any.

The reason I ask is that I'm thinking of various projects that might prove useful on VFPX. A revised set of UI classes might be useful or maybe I can coerce Emerson into putting something into this themed controls library.

What tools do *you* use to give users feedback?

Wednesday, June 25, 2008

SW Fox 2008: Deadline Coming Up

Southwest Fox 2008 is coming up in mid-October (boy that seems far away) - but the early bird deadline is right around the corner.

This conference is definitely going to be interesting. It's the FIRST conference since Sedna and the real "take-over" of FoxPro by the community and while the community itself is widespread all over the world, there's going to be a lot of news coming out of this show, for sure (just as there usually is out of most conferences). I was talking to a friend who is speaking at the Prague conference and he's unveiling a new report framework that is very exciting (I have a FoxShow interview that I'm cleaning up so it can be posted shortly) and the Southwest Fox conference is going to have most (if not all) of the VFPX project managers present, showcasing what's new there.

The early bird rate is $620 and includes a free pre-conference.

I hope to see you there. The FoxShow will be podcasting from the show "floor" on a daily basis and we'll be talking with many of the speakers right up to the show itself, giving everyone a glimpse of the great stuff FoxPro has to offer.

Sunday, June 22, 2008

Developers and Politics: A good idea?

I just learned that Kevin Ragsdale is running for Congress  he's running as an independent and as he notes on his campaign website, he's running for change in politics (a common theme in this US election) but more importantly as he notes, he has 9 trillion reasons to run (the National Debt). So good luck Kevin!


As he notes:
"When I'm approached to create a solution, I simply study the problem and apply logic and common sense...Maybe we could use a few more programmers in Washington, and a few less lawyers."

So that got me thinking. Are there generic pros and cons about developers running for congress?

Pros
1. As Kevin notes, logic is a key component of programming logic. While not necessarily that of everyone who writes a program (or a compiler), the key point is once you know the rules of the compiler, logic will prevail (for the most part). Does that apply to government or politics? It's supposed to, except that politicians always like to change the rules.

2. Passionate. Of course, here, I'm talking about real developers/programmers/analysts, not the ones who go into computer science because of the job opportunity. The same could be said about anyone who really enjoys their work. I believe it was Plato who actually said the only person who shouldn't govern are the ones who want to govern (or something to that effect, someone refresh my quote).

3. Ready for change. As Kevin notes above, he looks to create "solutions". You start with one solution but if presented with a better one, you go for it.

Cons

1. Forget about party lines - what about the language lines? Ideally, developers don't get too crazy about their choice of tools. But one can only look at the differences and attitudes between some Win devs vs. Linux devs to question it a little. Would a little Washington make a difference?

2. Too much logic? Is there are such a thing? Then again, if you look at pros 1 and 2, they don't have to conflict.

What do you think? Are there others?

Andy Kramek : Access and Assign methods can be useful!

At the risk of simply pointing to someone else's post and saying "yes, I do this and you should read this if you don't", Andy Kramek has a great post about Access and Assign methods can be useful!

I use Access/Assign methods probably not as much as I should and his post pulls out some examples that I hadn't thought of before:

a) to create form objects that don't already exist (as in THISFORM.oDataManager, etc). This means you don't simply do a THIS.AddObject() to a form but rather assign it to a property la THIS.oDataManager = CREATEOBJECT("datamanager")


b) Running code by using SetAll which does call the Assign method.

Wednesday, June 18, 2008

Using DNN Controls

Dave Bush has started a great series on using and developing DotNetNuke modules.

As he notes in the intro:
"What you read here will not necessarily be the DotNetNuke sanctioned way of creating a module.  But, it will be what really works.  It will tell you what you have to do when and why you need to do it and why you might want to skip it altogether."

Ah....the "hacker's guide" to DNN. His post on the Label control outlines a lot of the functionality that you might not immediately grok when starting with the DNN framework. Subscribing to the RSS is a lot easier than reading page after page as well. If you're using DotNetNuke, check it out.

DotNetNuke Modules - DNN Controls - Label

Wine Released - after 15 years

Ted Roche noted over on Twitter that Wine has been released. Wine as in the open source implementation of the Windows API for X, OpenGL and Unix.

This is interesting more in passing for Fox developers as Wine was one of the tools that allowed FoxPro applications to run under Linux (among other environments). It also brought the entire FoxPro EULA (and likely any other MS product) to the raging issue stage (most MS Dev EULAs state that Apps can only be distributed on the Windows platform).

In my interview with Christof, he had noted that his Guineu project allowed FoxPro code to run on Linux environments thanks to the Mono project, which is a DotNet client for those environments.  Wine is something different although if you look through the app list, you may get a poor feel for it as it would appear that the only apps people really wanted to run on those environments were games (with the exception of PhotoShop CS2, all on the Platinum, Silver and Gold lists were games).

Wine

The developer world has certainly changed from when Wine was first conceived but congrats on hitting a 1.0 release. That does make me wonder - what version is gMail? It still says "Beta" to me but what is Beta anymore? (and on that note, take it away Rick!)

Thursday, June 05, 2008

Need Video or Image Capture? Jing is very cool!

I know many developers use SnagIt for capturing images or even video for their applications. SnagIt is from TechSmith so I was surprised to hear about their new project, the free tool named Jing.

Jing appears as a glowing ball atop your screen as shown here:

Jing on your window
Select the cross-hairs and then choose if you want to just capture an image or a video (with sound).

It then creates the file and you can instantly upload it to TechSmith's ScreenCast.com or FTP it over to your site as needed. Fast and easy screen capture and looks great to boot!

When you do a screen capture, what's really cool about it is that it stores the screen video as SWF (or Flash) , making it easy to embed directly into web pages or other locations (cross-platform).

The tag line as shown below is "Visual Conversation starts here" - and they're right. I was really surprised at how easy this was to use. But it competes with their own commercial Camtasia and SnagIt -(it does promote their Screencast.com)  so I'm not sure why they did it - but I'm definitely glad!



Jing Project: Visual conversation starts here. Mac or Windows.

Monday, June 02, 2008

NetSuite Buys OpenAir For $26 million

TechCrunch just reported that NetSuite Buys OpenAir For $26 million

This is interesting from a few angles. I've used both and I continue to use OpenAir for my timesheets having started almost (jeez!) 8 years ago. They have always struck me as a great company. They have a very straight forward policy: new upgrades every month.

They might be small, they might be large (they just announced Crystal Report integration this past month) - but they always deliver a set of updates every month.

And the price point is right - while I don't know what their current offering goes for, they have been able to keep my company on the same month to month cost for the entire time, less than $300 a year.

I've always wondered how they were doing as an overall business since they didn't really fall into the whole Web 2.0 stream but still had a huge number of industry relationships.

NetSuite, on the other hand, I really can't say. For an expensive solution (close to 30K for a small company implementation), the UI looked great but the end-run implementation was terrible. That could have just been our implementation experience but it left a bad taste in my mouth. One of those "so much possibility, so little delivery".

Everything I've seen about NetSuite however, does show that it is a real good force to compete with SalesForce and other tools - but they do approach the business somewhat differently than OpenAir.

When a client of mine was evaluating sales automation tools, in fact, we looked at Open Air as a possibility. While it didn't look as "sexy" as the others, it did offer really valuable features. I for one, love the online invoicing - I've been paperless on invoices since 2001.

I hope OpenAir stays the same great company I've always found but if this is what they wanted, good for them!

Pay for Value or Pay for Time

Doug Hennig has a great post about the challenges of switching from Time-based pricing to Value-based pricing.

It's certainly a hard thing to do - as Doug points out, it's easier for products but harder for Services as Products

Great read!


fs

Unpinning VFP 8...

Even though it's a relic from Windows XP and was substantially upgraded (or downgraded depending on your view) in Vista, the classic Start menu really does have some great features (while I don't agree with everything this article (18 things Vista &amp; XP need) from the UK PC Advisor notes - the fact that it was WRONG about some things too, the point about Mac's standarised menu ribbon is bang on)

"Pinning" is one of my favorites. While XP automatically puts regularly used applications on your start menu for easy access, you can easily add to this list yourself by right-clicking and choosing to "Pin to start menu". I do this regularly for tools I know I always use at least once a month (like West Wind Help Builder, ISTool and others ) - so I don't have to go scrounging through the program files menu. Even though I do use SlickRun for fast access to programs, I never got around to adding all of them on there.

But for the past few months, there's been something on my Start Menu that never gets touched and that's VFP 8. I kept it around as some of my colleagues still had applications running with the older runtime and I might have to go back to it, but it's just cluttering up space. I find myself cursing when I realize there is code that I have to verify is VFP 8 compliant or can't use MemberData in my property names.

So today, I unpinned it. While it hasn't yet joined the older VFP IDEs on my attached "old" drive where I keep FPW26 and VFP 5 through 7, I have a feeling it will be joining its counterparts there very shortly.

Why? Simply put - I'm just more productive in VFP9 than I am in the other environments.

Thursday, May 29, 2008

What's in a name? ....er, everything and nothing

Craig Bailey blogged recently about a new product, Elcom, had introduced with a name of Elcom TrainingManager.Net. In his post, he briefly mentioned they were talking about renaming it and one of the responses was from a company named Igor that talked about the importance of naming.

By now, I think everyone has seen the Microsoft iPod parody where it shows what Microsoft marketing might have done with an iPod and certainly, while it was done as a joke, the reality is Microsoft's product naming conventions can be a bit tedious.

How many different versions of Vista are there? And they all start as Windows Vista. And don't get me started on Microsoft Visual Studio Team System for Database Designers (they did clean this up slightly in 2008) - it's almost as if marketing gets paid by the word when they come up with a product name.

Craig has done a nice job with his CLARITY posts that attempt to explain certain products and his post on Microsoft's online offerings (Live=Consumer, Online=Business, Hosted=Third party) does shed some light on it (one could argue that if your product lines needs CLARITY posts, you need to rethink your naming).

But the entire naming issue got me thinking about who's doing it right and who's doing it wrong? OK - based on above discussion, we don't need to know everyone who's doing it wrong - a few examples suffice.

I think Apple, without a doubt, is one of the leaders in product naming. It's not the Apple Mac, it's simply Mac. It's an iPod, an iPhone, an iMac - yes, they do Need to get out of the whole "i" thing soon but consider the Newton. I think the only product Apple has out now that actually says Apple is the AppleTV. And they have brand recognition. No one thinks twice about the company you are referring to when you talk about one of these devices. They *know* it. If someone started talking about a very cool and revolutionary technology product, one of the first major companies that would spring to mind would likely be Apple.

So do you really need to put your company name in your product name? Even more to the point, is it necessary for your product name to tell everyone what they are supposed to do with it? When I talk about spreadsheets, I just have to say "Excel" and people know what you are talking about (this is one case where Microsoft won the product naming issue but then lost it with the different versions of Office). PowerPoint now is the defacto word for doing presentations on a computer. iPod is the defacto word for MP3 players. Sometimes I think that "Smart Phones" or "PDAs" aren't all the rage because someone (RIM) came up with a single word that encapsulated everything they were supposed to be (Blackberry). (and Microsoft did have a good thing with HotMail but now that's become Windows Live HotMail or something to that effect).

Let's look a bit further at Internet-based companies.

Both Google and Yahoo! had similar sounding names in that they were almost nonsensical names based on what they were doing (and yes, I do know that Google was supposed to be Gooogle based on the big number but that doesn't help me make my point). AdSense is Google's product and while some do refer to it as Google Adsense, it's almost not needed. But here, Google is certainly falling into a trap. Almost everything Google does includes the word Google. Google Earth, GoogleDocs, GoogleMail (gMail), Google Health. They might be better off trying to take a strip from Apple and just use the letter 'g' instead. At least with gMail, it looked like they were doing that. And now, it's GoogleMail for Business.

To be fair, Google does have Blogger, Picassa, SketchUp, YouTube and Orkut.

But what about the embattled Yahoo? At least they have Flickr, a term which more and more defines sharing photos but in many cases, they suffer the same problem (YahooMail, Yahoo Finance, etc)

When someone says Basecamp - I don't think "oh that's right, it's 37signals Basecamp project management solution for small business" , I just think "Basecamp" and KNOW what I'm referring to. dBase was a clever way of shortening database, but FoxPro didn't relate at all to databases, except that it became known as the way to make them faster. And while SPSS may be an acronym to do with statistics, most would be hard-pressed to descramble that acronym (it's actually Statistical Package for the Social Sciences)

I think it's fair to say no one would ever have thought of "Monster" as a term for job search 20 years ago but nowadays, it's pretty common. Does Twitter actually explain what the service does?

Try to connect the products below and the market they serve. Do any of them make sense?

Quicken                 Web Site development
Freelance               Email Manager
Dreamweaver         Personal Finance
Thunderbird           Presentation Software

You know your product is a success, when your product name becomes synonymous with that market. (Heck, you may even want to change your company name to match your product as Satellite Software did with WordPerfect)

Which brings us back to the Elcom naming discussion above. Does adding .Net to your product name make it a better product? No - but it certainly endears you to the IT department in the fortune 500 company who thinks so and who may have a hand in deciding your product's fate in that company. Do you need to put your company or other brand name in front of your product name? Only if you don't think it can stand on its own. It's like the companies who make a big deal about ensuring you say "Inc" or "ltd" when discussing the company as if it makes it appear more professional. When you are writing for legal purposes, it may be required but otherwise, get rid of all the crap that doesn't make any sense. Apple did it last year when they removed Computer from their company name. It was superfluous.

I think of the poll the FoxPro community had when determining what to name the community driven VFP project. Many were torn to call it VFP.Net but I have to say VFPX was the right choice (buy this product a vowel please).

Naming your product and space is important - but it's not necessarily about clarity. If people are confused about what your product does, it MIGHT be the name but it might also be the PRODUCT itself.

Saturday, May 24, 2008

Soulhuntre's rules to code by

I don't typically post items directly from Twitter but Soulhuntre hits upon something that I believe many developers have to deal with every day, regardless of the platform.

Twitter / Soulhuntre: Ok. Rules to live by 1) don...

Monday, May 19, 2008

The End of the Web? Not Even Close.

Everyone's got their tin-foil hat on today, it seems.

Scoble posted this morning on twitter - http://twitter.com/Scobleizer/statuses/814823578

That if Microsoft buys Facebook and Yahoo search - the end of the web is coming.

There will be a lot shaking out from that but I wanted to reply specifically to this post on Herd Watching - Special Microsoft / Facebook Edition - The End of the Web?

where the statement is made "first off, Microsoft is just evil".

Really? I started to comment directly there but then figured it would be best as a separate post.

First off, MS buying Facebook/Yahoo search doesn't mean the end of the web. To me, Facebook and other "closed" platforms (as they are referred to) remind me a lot of CompuServer, AOL and even MSN in their infancy. The goal was to keep everyone inside their environment.

As the web grew, that changed. This is NOT about being locked into a platform and if it is, it's not going to be good for those involved.

But moreover, I disagree that Microsoft is evil.

(that said, their lawyers and some of their business practices are definitely questionable - but this post is about PLATFORM)

They are a company struggling to come to grips with a slowly crumbling platform in the current world of technology - which is hard to deal with when you were the former giant. (I say former with tongue firmly in cheek - they are still the #1 software company in the world, - at least I'm pretty sure they are. )

So they are clinging on to what they know best - the closed platform. Windows is a closed platform - but because it's everywhere, it doesn't feel like one. But guess what? The Mac is a closed platform - both hardware and software wise. iTunes/iPhone? Yup - all closed. Very few platforms are completely open.

It’s ironic because so many of the great people at Microsoft are very open - and want to share - but MS also knows that to stay successful in business, you DO want to keep people in your platform (hence the reason why they kill off product development on non-important platforms or EULA you to death).

Google is exactly the same but they fight it differently because they are open to where you want to go - they just want you to START with them and ensure that wherever you go, you see them there.

This is the web "platform" of today. (Scoble has actually said as much before so I'm surprised he's jumping all over this - although I just can't find it right now).

Struggle may be a strange word to list next to Microsoft but it is a struggle that I definitely see. It has to do with upgrades in the face of new applications. Another case in point - last year, I would look for a photo editing package to do basic photo fixes like RedEye, etc. Today, I'll use picnik or something like it.

Microsoft isn't evil - they are protecting "their own". If you own or distribute your own product, you likely do the same - and I don't think you're evil.

The main point here is that if they do buy Facebook and try to keep it closed off, they are simply prolonging the inevitable.

Even MS developers don't use ONLY MS products - they use the best tools they can get their hands on. And if that's NOT a MS product , then they try to find ways of bringing similar functionality in those products.

If you make the best products, eventually everything will/should fall into place. Because the end of the "closed platform" era is upon us. And as Ted Roche's blog originally put it, as long as the mission is "Interoperable. Competition breeds Innovation. Monopolies breed stagnation. Working Well with Others is Good.", every company (including Microsoft) will play a part.

Sunday, May 18, 2008

Craig Kills off an entire generation

Craig posts his thoughts on The Death of Gen Y amid the upcoming poor economic times. It's a good read but be sure to get down to the bottom for his four key points of how to survive.

These aren't sure-fire ways to stay employed but they are good guidelines:

a) Work for a company that focuses on benefits rather than features (and I would suppose that if you were a consultant, YOU would focus on benefits rather than features - but don't consultants do that already?)

b) Work for a company that invests in R&D (or invest in your *own* R&D)

c) Work hard and smart

d) Be a solution provider

So how did he kill off an entire generation?  You'll have to read it to find out...

Tuesday, May 13, 2008

Say No to Feature Creep

Chris Saad has a great post over on his blog: Leadership includes saying no « Paying Attention

Not sure if he just went through a specific scenario to inspire the posting but it's a great read, especially for technical managers.

One of my clients had a problem: they have a list of over 397 enhancement requests to their product. Now, to be fair, some of those are fairly cosmetic and but at least 200 of them require some kind of review for someone to say "no - we are not doing this"

So why don't they? Because when they get in front of their customers, "no" is the hardest thing to say. And I'm a terrible accomplice but because if they ask "can it be done?" , the answer is "yes, it can". The real question should be "SHOULD it be done?"

When some people think about feature creep, they tend to think of it in relevance to a particular function - but in this post, think about feature creep being about the entire product line.

As a result, the client has about 30 open projects that have yet to be prioritized and when they return from customer visits, there might be some more.

Why not add more developers to get them all done?
Before you do that, you have to ask the question : are they all really needed? And then, are they all needed tomorrow?

So we tried to devise an easy way of identifying a real priority. I used to take a listing of all the issues and sorted it based on how many calls we had for a particular feature. The problem with that is that customers tend to be focused on the "issue of the day" as opposed to the "vision for the future", a vision that typically appears as a high priority a few days after we've put our heads down and gotten all the "issues of the day" done.

1. Narrow your focus, for at least a single release.
2. Publicize that focus - make sure no one is unaware of what your current focus is, and make sure no one takes you aware from that.
3. Make that release a short one (no, I don't mean in the sense of Agile with a two week turnaround, although that might not be a bad idea)
4. Have the managers who continually try and re-prioritize items start planning the NEXT release, instead of throwing more irons on the current fire.

There are a lot of benefits to this approach:
a) you have a "focused" release that can be easily marketed.
b) you can deliver a "focused" message (instead of one that's all over the map)
c) there's a finite list of items to work on.

The problem with this approach?
It requires managers who are able to do that - in short, managers/clients who are able to say "no", even if all they have to say is "no - not just yet"

Certainly, hearing "No" is something VFP developers have heard for a while. "64-bit?" no. "VFP 10?" No. "Open EULA?" No. "Access to core code?" No. But we haven't been told no about stopping what we're already doing. There's certainly a limit to what's possible in the "no" world but one "no" does not mean no more "yesses".

What about you?
Have you ever turned away a client or turned off a feature? How did you say No?   What thought pattern did you go through?

Dynamic Languages Strike Back

Garrett pointed over to this post Stevey's Blog Rants: Dynamic Languages Strike Back
which is really a transcript of a speech Steve Yegge gave at Stanford.

Very interesting read/video whichever you prefer.

When reading about half way through (I've marked to come back to but it's definitely a good read) , I immediately thought of the TIOBE index and how excited VFP developers (including myself) got when we had broken the top 20 - why?

because of this quote

"So that brings us full circle back to the point of this topic, which is: the languages we have today, sorted by popularity at this instant, are probably going to stay about that popular for the next ten years."

(and yes, technically while VFP is still at 20), there really isn't much change between the top 5 or 10 on the TIOBE index.

Which is simply a fun way of saying "people stick with what they know".

Sunday, May 11, 2008

Tweet, tweet, twitter , twitter

Rick Strahl writes up his thoughts on Twitter - Twitter this, Twitter that... - Rick Strahl's Web Log

I've been on Twitter for a while as well (started for keeping up with Newsgator and BuzzOutLoud items) and completely agree with his quote:
"Since I'm a single developer shop and live in sort of a bubble on a far away island (or a small town on the mainland when I'm back there) Twitter is  providing a little more sense of being a part of greater community to me."

(albeit, I'm not on an island but then...we all can't be so lucky)

For those who aren't familiar with Twitter, it's a microblog (limited to 140 character posts) where you follow (and are followed) others.  Just as blogs have their "if I was a tree" posters, they also have some really insightful "twitterers".

People post just about anything on twitter so it can seem weird in some cases. I typically identify with those posts about "checking in lots of code" or the feeling of triumph "I am an XML god" after resolving a particular problem.

( someone did note that I was particularly "busy" twittering when in fact, I had only posted a few times - but to those who are unfamiliar with updating their "state" regularly, it does appear as you are "busy" - especially on tools like Facebook where your latest twitter can appear.)

While there definitely can be a lot of noise,  I find Twitter particularly useful for connecting to other things that are of interest where a blog post would be overkill.
Some examples:
  I found jquery.com based on Rick's single tweet "this is how it should be".
  Evernote - found via Rhonda Tipton  - as opposed to the various media reviews
  a number of great links on innovative writing , development videos, development concepts ( I follow devs who do just about every kind of dev, not just VFP) and hey, you can even help others with their writing.

It's also a great way of announcing posts of interest to others that may be outside your direct circle.

Many people like to keep their blogs very specific to a particular topic - twitter allows those people to still point to items that are out of that specialty but may still be of interest.

As a client - Myself, I use twhirl, which has made using Twitter very fast and easy.

I think I may start reducing the number of "noise" blogs I subscribe to since those "noise-makers" typically "tweet" as well.

Can it be a time-waster? Yes - but that's what discipline is for. For me, it sits in the background (I don't use the SMS features - part of what makes Twitter so popular) - but if someone posts to me directly (which they can with an @akseloft), I am told about it - and otherwise I can just quickly review.

140 characters also forces you to be fairly succinct in your posts...now please excuse me while I tweet that "I am posting a post on twitter" <bg>

Friday, May 09, 2008

Finding movie information with IMDB.DLL

OK - I don't know how long he'll be able to continue calling it IMDB.DLL - but this DLL totally rocks.

Samir has created a very easy to use DLL that retrieves movie information directly from the IMDB database.

As easy as:
REGSVR32 IMDB.DLL
oIMDB = CREATEOBJECT("imdb.imdb")
oIMDB.Login('andrew@aksel.com','Password123')
? oimdb.Search("Smallville")
? oimdb.Search("The Fountainhead")
? oimdb._GetWriters() && Returns a string of values


My Story with IMDB (imdb.dll)


Now - do we have one like this for music?

Thursday, May 08, 2008

Techdirt: Ideas Are Everywhere... So Why Do We Limit Them?

Dave Winer pointed to this article over on Twitter and it's a great read on the foibles of patent protection on ideas.

I hadn't heard of what Myhrvold was doing before but when I read it, I cringed at the thought and how those people were just screwed simply for discussing ideas.

Makes me glad that Da Vinci wasn't around to get all of his ideas patented - then where would we be?

Techdirt: Ideas Are Everywhere... So Why Do We Limit Them?


Too bad Gladwell didn't get it.   i

Wednesday, May 07, 2008

Poll: When do you do your best development work?

So after being up way too late watching primary results (political junkie - go figure) and then waking up early to get some new updates moved into our Fleet Management product, I was struck with a thought and wondered...when do developers do their best development work?

Poll

Monday, May 05, 2008

Comparing Web Framework platforms

Found via Michael Foord, the summarized screencast is fun to watch but the results are even more interesting. The Result? ASP.Net pretty much more than 3 minutes.

Screencasts | BetterWebApp.com

Perhaps just as interesting, the interactive Dar tool,comparing a variety of factors including speed of development, deployment cost, community, productivity among others.

What companies plan their purchases strategically?

Craig Bailey posted this link on Twitter regarding Sun's lacklustre performance last quarter -
Jonathan Schwartz's Blog: Our Q3

Choice quotes:

"Why don't you just stop giving your software away?

Because we prioritize developer adoption. Let me give an example....the MySQL team had scored a design win - ahead of the proprietary competition. What should we have charged them beforehand? No matter what it was, they wouldn't have used the product - startups and developers don't pay for software...We didn't pay them, the MySQL team earned their adoption."

"Why does Sun's CEO waste time writing that blog?
Because I believe in providing clarity surrounding our strategy and operations - not just once a year in the Annual Report. I believe clarity behind our direction is useful for our shareholders, customers, partners and employees."

It's a great post, full of honesty (as far as I can tell) about what's going on at Sun and it contrasts with the Microsoft/Yahoo debacle.

The most disappointing thing I have heard regarding the proposed (now dropped) merger was Balmer's assertion that he wasn't buying Yahoo for the technologies but rather simply for the online advertising business. While I can appreciate that to some extent (there was a fair bit of overlap) , it's also a bit strange because both companies are now getting known for their ability to scoop up companies and then let them languish. I think Microsoft does a far better job of integrating their purchases into their entire system (consider FoxPro into SQL and other technologies) but some obviously don't think so.

Microsoft does a great job with their development tools and getting the message out (Rock the Launch was a great example of that) - but their direction can be spotty or there is a rush to get something out and then to correct it later.  And yet, there are lots of technologies within Microsoft just dying to see the light of day, be they internally-developed or purchased.

There was a FoxPro devcon quite a few years ago when the mantra was not "Fox Rocks" but rather "Challenge Me" - the premise being that you could do virtually anything with FoxPro.

Microsoft continues to do that but it seems, to me at any rate, that it's in areas that they are already behind the curve. As a result, it's seen as a "me too". Consider that Yahoo introduced Pipes before PopFly and even though they are different, they are also similar enough to let people make a connection.  As Joel Spolsky wrote, even Mesh seems like something that's been done before.

Where is the Excel 3.0 of the next generation of web apps?

Microsoft - don't just challenge me - challenge yourself. You've done it before - show us you can do it again.

Friday, May 02, 2008

Quick VFP Developer Shortcut: Tables into clipboards

Developers create a lot of little "snippets" that help them in a lot of different scenarios. Some of them evolve into larger tools; others turn into hidden gems that get shared among a small select few.

(hmmm....SET TANGENT ON ....sounds like an interesting idea for a VFPX project - a snippet sharer - damn! don't they have that in VS? - I DIDN'T think of that when I was first writing this - why can't I think of something that VS DOESN'T have? - OK - SET TANGENT OFF - I do think we DO need an IntellisenseX manager that allows others to post useful Intellisense snippets)

However, here's something I had to quickly build today and others likely have other ways of doing this but....

Problem: I wanted to quickly take the content of a small query subset table and dump it into a document (text) for easily review. (no, not everyone deals with XML)

Update: YES -> you COULD do all the silly code I have down below here but Steve Black, guardian of all cool hidden things in VFP, reminded me of :

_VFP.Datatoclip()

In my efforts at least, a VERY underused feature that would have saved me a bunch of time today (ok, so maybe only the 2 minutes it took to write the stuff below, but still)

Original Post:

While I could certainly say

CURSORTOXML () and then be done with it - I wanted it to be a little more readable.

** Function to copy current alias to a clipboard using tabs
lc = ""
    FOR lni = 1 TO FCOUNT()
        lc = lc + TRANSFORM(FIELD(lni))+"    "
    ENDFOR
    lc = lc+CHR(13)
SCAN
    FOR lni = 1 TO FCOUNT()
        lc = lc + TRANSFORM(EVALUATE(FIELD(lni)))+"    "
    ENDFOR
    lc = lc+CHR(13)

ENDSCAN
_CLIPTEXT = lc

Of course, you could further enhance this more for HTML purposes:

lc = "<table><tr>"
    FOR lni = 1 TO FCOUNT()
        lc = lc + "<th>TRANSFORM(FIELD(lni))+"</th>"
    ENDFOR
    lc = lc+"</tr>"
SCAN
    lc = lc + "<tr>"
    FOR lni = 1 TO FCOUNT()
        lc = lc + "<td>"+TRANSFORM(EVALUATE(FIELD(lni)))+"</td>"
    ENDFOR
    lc = lc+"</tr>"

ENDSCAN
lc = lc + "</table>"

_CLIPTEXT = lc

(hint: you can past raw HTML into things like Word and Excel and it's automatically formatted)

Yes, I know this isn't elegant but it worked exceptionally well for what I needed.

I would run a quick query on some data, run this function and then just paste it.

Quick and Dirty - just when you need it.  

Southwest Fox 2008 - Make Plans Now

So registration is now open for Southwest Fox 2008. I think it's always hard for a conference web site to do it justice. You can show either pictures of the speakers
, the facilities or the food - repeat the testimonials from previous years - but the question remains:

How best to sell 3-4 days of intense FoxPro developer community interaction?

For as much as I am a "let's blog everything so it's available everywhere" type of person, I definitely get the value of attending the conference - so I'm really happy that I'm able to be there this year (I plan on doing some fun stuff on the road with the FoxShow as well for the show)

I find Bud Wheeler's (of Visionpace) comment particularly fitting for this year: "You can't afford to miss this opportunity to learn what is new and exciting in VFP."

At the most recent Rock the Launch event in Ottawa, many were saying "what's new with a product that Microsoft isn't doing new stuff with?" - THAT'S our challenge - to show that FoxPro has always been able to rely on its fantastic community just as much as its software maker to create the innovation that VFP offers businesses.

This year should be particularly exciting - since it's the first year that the direction of VFP is completely in our hands!

Register today or if you need someone to convince you more, call me (415-578-4496!)

Southwest Fox - Home