CodeBetter.Com
CodeBetter.Com
RSS 2.0 via Feedburner
           Do you Twitter? Follow us @CodeBetter

Eric Wise

Business & .NET

September 2004 - Posts

  • Easy Assets .NET :: Part 2, Choosing a Design Pattern

    Ok, now that I had defined my goal/target, it was time to start thinking about what design pattern I wanted to use.  I had a few thoughts about I wanted to achieve with the code as follows:

    1. I wanted separation between the GUI and the business logic.
    2. I only need to support SQL server databases, assuming that if someone is going to use a .NET application that they have access to either SQL Server or MSDE.  I will use stored procedures for the vast majority of queries.
    3. I wanted to use a pattern that isn't overly complex, both so that I wouldn't have to spend alot of time building complex objects, and because I do intend to release a source included version someday, and I want that source to be easy to follow.
    4. This data model and logic is not very complex, consisting mostly a simple data in/data out.  There is not alot of complex interaction going on between objects beyond a simple primary key pointer reference.

    With all this in mind, I decided to use the Table Module Pattern.  The table module pattern is useful in situations where your pattern is shaping up to use the Domain Model combined with the Active Record pattern.  Here's some general info about the Table Module Pattern:

    • The data structure is very much in the center of the code.  For a table oriented data structure, this is hands down the most simple and straightforward pattern for data manipulation.  Table Module thrives on .NET recordsets/datasets.
    • The objects will basically mimic a SQL table, exposing your CRUD (create, retrieve, update, delete) and encapsulating your business logic/behavior with the data for extra simplicity.  Just about any developer should be able to follow your code easily.
    • Table Module exposes a very easy way to use inheritence by overriding the CRUD functions and adding additional properties to support special instances of objects.  (For example, an Employee my have a network login, an ITEmployee may have a second network login with higher priviliges than their normal user account.)  You can also use inhertence to expose commonly used views or other queries.
    • Complicated domain logic and polymorphism don't work very well in this pattern, if you are going to make use of these, check out the Domain Model.

    So with this pattern, I have basically two classes for each table.  The first class is the single instance of the entity that a table holds (ie: employee).  The other class, denoted by it's plural name (ie: employees) is used to run queries and searches that return collections of the employee object.  I generally choose to bind my own collections to grids, dropdownlists, etc instead of using datareaders and datasets.  This is a personal preference, nothing is stopping you from using them.

    My next article will show some code examples of how I set up my table module objects.

  • Easy Assets .NET :: Part 1, Defining Goals/Targets

    This is a continuation of my article series describing the design and development process of my company's product.

    For any software product out there, you must do three things before you start any planning or development.  First, you must define a problem that you would like to solve.  Second, you must define a market niche you would like to place your product into.  Third, you must look within your niche to find your target audience.

    In the case of Easy Assets .NET, I had seen alot of market reports from Gartner and also had alot of personal experience as a consultant that showed that a vast majority (somewhere around 90%) of organizations out there have either no asset management practices or what they have is “marginal” which is politically correct way of saying that the methods use suck.  Also, there are many studies that have been done that point to the large cost savings that can be obtained by using asset management properly in your organization.  I saw one report that claimed that proper management of software and IT hardware in an organization can save anywhere from $350 - $800 per user.

    So here we have a problem with a well defined cost savings solution.  My next question is “Why do so few organizations have asset management software?”.  To answer this, I had to do some serious google searching and check out some competitors products.  What I found was that there are some excellent enterprise offerings out there from companies like Remedy and Peregrine plus some lower budget offerings from Intuit.  But for the most part what I found was that many solutions suffered from the following problems:

    • Cost - Enterprise solutions are definately not cheap, and definately out of reach for most organizations.
    • Complexity - Enterprise solutions are notoriously difficult to set up and learn to use.
    • Visual Appeal - Many of the lower budget offerings are downright ugly.  I found many an interface that looked like it was coded in VB 4.
    • Extra requirements - Many solutions on top of the software had additional requirements, like SQL server or Oracle 9i, which adds to the cost and requires a higher level of knowledge to install/administrate the software.

    So now I had a problem I wanted to solve.  The next step was to choose my target niche.  Obviously being a one-man shop, I'm not going to be able to compete with gorillas like Remedy or Peregrin, and Inuit's offering was geared towards IT professionals and companies that have a IT staff presence.  This lead me to the conclusion that my best bet would be targeting smaller organizations that do not have a strong IT presence.

    Small organizations, weak IT presence, well now I just defined my target user.  My target user is probably not overly IT savvy.  They don't want to have to read a bunch of technical manuals to get started in an application.  They also don't want the hassle of administrating a database and probably will avoid using most “advanced” features.  So my challenge is to create an application that exposes as many of the benefits of asset management and breaks them down to be easy enough that anyone can pick up the use of the program quickly.

  • Easy Assets .NET Development (with Demo)

    Ok guys, I've decided I'm going to attempt to blog out some code and development notes that I went through in creating my company's asset management program, Easy Assets .NET.

    Now obviously, it will be easier for you all to follow along if I give you a login/password to a demo version of the software running on one of my servers so here you go:

    http://server1.easywebapps.com

    uid: guest@easywebapps.com

    pwd: testing123

    The guest account I set up has all privileges except administrator, so you'll be able to play with all the features except the role based security (also prevents any mischief, I'm trusting that no one will change the password, so if you're reading this, don't be a dick, I'll take out the change password for the guest account if I have to, but I'd rather not spend my time doing that).

    Once you're logged into the system, you'll notice that most of the menu areas have descriptive text about what the purpose of the area is.  I designed this application (EASY assets) to be very intuitive, so you should be able to get around the system without any help files.  However, if you'd like some documentation, just click the blue question mark at the bottom of the menu and take a peek at the quickstart guide.

    Of course, if you find any errors/exceptions, please let me know.  Also, if anything in the system strikes you as neat or gives you a “how'd he do that?“ thought, post it here and I'll be sure to include it in the future articles.

    I'm going to break this application down into logical article sections over the next couple weeks and blog it!  For now, feel free to poke around and have fun with it!

     

    **NOTE, those of you working with me on the open source project, I know I haven't been around much lately, I plan on picking that up more next week.  I have a major deliverable for a fortune 50 client this week that I'm working on.

  • Offtopic: Bought a new car

    Traded in my '02 Dodge Dakota last night for an '04 Honda Civic LX.

    I must say that the sales staff at the Honda dealer weren't nearly as slimy as many dealers I've worked with in the past.  They got me the payment I wanted and didn't pressure me too much.

    The car itself looks very sharp.  I got the shiny blue color b/c my wife says “it's pretty”.  It handles very well, doesn't have alot of oomph because it's a v4, but the cabin is roomy and surprisingly quiet for an “economy“ car.  The dealer gives cheap oil changes and free car washes to buyers (which rocks b/c I live almost across the street from them.)  My thought is that with my wife being from Sweden and never driving before that this compact car is simple enough in design and handles nice enough that it'd be a good car for her to learn to drive on.  Eventually I plan on making this her primary car and then getting myself another truck!

    So yeah, I'm pretty happy, kept my car payment the same, double the gas mileage, and doubled the time between oil changes.  My truck was only a two seater, and since I have a baby on the way that just wasn't going to work anymore anyway.  It was time for a change!

  • My Asset Program goes live!

    http://www.easywebapps.com

    I'm feeling pretty dang good about myself!  I've finally completed my asset management software to the point where I feel comfortable calling it v1.0!

    So to recap, here's all the stuff you can do with the program in this build:

    1. Enter all basic fixed asset fields (serial number, asset tag #s, purchase information, etc)
    2. Categorize your assets by defining your own categories and subcategories for easy searching.
    3. Keep track of your asset's physical location (3 levels: Site, Location, Room)
    4. Assign ownership / responsibility by company (leases), department, and employee
    5. Create warranty and service contracts with expiration dates, assign assets to these contracts with their own expiration dates to track current coverage for all your assets.
    6. Schedule maintenance for assets and track the history of maintenance performed.
    7. Create issue / help desk tickets to assets.  Assign the tickets to designated support users to resolve.  Tracks the history of issue tickets and hours spent working on issues for the assets to help with ROI and future purchasing planning.
    8. Create purchase orders and generate batches of assets from purchase order line items pre-populated with all purchase order information.
    9. Administer your own logins, uses role based security to grant or deny access to every part of the system.

    Coming soon:

    1. Subscribe to email notifications for expiring contracts, scheduled maintenance due, and issue ticket items.
    2. Depreciation calculations.
    3. More reports!  (Basically I'm just going to build reports on customer demand)

    After doing alot of research on competitors pricing, I decided to price on two levels, one for non-profit organizations and one for corporatations.  Pricing is $899 / year for corporations and $599 / year for non-profits.  All subscriptions include unlimited disk space, unlimited user accounts, and unlimited email tech support.  My company handles all of the backups, and all modifications / patches /additions to the product are included in the subscription.  Looking at other hosted companies prices I can comfortably say that I absolutely trounce them in terms of price. 

    For you spec geeks out there the product is ASP .NET written in C# with a SQL Server 2000 database.  You'll be able to see the code someday as I plan on releasing a source - included version of this for purchase probably in early 2005.  For now though I just want to focus on getting more customers in the door!

    So if your company, or anyone you know could use software like this, please send them my way!  I think this thing has the potential to be a lifesaver for schools, community services like fire departments, and small / midsized businesses.  Also, if you know anything about how to market your software other than google let me know too, that's the next piece I'm exploring.

  • That's some big flash memory!

    CNET Asia - "The Korean electronics giant (Samsung) unveiled an 8-gigabit flash memory chip Monday based on the 60-nanometer process, as well as a 2-gigabit DDR DRAM chip based on the 80-nanometer process. Flash chips, which retain data after a host computer is turned off, are used in flash cards and cell phones, while DDR DRAM is used inside PCs."

    So when are we going to use that 8GB flash memory for an instant-on operating system?

  • Currently Reading

    Patterns of Enterprise Application Architecture

    Martin Fowler

     

    I'll let you know how I like it. 

  • Been quiet lately

    Yeah, I've been pretty quiet lately.  In the home life, my wife is now 13 weeks pregnant, we got to listen to the heartbeat the other day which was pretty cool.  When I think about all the genetic “code” that runs when a life is made... wow.  Can you imagine trying to code a system as complex as a life form like a human being?  Now imagine coding millions of life forms, and an ecosystem that harmoniously supports them all.  Plus a universe to put them in.  Humbling though really...

    Anyway, beside those musing, I'm currently involved in planning a major ASP .NET project for a retailer in the top 50 of the fortune 500.  So that's cool to be working on and I can tell you, their current system is very outdated and their world is going to be 100000x better when we're through with it.  Plus I'm involved with a fairly simple savings calculator for a local transport company and a web based customer survey for the same company.

    I've been neglecting my open source trainer application.  We're currently reviewing the database and no one seems to have many gripes with it so I'm going to try really hard to get people going on some data access code next week.

    Oh, I'm also learning to use Paint Shop Pro.  Long have I feared graphic design, but I really need to get over that and learn a new skill so my websites can look sharper.

  • Broadband issues part 3

    I got a tech from my provider to come out to the apartment and check it out. He reported that many people in my complex have been reporting problems, but they can't seem to figure out why the speed is an issue. He had all these bandwidth charts and stuff showing that they're not anywhere near the cap. On the bright side after he left it started speeding up to normal cable modem speeds and behaved well throughout the night.

    I'm supposed to run some speed tests and a tracert to send to them if the speed problem keeps happening to help them figure out where and why the problem is occuring. Technology just hasn't been kind to me this week.

  • So my Serverbeach server is currently inaccessible

    My forums and company free trial server went down last night. I was getting a 404 error for apache (which was odd since it's a windows 2k3 machine). I also couldn't remote into the machine. So I opened a ticket with serverbeach and got this response:

    Subject:

    Hello, Your server is back online, there was an issue with another server taking your ip address. That has now been resolved.

    Mike

    ServerBeach Support

     

    Alright, it'll probably take some time before the dns stuff repoints, so I go to bed. Log in this morning and the server is still inaccessible! Grrr

  • Launching an Open Source Project- Part 1 (Intro)

    Most of you have probably seen my post about my new project.  I've gotten to thinking that although the concept of developers from around the world collaberating on a project isn't exactly a new one, there may be some question about how to properly set up and manage such a project.

    Now I'm the first to admit that I've never tried anything like this before, and a major part of my starting the project is to experience how this collaberation will turn out.  So over the course of development of this project, I will be blogging my experiences in all aspects of the project.

    Team Selection

    I posted in my blog a brief description of the project and asked for volunteers.  I wasn't really sure how strong of a response I would get, but I will say I am pleasantly surprised at the variety of interest I got.  (By the way, I still have a few slots open and will be willing to take on a few more guys, but not many).

    Here were my goals in team selection:

    1. Get 5-10 developers total.  This is a volunteer project and 10 may be overkill, but I want to be sure that if some people get caught up in real life or back out it doesn't hurt the project too much.
    2. Get a few eager, “newbie“ programmers.  I figure these guys will be the most passionate about taking on responsibilities and excited about learning new things.  Also, it just gives me a warm fuzzy feeling to help people get their feet wet.  Newbie programmers will most likely be hobbyists or college students.
    3. Get one or two very experienced developers to help architect and direct the other programmers.  As the project “owner“ alot of this is my responsibility, but I wanted one or two guys I could trust to get feedback from and put in charge of various sections of the program.  These developers will also be in charge of code review and do some mentoring of the newbies.
    4. The rest of the developers should be your average every day coders.  They will do general code and design and some light mentoring of newbies.

    Now I figured that the experienced developers would be the hardest to find since they're probably busy with alot of other stuff.  I was wrong about that though, and got several responses from experienced developers and newbies, so the current “gap” seems to be in the mid-level coders.  We're pretty geographically spread out, from the USA, Netherlands, India, etc so that should add an interesting twist to the interaction between team members.

     

    Setting up the collaberation environment

    For this I've done a few things:

    1. Provide an online forum- Gotdotnet has a forum, but I scrapped this in favor of using the forums site provided by my home business.  Since my company will be distributing the source / documentation freely and it already has a customer forum I figure that the development team being in the company forum will allow them to keep up with end user feedback easier.
    2. Provide online source control- I created a GotDotNet workspace for this.  They have a visual studio plug-in which seems to work well for most members.  There is also an HTML source control and a .net control that can run in the webbrowser.  I tried out all 3 and they seemed to all work well, though the visual studio plugin is definately the most elegant.
    3. Instant Messaging- I've decided to embrace MSN messager as the preferred means of instant communication between members.  All .NET developers should have a passport account anyway, so this was just convenient.

     

    Getting to know eachother

    After giving team members access to the forums and workspace, my next task is to get everyone talking.  To facilitate this I've asked them each to post a short introduction in the forum talking about their experience level and what part of programming they enjoy the most.  I've also posted some code samples of BLL classes into the workspace plus the prototype of the database. 

    After everyone has read the requirements and looked over the code and database I look to have a discussion to find the reactions to the code/database prototype and what jobs they seem interested in performing.  I will then divide up the team into microteams giving them responsibility for the various layers (database, BLL, DAL, GUI).  Ideally, I want to pair the newbies with experienced people over them to provide review and support so that they can grow and learn.

     

    That's as far as I've come in the last 24 hours.  I will post Part 2 once everyone has downloaded the code and database files.  Part 2 will blog my experiences with the discussion about database structure, requirements, and how the start of the actual work has been laid out.  As I mentioned above, if you want to get involved with this project, you need to contact me asap.  Otherwise, I hope you enjoy reading about this experience!

  • New Project

    I've had a few developers contact me about helping with my open source project.  I'm still looking for a couple more, so if you have some spare time on your hands and want to jump in please email me.

    The project is a multi tiered training and certification tracking program.  Basically, there are a ton of non-profit orgs (fire stations, schools, etc) that need to keep track of all the training and certifications their members/volunteers have.  (CPR certification for one, there are tons of examples).

    My goal in this “experiment” is to get some developers together, build a solid database structure, build a database independent data layer, build a business objects/collections layer, and then put together an asp.net front end in one build and a winforms front end in another build.

    The language used will be C#.  The product will be made available for free download with source code included.  The only caveat in the license is the code is only to be used internally/not for resale/redistribution.  My company will also host the asp.net version of the application at cost for not for profit organizations that don't have the IT-Savvy to run it on their own.  The team of developers who assist me with the project will get the first shot at any customization contracts that any downloaders request.  Customizations are billed at an hourly rate.

    So if you're interested in helping with something like this, let me know!

  • Broadband issues still not resolved.

    It's been a week since I reported my speed issues to my provider.  Still no satisfactory response.  So now I'm going to have to publish their name.

    The company is called My Esuite, the website is http://www.myesuite.com

    Now, yeah, I know that the website is one of the most god awful ugly things you've ever seen.  But there is literally no other alternative in my corner of Ohio.  No dsl, no other cable internet providers.  (By the way, the cable company Cable Net is pretty craptastic too.  No reciever boxes available and no digital cable).

    Time Warner is available a few blocks away, I sure hope the jump into my area.  I miss them fiercely.  Wonder if I can call time warner and get on an “I'm interested” list.

  • Charity for Schools and Not-For-Profits

    Being that almost every school and not for profit I have ever seen is in horrible condition as far as budgeting and tracking their assets.  I am pondering either giving away, or charging an incredibly low fee for product subscriptions to schools and not for profits.  I'm going to consult an accountant before announcing this on my website to find out what kind of benefits there are for my business besides the warm fuzzy feeling I'll get from helping these organizations better manage themselves.  I'm also hoping that this will start generating word of mouth so I can easier get paying business clients.

    Has anyone else here done charity development work?  What are your experiences with it?

  • Wanted: Control suggestions

    I'm going to be working on a scheduling component for a company.  Basically they have specific teams out in the field in trucks, and they want to be able to look at their schedule (busy hours vs free hours) for a business day(s).

    So I'm looking for a web component that will show an outlook style appointment booking for the team's time.  Either lines across times or just color blocks.

    I'll be researching 3rd party components later today, but if anyone knows of ones that are good please post it here.

More Posts

Our Sponsors