navigation
 Monday, September 17, 2007
San Jose, CA – September 17th 2007 - Software Architect Steve Trefethen passed his first Microsoft certification exam last week to become the latest Falafel team member to be Microsoft Certified. “I am very excited to see the entire falafel team Microsoft certified again” said Lino Tadros, President & CEO of Falafel Software “Steve, is a high caliber Architect and I look forward to seeing him continue to pass the Microsoft certification exams to reach the highest level of their certifications.”
posted on September 17, 2007  #    by Lino Tadros  Comments [0]
Here is an interesting thing I noted the other day. I have an ASP.Net 2.0 application, and in one of the forms, I store the search criteria that you enter on that page in an instance of my ScheduleSearchCriteria class:
posted on September 17, 2007  #    by John Waters  Comments [0]
 Saturday, September 15, 2007
San Jose, CA - September 14th 2007 - Falafel Software is excited to announce the first update to ActiveFocus 2007 Q2, which adds a much asked for filtering capability to most of the columns in the main artifact grids, and a rewrite of the discussion component, designed to make project and artifact level discussions even easier to use. The release also includes some bug fixes and minor changes, see the release notes here for more details. A free one-user trial version of the new release is available for immediate download from the Falafel community site and Falafel’s demo site is also running the new version. You can take if for a spin at www.activefocus.net/afdemo. Our hosted sites are upgraded to the new version as of today. Please check our roadmap here for details of the next release scheduled for Q3.
posted on September 15, 2007  #    by Lino Tadros  Comments [0]
 Thursday, August 30, 2007
I was debugging some ASP.Net 2.0 code that renders a PDF to the response buffer of a page request, using code like this (byte[] bytes is the PDF file, which was rendered using Microsoft Reporting Services Web Service interface) :
posted on August 30, 2007  #    by John Waters  Comments [0]
 Wednesday, August 29, 2007

Falafel software is proud to announce the successful launch of version 2.0 of its custom built ERP system Velocity. Velocity handles billions of dollars of business for America’s leading organic produce company. Version 2.0 provided a rewrite of key parts of the user interface, using Web 2.0 technology like AJAX and Web Services to provide the data entry performance of a desktop application combined with the ease of deployment and central manageability of a web application. The system handles hundreds of users, hundreds of thousands of sales orders and invoices, and provides 24/7 availability and high performance using a scale-out Microsoft architecture.

posted on August 29, 2007  #    by Lino Tadros  Comments [0]
 Monday, August 27, 2007
If you need to share resources across multiple pages you can use global resources as opposed to the local resources shown in the previous blog. Global resources are implemented using explicit binding, i.e. server tags like this one:
posted on August 27, 2007  #    by Noel Rice  Comments [0]
Discover some strange but sadly true limitations of the Virtual PC support for ISB devices...
posted on August 27, 2007  #    by John Waters  Comments [1]
 Saturday, August 25, 2007

I had the privilege of attending a two-day training for Expression Design and Expression Blend this week in San Jose, CA.  The trainer, Joshua, was knowledgeable and fun to learn from.  We enjoyed his training and personality.

Unfortunately, the product is just NOT ready for prime time.  I was shocked! Really shocked! Poor guy had to apologize almost every three minutes for two days on how the product works and why he has to do things in a very awkward way to get it to behave.
First the IDE is not intuitive at all.  I thought, hey I am a developer, maybe this is just not for me, but all the designers in the room were shaking their heads as well.

There was total confusion between canvas and layers in Blend, disturbing implementation for differentiating between selection and scope that could easily waste hours of work. There lacked in the IDE a clear path to redirect the effort to the correct path.
Look at the Trigger clickable button in the IDE in the picture below.

image

I thought you click that to access the Trigger page, nope, if you click on that Trigger button, you will delete the only trigger you have on your WPF form.  Who designed this IDE?
Yes I can see now the + sign and the minus sign but that is just not the way it is done guys.
At some point the IDE will be so cluttered with docked windows that it rendered the experience of working in the IDE totally useless.
You can save your designs as .Design files in Expression Design and export the XAML to Blend. That is a one way street; blend can not send the xaml back to design.  Expression Design does not know anything about .XAML files either and can not open them.  Just make them!
The scrollbar in the properties window disappears often and the user can no longer get to the properties off the screen space currently visible. Eventually, resizing the docked windows brings back the scrollbar.
Modifying XAML code in the editor sometimes does not reflect the change in the designer unless you close down the project and reopen.
Ok, that is enough, you get the picture.  Great idea, powerful product, long way to go to get it to be productive and useful.

