9/6/2010
LifeCycle Solutions - Home ( the software development blog )
 

<February 2008>
SunMonTueWedThuFriSat
272829303112
3456789
10111213141516
17181920212223
2425262728291
2345678

Subscribe to this feed:

RSS 2.0 | Atom 1.0 |CDF






Thursday, February 14, 2008

For one of our clients, I've been working on converting printed forms into web forms, and in the process have been dealing with a lot of tables that need to fit within a fixed width.  These tables are in a FormView in a User Control, which are then placed on webpages as needed.  I was finding that Visual Studio 2008's design mode was happy enough to accept my fixed-width columns and tables settings in my CSS stylesheet when working on the User Control, but once that User Control is placed on an actual page the fixed-width settings are no longer respected in both design mode and in debug mode displayed through a browser.  What to do?  After much frustration I found the embarrasingly simple answer: I wasn't putting "px" at the end of pixel measurements for table/column widths.  For whatever reason the Visual Studio 2008 FormView designer was content without the "px" but nothing else was.  In my rush to get things working I was leaving off the "px" figuring that I could go back later and add them on after the fact.  So lesson learned: be standards compliant, even if your development tool of choice lets you get away with not being standards compliant.

Still on the topic of fixed-width tables and columns, have you ever wanted to figure out exactly how many pixels wide/tall something is on a webpage, be it a table row, table column, header graphic, etc.?  Enter Pixel Ruler--a free app that displays a rotatable ruler on your screen and even tracks your mouse cursor and keeps a running measurement of how many pixels away you are from the zero mark on the ruler (in one dimension of course--it doesn't do diagonal measurements).  This app will save me countless hours of eyeballing and hoping for the best, instead providing me with precise measurements to the pixel.

Posted by Yohan Pamudji

Wednesday, December 12, 2007

One of the fun things about working at LifeCycle is the constant exposure to a wide range of technologies.  We have clients in just about every vertical market you can name, so we see a variety of "cool stuff" on a regular basis.  For example, one of our clients, Global Security Systems, offers an emergency communications solution called ALERT FM

ALERT FMALERT FM is a product created out of necessity -- after Hurricane Katrina hit in 2005, the founders of Global Security Systems knew there had to be a better way to get emergency information out to people.  In many areas, the communications infrastructure was partially or completely destroyed; however, even in the hardest-hit areas, most people could still get information through their FM radio stations.  Building on this, the company created GSSNet, a network of existing FM radio stations that could be used to transmit data over the FM airwaves. 

Global Security Systems now offers ALERT FM, a suite of tools for sending and receiving messages over the GSSNet backbone.  For receiving alert messages, the company currently offers an inexpensive battery-powered receiver, a USB stick with a built-in ALERT FM receiver and a wall-mounted device that can be used in schools and businesses.  Out of the box, users can receive weather alerts and other important information for their area.  For sending alert messages, the company offers a personalized web portal to state/federal/local government and businesses in the private sector.  Government users, like state and county emergency agencies, can generate their own alert messages to be broadcast in their area (e.g. notifying people to stay away from an area due to a hazardous chemical spill).  Companies in the private sector can also use the portal to send out their own "private" alerts, making ALERT FM a good solution for companies concerned with alerting their employees in the event of a disaster.

If your company is formulating a disaster recovery or business continuity plan for 2008 and beyond, you should get in touch with ALERT FM -- it's a very effective way to quickly broadcast information to your employees when other means of communication aren't available.  ALERT FM is one of the coolest things we've had an opportunity to be a part of in 2007.

Posted by Brian Parks

Tuesday, December 11, 2007

I recently had an ASP.NET project with the following requirements:

- Build 2 CSV files from SQL Server data based on parameters specified by the user
- Build a ZIP archive containing these files and allow the user to download

It's been a while since I'd worked with ZIP archives in ASP.NET, so I thought I'd share the solution.  One of the best libraries I've found for creating a wide range of compressed files is SharpZipLib. There are numerous examples of compressing files located in the file system with SharpZipLib, but this project required me to build the archive in-memory in order to avoid unnecessary disk I/O.  Here's how it's done:

string summaryResult = BuildOrderSummary(); string detailResult = BuildOrderDetail(); string fileName = "Orders.zip"; Encoding ascii = Encoding.ASCII; MemoryStream memOutput = new MemoryStream(); ZipOutputStream zipOutput = new ZipOutputStream(memOutput); zipOutput.SetLevel(5); //convert the strings into byte arrays byte[] headerFile = ascii.GetBytes(summaryResult); byte[] detailFile = ascii.GetBytes(detailResult); ZipEntry summaryEntry = new ZipEntry("OrderSummary.csv"); ZipEntry detailEntry = new ZipEntry("OrderDetail.csv"); //add the summary file to the ZIP archive summaryEntry.Size = headerFile.Length; zipOutput.PutNextEntry(summaryEntry); zipOutput.Write(headerFile, 0, headerFile.Length); //add the detail file to the ZIP archive detailEntry.Size = detailFile.Length; zipOutput.PutNextEntry(detailEntry); zipOutput.Write(detailFile, 0, detailFile.Length); //clean up the ZIP stream zipOutput.Finish(); zipOutput.Close(); //clean up the memory stream memOutput.Close(); //send the ZIP file back to the user Response.ContentType = "application/zip"; Response.AddHeader("content-disposition", "attachment; filename=" + fileName); Response.BinaryWrite(memOutput.ToArray()); Response.Flush(); Response.End();
Posted by Brian Parks

Wednesday, October 31, 2007

We recently ran into an issue concernig an Automatic Security update for Windows 2003 and WSS 3.0.  The customer's SharePoint site became inoperative and displayed a 'Cannot connect to the configuration database' error.  The server Application Log showed a Windows SharePoint Services error of 'Unkown SQL Exception 33002' - 'Access to module dbo.proc_getObjectsByClass is blocked because the signature is not valid.'  Turns out that this was caused by a security update for Windows SharePoint 3.0 reference KB934525.  If this patch is applied you have to run psconfig -cmd upgrade -inplace b2b. This utility can found under Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\Bin .  Please reference KB934525.

 

Ron

Posted by Ron Taylor

Wednesday, October 17, 2007

One technique we've started using is automating our apps' configuration using Pre-Build Events and Build Configurations in Visual Studio.  It takes a little more work to set up, but once you do, publishing test and production apps is much easier.  It also helps the developer to think not just about a "works on my machine" app, but an app that works on any number of scenarios.  Without this approach, the developer still has to keep up with multiple config files, but typically does so in their head. Scott Guthrie has a great post showing how all this is done.  However, a few tips will help you fine tune your automation, so that development is even more painless:

  • Decide the different scenarios your app will run in.  In our case there are typically 3:
    • Local - App is being developed and running on the developers' PC
    • Staging - App is being tested in a copy of the production environment
    • Production - App is "live".
  • Create a folder named Configuration.
  • Create a .config file for each scenario above.
    • Name the .config file scenario.web.config or scenario.app.config (ie local.web.config).  Using this approach over Scott's means you still get intellisense in the .config files!
    • If you have an existing .config file, just copy it to the Configuration folder and rename it as above.  Remember that after this is set up, the "real" .config file will be overwritten.  If you put blank .config files in Configuration, you'll loose the "real" configuration file.
  • Create Build Configurations in Configuration Manager for each scenario above. 
    • In each configuration, add the following Pre-Build event
    • IF EXIST "$(ProjectDir)Configuration\$(ConfigurationName).web.config" xcopy "$(ProjectDir)Configuration\$(ConfigurationName).web.config" "$(ProjectDir)\web.config" /Y /R

    • This script accomodates the naming schema above, and works with source control by overwritting the read-only .config file. Note if your project is a windows forms, console, or class library app, change "web.config" to "app.config"

And that's it - before each build, the appropriate config file will be copied over and used.  Note that you'll never want to change the .config file in your project's root, as it will be overwritten.  Instead, whenever you need to change configuration, decide how the change will affect each scenario, and change each .config in your Configuration folder.

Posted by Daniel Root

Tuesday, September 18, 2007

We’ve been getting more into SharePoint and Reporting Services lately.  In their 3rd versions, these products have matured a good deal and are great solutions for many of our clients.

 

I recently ran across an odd issue with Reporting Services, though, where a site containing a .rdlc report would compile fine on my laptop, but on our build server, it failed with the error:

 

error MSB4062: The "Microsoft.Reporting.RdlCompile" task could not be loaded from the assembly Microsoft.ReportViewer.Common, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a. Could not load file or assembly 'Microsoft.ReportViewer.Common, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified. Confirm that the <UsingTask> declaration is correct, and that the assembly and all its dependencies are available

 

At first I assumed the problem was that Reporting Services wasn’t installed, but even after installing that, the error persisted.  Googling “Microsoft.Reporting.RdlCompile” came up empty.  After a little digging, though, I came across Microsoft’s guidance on deploying reports and viewer controls, which reminded me that the report viewer has a separate installer.  I ran the bootstrap package in C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\BootStrapper\Packages\ReportViewer\ReportViewer.exe on our build server, and the build cleared up.

 

Posted by droot@lifecycle-solutions.com

Wednesday, June 13, 2007

I promised myself I wouldn't buy a Windows Presentation Foundation book until it was fully baked into Visual Studio - with a real designer and freedom from angle-brackets. I know how I am - I was mutzing around with DataGrams before they became DataSets, and ObjectSpaces before they became, well, nothing. I'm an early adopter, and sometimes that's a Bad Thing when it comes to real-world projects and timelines.

But then Surface came out, and I just couldn't wait. I downloaded Expression Blend May 2 Preview and on Scott Guthrie's recommendation, bought Windows Presentation Foundation Unleashed and Essential Windows Presentation Foundation.

The short review: WPF Unleashed rocks, get it. Essential WPF is decent, but not as good as Unleashed.

The longer version: Unleashed is full color- including the code samples- and this makes it much more readable. It does a good job balancing samples and content, and explaining why things in WPF work the way they do. I read Essential WPF second, and so maybe had higher expectations. I do like this Microsoft Development series (Framework Design Guidelines is a must-read for all .NET developers), but this just paled next to Unleashed, and didn't really add or explain much more.

The one criticism I have for both books is that I'd like to see more of the whiz-bang examples that makes WPF shine. Unleashed includes a sample Photo Browser app that comes close, but still lacks the 'Wow' that Surface and Silverlight demos are bringing. Some of that is a matter of design principals that fall out of the scope of a technical overview, but this raises my main fear with WPF. Putting this sort of thing in the hands of developers will often lead to trouble. I still cringe when I have to install a video card CD, since I know they've come up with their own goofy UI that will be slower and uglier than a plain WinForms UI. Some effort in these early books to urge restraint and introduce usability and design concerns could help some of us early adopters.
Posted by Daniel Root

Saturday, May 19, 2007

I sat for hours in Design 101 trying to get a even coats of cadmium red, cadmium yellow medium hue, and pthalo blue acrylic and their various combinations in perfect circles to learn the basics of complementary colors and other ins and outs of color theory.  Now several years later, it all comes back to haunt me with Adobe's Kuler.  I've seen several for-pay downloadable apps to do this, but Kuler is free and web-based (Flash).  Simply pick from a library of pallets or generate your own using a variety of color relationships.  Use with Firebug for quickly knocking out CSS color schemes.

Posted by Daniel Root

Wednesday, May 09, 2007

FireBug is an amazing web development plugin for FireFox.  Like Web Developer Plugin, it lets you tweak HTML, CSS, and JavaScript on the fly.  However, it also bakes in features like visualizations to make sense of CSS and deeply nested elements easily.  It also gives you a nice drill-down report of network traffic, so you can see exactly how much each element contributes to the total page size, which is great when you're trying to trim those extra Kb off your pages.  The UI is very well thought out and easy to understand. 

Hang on to Web Developer Plugin for the validation features, but this is definitely a must have for your web development toolbox.

http://www.getfirebug.com/

Posted by Daniel Root

Thursday, May 03, 2007

One of the more exciting things going on in the Microsoft development world is the upcoming release of Silverlight.  Silverlight is (or soon will be) Microsoft's answer to Adobe's Flash and Flex products.  Silverlight technology is powered by the .NET framework in the form of a trimmed-down CLR (CoreCLR) that runs on both Windows and Mac -- Scott Hanselman has a pretty good summary of the product and its associated jargon here.
Based on the early examples, I think Silverlight will quickly achieve the ubiquity that Flash has enjoyed; hopefully it will stir the interest of .NET developers who have avoided Flash in the past and drive the development of some really useful applications.  There's also a good DotNetRocks podcast available in which Brad Abrams discusses the philosophy behind Silverlight and gives some glimpses of its future direction.

Posted by Brian Parks

© 2006 LifeCycle Solutions, LLC | All Rights Reserved