Blogs

Gary's Blog

June 2009 - Posts

  • XAF – Project Management Application

         

    Recently I had an IM chat with the XAF team that went something like this (I paraphrase of course):

    Them: Hey Gary we need a new PM app so we’re gonna write one and we want you to blog about it as we go.
    Me: Cool, no problem. Just let me know what you want and I’ll get it out there on the blog.
    Them: That’s great. Thanks. You know you’re the best evangelist we’ve got, right?
    Me: yeah I do.
    Them: The thing is…
    Me: Yeeeeees?
    Them: We’re kinda busy with the whole Writing-XAF-Thing, so maybe you could write the app and we’d be your customers; it’d be done agile like?
    Me: You mean you’d change your mind at every turn?
    Them: Yeah.
    Me: And whilst this is going on, you want me to blog about it so our customers can throw in their tuppence worth too?
    Them: Yeah oh, and can you ship the code too so that they can use it for reference?  
    Me: By ‘reference’ you mean pick apart every line of my code and hold it up for scrutiny and public ridicule?
    Them: Yeah, sucks to be you, huh?

    imageAnd so our XAF Planning Application was born. Now I know what you are thinking (even you Rory Becker and frankly that’s disgusting). You’re thinking here’s another XAF RWA. Well you’re wrong, it’s not. We’ve spoken before about the fact that we’re not doing a RWA for XAF, not now, not ever, no siree Bob. What this is, is an application that will be used in the real world, and that, dear reader, is completely different. :-)

    This application is going to be used by the XAF team for planning projects, and umm… holidays and gadget buying trips and… well you get the idea, and it works something like this. Well, it works something like this for this iteration, I dare say there’ll be changes prompted by the team (and you guys) for iteration 2 – N, but for now, it works like this:

    When you open the application you will notice that there are two groups. The first group, labelled “Project” holds an action for Project and one for Estimate. The first will allow you to work with Projects whilst the other will allow you to work with Estimates. Projects are pretty self explanatory and Estimates will allow you to “size” a project at the “getting the budget” phase, before there’s even is a project to speak of. (Of course, being the first iteration that functionality is not complete, but we can CRUD Estimates in the meantime). Once the project has been given the go ahead, Tasks can be created from these Estimates, or they can be created manually.

    Okay so let’s have a closer look at Estimates:

    image

    As you can see, an Estimate has a name, a summary of the work to be done, the effort required to complete the task (in days) and, optionally, the Resource who will carry out / test / manage the Task.

    Now let’s have a look at the Project:

    image

    Our Project has name, a manager (the person we’ll all blame when it goes wrong), the percentage complete (this will be calculated from the percentage completes of the tasks attached to this project), a start date and an end date. The Project also has collections of Estimates, Tasks, Resources and Milestones for the Project.

    In the second group there are actions for Project Manager and for Resource. Currently anybody working on the Project who is not a Project Manager is just a Resource, this may change in the future. Resource inherits from the built in Person class within XAF and Project Manager inherits from Resource.

    As this is the first iteration I have not included the source code as it only contains the class definitions and validation rules and, as anyone who works with XAF will tell you, that is not very exciting. Having said that, if anyone desperately wants the code from this iteration just leave a comment here and I’ll publish it.

    Well that is it for this post. I’m planning weekly iterations and in next week’s iteration we’ll look at creating Estimates and then adding those to a newly created Project, before using them to automatically generate Tasks for the new Project.

  • What’s new in the iPhone OS 3.0?

         

    So June 17 finally rolled round and I was able to update my iPhone from 2.X to 3.0, yay! Of course it wasn’t that straight forward, when is it ever, right? I mean the download went smoothly enough, but then I had to wait for the Apple Activation Server, and wait, and wait, and wait… Finally, everyone else stopped getting their activation and I managed to get mine through. So having done that, what’s new…?

    Well for a kick off, they’ve finally fixed my two bug bears with the iPhone:

    MMS

    Finally, we have MMS, yes that’s right iPhone users, welcome to the ‘90s we, at last can send and receive picture messages! I mean we always could before, sort of, but it was a real pain. Firstly, if someone sent you a picture then you got a text from your provider telling that you had a picture and giving you a url to go to. Then you had to open Safari and head over there and then type in your phone number plus a passcode and then you could finally see the picture. Phew, what a lot of needless effort!

    Now it’s much better, now the pictures appear, inline, in your text conversations (as shown) and you can double tap to open them to full size if you wish, all seamlessly. Yay, about time Apple!

    Talking of text messages, that brings me nicely on to the second bug bear of mine that Apple have fixed with this release and that’s the fact that you couldn’t delete single messages in a text conversation. You had to delete the whole conversation or nothing. How dumb was that? Happily that is fixed now and you can delete individual messages.

    Speaking of ‘90s usability, Apple have also giving us iPhone users the ability to forward messages too. So the next time somebody sends you a joke by text, you’ll be able to pass it on, instead of just having to remember it for the next time you are with your mates in the pub, by which time of course, they’ve all already heard it as they got the original text forwarded to them! :-)

    Rounding off our trip back to the ‘90s with the iPhone we now have, the long awaited (at least by me), copy cut and paste functionality. Why that wasn’t there from the get go, I’ll never know.

    But this release is not all about playing catch up with functionality, there are several new features. There’s what I call Etch-a-Sketch functionality. If you are typing away in an email or something and you make a mistake, then just shake the iPhone and it’ll pop up a dialog box asking you if you want to undo the typing.

    Also Apple have beefed up the iPhone’s search features in two way. Firstly it is enhanced in applications like mail etc, but also there is a new “Spotlight” feature which can be accessed by swiping left from the home screen or by pressing the home button when on that screen.

    More Etch-a-Sketch functionality can be found in the iPhone’s iPod player. Simply shake the iPhone to enter shuffle mode; though Apple may have this set a little to sensitively as there are reports on the Net of iPhones shuffling during particularly bumpy flights, or when running to cross the road. If this happens to you, never fear, you can turn this functionality off under Settings –> iPod. Staying with the iPod functionality for a moment longer, there is now the ability to playback video in either landscape or portrait modes you can also jump back exactly 30 seconds and play at either half or double speed.

    The 3.0 release also come with parental controls, but we don’t really care about that do we? I mean, let’s face it, our kids are not going to get their grubby little hands on our lovely shiny iPhone now are they?

    Well this has been a short tour around some of my favourite functionality in 3.0, it’s by no means complete, but I hope you’ve enjoyed it. For a more complete run down you might want to check out the Apple site for more details.

  • XAF and the Secret Validation Information

         

    Ever seen the XAF validation dialog?

    image

    Yeah of course you have. Ever double clicked on the text in the “Description” column? Nope, me neither until recently, try it now:

    image

    Whoah, what happened there?! DevExpress secret sauce happened! Well okay, not so secret now I’ve told you. What it is, is a dialog that will give you all kinds of handy information about the validation that was just executed. Information that will help you if your validation isn’t working just how you think it should.

    Pretty cool eh? Right, I’m off before the XAF team finds out I’ve spilled the beans. :-)

  • XAF – RuleCriteria and Read Only Properties

         

    As a man I never read the instructions; it’s baked into our DNA. There were no instruction manuals back when we lived in caves, right? So if we didn’t need them then, we sure as heck don’t need them now. This applies doubly so when I’m working with XAF. Why? Two reason really. Firstly, it allows me to see how intuitive XAF is – does it work, out of the box, the way I naturally think it should? Secondly, when I get stuck, it allows me to see how easy it is to get unstuck using our documentation. (okay when I said I never read instructions, I meant never *before* the fact.)

    Right now I’m working on an XAF application (more on that later) and I want to set up some validation rules; specifically I want to validate that a StartDate is greater than or equal to today’s date. So, naturally, I intuitively I write:

    [RuleCriteria("StartDateMustBeAfterToday", DefaultContexts.Save, "StartDate >= DateTime.Now.Date")]

    Which doesn’t work and throws this error:

    image

    Well okay, so much for intuition, time to find out how it should really be done. So, I open the documentation page for RuleCriteria and I read it; and it’s right there, you saw it didn’t you? No? Meh, me neither first time round. It’s there in the “Remarks” section.

    “In criteria, you can use Read-Only Parameters. For instance, the "Today = '@CurrentDate'" criterion means that the Today property must be set to the current date.”

    That single sentence, tucked away in the remarks section is important, hence my post today. It means two things. One, that my code should have be written as:

    [RuleCriteria("StartDateMustBeAfterToday", DefaultContexts.Save, "StartDate >= '@CurrentDate'")]

    Which will throw the following validation error, as required:

    image

    It also means that all the read-only parameters, which we document as being used for filtering (which is true) can also be used in RuleCriteria, so go check them out and have fun!

  • It Don’t Mean a Thing if it Ain’t got that Bing!

         

    Unless you’ve been hiding somewhere not even the search engines can find you, you couldn’t help but notice that there’s a new kid on the block; that new kid comes in the shape of Bing, Microsoft’s new search engine. So new in fact that it’s still in beta; but then again, every web app’s in beta these days, right?

    So what’s Bing all about? Well the first thing you need to know is that it’s not a search engine, oh no; it is, in fact a “decision engine”. Microsoft say,

    “Bing is specifically designed to build on the benefits of today's search engines but begins to move beyond this experience with a new approach to user experience and intuitive tools to help customers make better decisions, focusing initially on four key vertical areas: making a purchase decision, planning a trip, researching a health condition or finding a local business”

    Leaving aside that somewhat freaky “vertical area” of “researching a health condition” – cos frankly that’s what the doctor’s for, right – is Bing successful at the others? Well, let’s find out. Firstly, making a purchase. Now, a certain young lady who works for DevExpress has been banging on about getting a Dell Mini since she was at TechEd, how does Bing stack up against Google in helping her make her “decision”? Let’s check it out by typing “Buy Dell Mini” into each engine, Google first…

    image

    As you can see (click on the thumbnail for a bigger image), with Google you get sponsored links, then shopping links, then the Dell site. Not too bad and now Bing…

    image

    Here, it’s sponsored links, followed by the link to the Dell site. So more or less a draw then. The only difference really is that Google shows the site map of the Dell site, which is more helpful if you were looking for a particular page on the site.

    How about planning a trip? Let’s go to the Lake District, first let’s fly Google…

    image

    Google has sponsored links and then straight in to the travel and accommodation links. Let’s see what Bing gives us…

    image

    Well it gives us sponsored links followed by a map of the local area and links to some local hotels. Much more useful in my opinion.

    Lastly, let’s try out finding local business. After all this searching I think I need something to eat, and we all know you can’t go wrong with a good curry. Let’s see what Google can offer us…

    image

    Google offers a map of the local area and a list of restaurants on the map. Very impressive. Let’s see how Bing shapes up…

    image

    Meh, not so good. Just the usual sponsored links and then the links to the local restaurants, but not the helpful map and links that Google provided or indeed, which Bing provided for the travel search.

    Well, after this rather rudimentary search, I’d say Bing still has a way to go to push Google off the top spot but then, as Steve Ballmer himself said, it’s going to take Microsoft years and years to get anywhere in search. The big question now is, is Bing the second best search engine out there?

  • Google – The Next Wave

         

    One of the trends to catch my eye this week is Google Wave; the personal communication and collaboration tool, was announced at the Google I/O conference, which ran from May 27 –28 this year.

    Wave is an open source platform (built entirely using Google Web toolkit) and showcases what can be done in the browser. The entire platform is an HTML5 application, with the exception of adding attachments to a Wave, for this alone you need Google Gears. The platform has been under development for the last two year at Google and is brought to you by the same team that built Google Maps. Google Wave has an API, which will allow you to embed Wave in your own web pages (your blog for example) or create extensions to the platform. As I said, Wave is open source and there is a published protocol so that anyone can create their own Wave system.

    So, how does it work? Well take email for example, which was invented 40 years ago and was modelled on a well understood messaging protocol; snail mail. Messages were sent to one or more people and each recipient would reply, or not, as need be. Now, imagine if we were to invent email today with all the experience we have with bulletin boards and wikis etc. there is no doubt that it would look quite different. Wave is Google’s idea of what email would look like if it were invented (by them) today. Instead of a number of reply –> response pairs, which is the current email model, Wave sees the entire conversation as a single conversation object (living on a server) that can be opened and edited by anyone added to the Wave. This metaphor allows a participant in the Wave to instruct the server to insert his reply inline, including his avatar, so that it is clear who is saying what. Once there has been any number of such edits, and if it is required, the “finished” document can be extracted from one Wave into a new Wave for wider circulation. But what happens if you are added to the Wave late and you want to see how the present state of the document was reached? Well for that there is the playback function which allows you to see how the document evolved, from it’s inception, to it’s present state – one edit at a time. Google are planning to add a set of power tools to this functionality that will allow you to only playback edits from a single participant etc. Of course, there is also an option to make your edits visible to only a subset of the participants.

    Powerful though this undoubtedly is, the real collaborative power comes from Wave’s ability to be embedded in other web pages such as blogs; this opens the blog up to the full power of Wave. Now when your readers comment on a posting they get added as a participant of that Wave. You can reply to them from your web page, or from the Wave client (a browser application). From your client you can add others to the Wave, who can contribute without ever going to your web page, as any replies made by them are visible anywhere that Wave is visible, including your web page. As other readers comment on these replies, so they are added to the Wave as participants and join the conversation. After some time, it maybe be that no one is updating the Wave from your web site, but are instead using the Wave client to continue the conversation, but the beauty of Wave means that the full conversation is still visible on your page.

    The API is not limited to embedding Wave in other web pages though, it also allows you to create extensions to Wave. The team realised how important developers were to the success of Wave so they wanted to make sure that the extension model was robust. To do this they wrote a lot of the functionality of Wave in that very extension model so that their (and your) extensions would live as first class citizens of the Wave platform. One such extension is the spell checker; the Wave spell checker not only checks the spelling of words (as you’d expect) but is context sensitive, being able to correctly detect not only misspellings but the incorrect use of a correctly spelt word that sounds the same; e.g. through and threw, been and bean, won and one, etc.

    There is no doubt in my mind that Google Wave is going to be a great boon to those of us in the evangelism world who use collaborative tools day in, day out, and I can’t wait for it to ship later this year.

More from DevExpress
Live Chat
Have a pre-sales question?
Need assistance with your evaluation?
We are here to help.
Chat is one of the many ways you can contact members of the DevExpress Team. We are available Monday-Friday between 8:30am and 5:00pm Pacific Time.
If you need additional product information, require pre-sales assistance, or want help with your order, write to us at info@devexpress.com or call us at
+1 (818) 844-3383.