posted on August 25, 2007  #    by Lino Tadros  Comments [0]
 Monday, August 20, 2007

ASP.NET 2.0 has a rich set of localization features built-in. Early in the ASP.NET 1x lifecycle we "rolled our own" using an HTTP handler that reflected for a [localize] tag, looked up the control name in a resource file and assigned the localized value.  I prefer out-of-the-box solutions though when available and the MS resource provider model approach provides enough flexibility to be worthwhile.

ASP.NET 2.0 Localization adds two new resource flavors: local and global resources.  Local resources are used for controls on a specific page. The resources are located in the ASP.NET App_LocalResources folder with the same name as the page you're localizing.  So, if you're translating default.aspx then your App_LocalResources might also contain default.fr-FR.resx with a French translation. Global resources are contained in App_GlobalResource and can be used anywhere in the application.

You bind resources to your controls using explicit or implicit expressions. Explicit expressions use an inline server syntax similar to the data binding syntax you're already familiar with.  Implicit expressions syntax use a "<meta>" tag in the control you're localizing to identify the resource.

Local Resources, Implicit Expressions

It all makes more sense in practice so here's a basic walk-though using local resources with implicit expressions:

  • Create an ASP.NET web application.
  • Add a TextBox control to the default form.
  • While you're on the page to localize (default.aspx in this case), select Tools |Generate local resources. This step has a number of effects. 
    • An App_LocalResources folder appears populated with "Default.aspx.resx". 
    • In the Source view, the ASP.NET markup page tag will have a Culture="auto" attribute added. The value of "auto" lets the application react to the browser language settings.
    • In the ASP.NET HTML markup for the control will have a "meta:resourcekey" attribute added:

      <asp:TextBoxID="TextBox1" runat="server" meta:resourcekey="TextBox1Resource1"></asp:TextBox>

      This identifies a single element in the ASP.NET HTML markup.  If there are other nested elements, each needs to be marked with a "meta:resourcekey" attribute before you can implicitly bind to them (as when you have BoundField elements within a GridView for example).  The general rule is, if the element is qualified with a namespace, it needs a "meta:resourcekey" attribute.

    • The properties are marked with an icon that show they are implicitly bound.

image

  • Double-click default.aspx.resx to edit the resource. This will contain resources for the page as a whole and for any controls on the page. The naming convention for resources is <resourcekey>:property name (you typically don't have to know that, but if localization support for a component is incomplete you can still add the "meta:resourcekey" tags by hand). Add text for the page title and TextBox Text property.

Resource for Default.aspx

  • Copy default.aspx.resx to default.aspx.fr-FR.resx.
  • Edit the values in the resource file to French translations.  You can use a tool like Google Translate to get a fair approximation of what the translation should look like. I wouldn't use it as a production tool though unless you want chuckles from the target audience (try translating to and from the target language a few times and you'll see what I mean). 

image

  • Run the application.  Assuming Internet Explorer as your browser, go to Tools | Options | Languages.  Select the "fr-FR" culture code, then refresh the page and Voila! (or "Blick dort!" or "sguardo là!".  Hmm, sure hope I'm not insulting anyone).

image

Slightly More Complex Scenarios

The same pattern works for more complex objects, such as GridView.  Notice there is a "meta:resourcekey" for the grid and also for each of the BoundField objects.

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="SqlDataSource1" meta:resourcekey="GridView1Resource1"> <Columns> <asp:BoundField DataField="ProductName" HeaderText="ProductName" meta:resourcekey="BoundFieldResource1" SortExpression="ProductName" /> <asp:BoundField DataField="UnitsInStock" HeaderText="UnitsInStock" meta:resourcekey="BoundFieldResource2" SortExpression="UnitsInStock" /> </Columns> </asp:GridView>

Again, you can bind to any resourcekey/property name combination:

image

And because the page Culture is set to "Auto", you can change the browser language settings and the translated text is displayed automatically:

image

 

The localization facilities built-in to ASP.NET 2.0 should save you some time if they fit your requirements.  If you need a heavier weight solution that uses a database (or other data store) instead of XML to store resources, check out this article by Jeff Modzel "ASP.NET 2.0 Custom SQL ResourceProvider".

posted on August 20, 2007  #    by Noel Rice  Comments [0]