RSS
 

Archive for the ‘.Net’ Category

“How we built Rover” – Cross post

19 Feb
Over at my employer's website I've blogged about the system I've been spending the past few months working on. I talk a little bit about Xamarin, SQLite, Swagger and GraphViz DSLs
 
No Comments

Posted in .Net

 

Creating tiled backgrounds in Metro style XAML apps

20 Jul
TL;DR version: This class will let you tile an image in a Metro-style XAML app. Use an image that's at least 128x128 for best memory efficiency Textures can make your application beautiful. Here's an example from http://subtlepatterns.com, which is full of classy textures: [caption id="attachment_285" align="aligncenter" width="600"] A nice tile texture[/caption] These textures can make great backgrounds, but because the texture is usually smaller than your application (especially tiny textures like  ), you need to repeat (tile) the image vertically and horizontally. Images that "match up" on opposite sides are ideal. All the images on  http://subtlepatterns.comhttp://bgrepeat.com and http://www.repeatxy.com are tileable. So how do you program your application to repeat this image across a surface? In HTML, you can use the css style "background-repeat: repeat" to tile an image across your webpage. In WPF, you can set up the TileBrush properties on an ImageBrush to tile an image across your application. But in Silverlight, Silverlight for Windows Phone, or Metro style XAML applications, you're out of luck.

Fake it

The easiest solution is to use Photoshop (or cheaper equivalent) to create a huge image that you can set as a background. Just use the pattern tool to tile your texture onto an image that's bigger than your application's surface will ever be. The question is: can you guarantee a maximum size? With Metro style XAML applications,  there is no maximum resolution. The other problem is that these massive image files tend to use up a LOT of memory. In my case, it was so much memory that I was likely to fail Microsoft's Win8 certification.

Make it

There was no way I was going to convert my application into a JavaScript & HTML app, so I set out to create a control that would look just like a WPF tiled brush. The easiest way to do this is to manually arrange a set of images in a control. I'm very familiar with WPF, and I just knew there'd be some weird inconsistencies in the new WinRT APIs that made this harder than it should be, so I decided to spike this in WPF first. I inherited from Canvas, gave it an ImageSource property, and slapped my code into the OnRenderSizeChanged method. It worked perfectly, here's the code: [gist id=3077863 file=TileCanvas.cs]

I broke a convention :(

If I was a WPF Purist I would have never extended a Panel class in order to provide a visual control. I'd have built a templated control (Inheriting from Control), and declared the canvas as a template part, and provided a default template that just contained that canvas in my Generic.xaml file. But my whole aim was to keep memory usage low, and in WPF every visual costs you memory, so I decided to pre-optimise. It's also simpler this was as I only have to show you one file :).

Optimising Memory

A tilebrush in WPF on a 1000x800 surface will happily repeat a 4 pixel image for you, thousands of times (200,000 to be exact), without breaking a sweat. However, with my TileCanvas, we're creating an Image visual every time we want to repeat the tile, so you don't want an ImageSource that's too small. You have to find a happy balance between a huge image (which uses up a lot of memory by itself) and a lot of small images (where you don't keep paying for the image data, but you do pay for the visual tree explosion). I have found that by repeating your pattern, Photoshop style, onto an image that's a sized with a nice round number like 128x128 pixels is a good compromise. This applies to the WPF spike as well as the following Metro solution.

Make it - Metro Style

If you want to build a Metro Style application, you need to program against the WinRT API. This provides .NET developers with new challenges. Microsoft say that WinRT allows .NET developers to use their existing skills, which is fair. What they don't mention is that you're going to need a lot of new knowedge. WinRT is like a parallel universe - a lot of the things you expect to find are there, but they are a bit different, or they're in a different place. A lot of operations are now done asyncronously, which should be make apps snappier. Truly a "parallel" universe (sorry). When I tried to port my WPF TileCanvas over to use the WinRT version of XAML controls, I ran into two differences that changed the way I had to do things:
  • There's no longer a RenderSizeChanged method - after a bit of experimenting, I decided on the LayoutUpdated event (although adding images causes this event to be raised, so I had to track the old size in order to avoid stack overflow)
  • ImageSources now start with a width and height of 0. It's not until the ImageOpened event is raised that you can find out the width and height of an image. And you don't get an ImageOpened event until your image is loaded into the Visual Tree. To get around this chicken-and-egg situation, I add a single image to the canvas, and then once it's opened and I have the width & height I do a proper layout of the whole screen. I also attach to the ImageFailed event to help you debug, and clean up my event subscriptions once they've fired.
Here is my working Metro-style TileCanvas: [gist id=3006848 file=TileCanvas.cs]

Almost perfect?

One thing that I would add in future would be to not throw away the entire canvas of images every time it was built. It would be better to determine just how many images need to be added and removed. At the moment, this isn't a big issue because metro apps are always fullscreen so they don't change size unless you snap/rotate them.

Shameless plug

I needed this class because I wanted a background texture in my new Windows 8 game, Chromazone. It's just been accepted my Microsoft to the store, check it out: http://apps.microsoft.com/webpdp/en-US/app/chromazone/fe3aea27-d44f-43e0-8662-1c45178e4dec
 
 

Raising the right PropertyChanged with C# 5’s Caller Info Attributes

21 Sep
Implementing INotifyPropertyChanged typically requires the use of magic strings, and I've never been happy with the various workarounds available. They either affect performance or require a lot of extra developer ceremony (which is no good in big teams). I'd always been hoping that C# would introduce something similar to the "typeof" operator that would help you get the name of the current property (or method) without having to use any slow reflection. Before the "//BUILD/" conference, I had given up on C# 5 bringing in anything useful here. But then I was reading Colin Jack's summary of the //BUILD/ talk on Future directions for C# and Visual Basic, and was particularly interested by the new Caller Info Attributes feature of C# 5. This feature is not in the CTP of VS11 yet, so I can't test it, but I expect you'll be able to write the following RaisePropertyChanged method:
protected void RaisePropertyChanged([CallerMemberName] string member = "")
{
    var copy = PropertyChanged;
    if(copy != null)
    {
        copy(new PropertyChangedEventArgs(this, member));
    }
}
and now when you call this method from a property setter, leaving out the optional parameter:
public string UserName
{
    get
    {
        return _userName;
    }
    set
    {
        _userName=value;
        RaisePropertyChanged();
    }
}
the compiler will fill out the parameter for you, passing "UserName" to the RaisePropertyChanged method. What I like about this is that the compiler is creating the magic string for you on every compile - so when you rename your property, the string is automatically kept in sync. This is the best of both worlds, we get the performance benefits of a hardcoded string literal, while keeping everything DRY (and therefore hard to inadvertently break).  
 
22 Comments

Posted in .Net, WPF

 

There’s a maximum of 255 local messaging channels in Silverlight 4

31 Jan
Don't ask me how I got into this situation, but I found this out the hard way. A quick search will tell you that with Silverlight Local Messaging each message has to be under forty thousand characters, but I haven't found anything on the internet yet that tells you that you can have a maximum of 255 channels open at a time. So I'm taking responsibility and putting it out there. Going over the limit will give you a cryptic COM exception, and channels can be "leaked" if one browser process crashes while another is open (for example iexplore.exe and chrome.exe, or just two instances of chrome.exe). Often closing all browsers will clean up the phantom channels, but not always. Remember that other Silverlight applications might be using some of these channels too, so you should always design your application such that it uses a minimum number of channels.
 
 

Buy Seroquel From Trusted Pharmacy

12 Nov

I've just released a new open source project on codeplex: http://powerassert.codeplex.com

Power Assert .NET is a .NET port of Groovy's PowerAssert Buy seroquel from trusted pharmacy, , which replaces your normal unit test assertions.

Unlike the standard assertions built into nunit, seroquel paypal, Seroquel in us, MSTest, and xunit etc; Power Assert gives you a breakdown of all the values within your assertion expression, buy seroquel without prescription, Where can i buy cheapest seroquel online, making it quicker for you to hunt down the cause of the test failure:

System.Exception : IsTrue failed, expression was:
x + 5 == d.Month * y
| | | | | | |
| | | | | | 6
| | | | | 18
| | | | 3
| | | 01/03/2010 00:00:00
| | False
| 16
11

It's quite a simple little thing, fast shipping seroquel, Buy seroquel from mexico, but it's already saved me lots of debugging time. Give it a go :), buy seroquel without a prescription. Order seroquel from mexican pharmacy. Buy seroquel from canada. Saturday delivery seroquel. Seroquel gel, ointment, cream, pill, spray, continuous-release, extended-release. Seroquel tablets. Purchase seroquel online no prescription. Seroquel medication. Buy no prescription seroquel online. Order seroquel online c.o.d. Where can i order seroquel without prescription. Seroquel prescriptions. Seroquel to buy. Online buy seroquel without a prescription. Seroquel over the counter. Seroquel prices. Real brand seroquel online. Purchase seroquel online. Seroquel in uk. Where to buy seroquel. Seroquel in mexico. Seroquel craiglist. Order seroquel from United States pharmacy. Seroquel san diego. Rx free seroquel. Purchase seroquel. Seroquel from international pharmacy. Ordering seroquel online. Buy cheap seroquel no rx. Seroquel pills. Where to buy seroquel. Buying seroquel online over the counter. Buy seroquel online without a prescription. Where can i find seroquel online. Buy seroquel no prescription. Sale seroquel. Seroquel trusted pharmacy reviews. Where can i buy seroquel online. Order seroquel online overnight delivery no prescription. Free seroquel samples. Sale seroquel. Where can i buy cheapest seroquel online. Seroquel discount. Seroquel in australia. Purchase seroquel online no prescription. Seroquel prices. Seroquel in usa. Seroquel buy online. Seroquel in canada. Over the counter seroquel. Seroquel pills. Buy seroquel online with no prescription. Seroquel to buy. Buy seroquel without a prescription. Purchase seroquel online. Online buying seroquel hcl. Buy seroquel without prescription. Buy seroquel online without a prescription. Order seroquel online c.o.d.

Similar posts: Buy tramadol from trusted pharmacy. Where can i order ultram without prescription.
Trackbacks from: Buy seroquel from trusted pharmacy. Buy seroquel from trusted pharmacy. Buy seroquel from trusted pharmacy. Buy seroquel from trusted pharmacy. Buy seroquel from trusted pharmacy. Buy seroquel from trusted pharmacy. Buy seroquel from trusted pharmacy. Buy seroquel from trusted pharmacy. Buy seroquel from trusted pharmacy. Buy seroquel from trusted pharmacy. Online buy seroquel without a prescription. Buy seroquel online cod. Buy seroquel online cod. Real brand seroquel online. Real brand seroquel online.

 
1 Comment

Posted in .Net, Testing

 

Buy Soma From Trusted Pharmacy

12 Nov

One of the new .NET technologies that is really exciting to me these days is the Reactive Extensions to .NET (RX) Buy soma from trusted pharmacy, . Sometimes it's called LINQ to Events, soma craiglist, Buy soma no prescription, because you can write LINQ queries against future values (events, nicely wrapped up into the IObservable<T> interface), buy no prescription soma online, Buy soma online no prescription, instead of against existing collections (IEnumerable<T>). This technology is especially useful in stateful programming models, where can i order soma without prescription, Order soma no prescription, such as when you're building ViewModels for WPF or Silverlight. Once you start programming with RX (although it's got a steep learning curve!), where can i find soma online, Soma in india, you start to see lots of places where it would really help make your code simpler. I saw one such place: whenever you need to programatically respond to an INotifyPropertyChanged notification, soma from canadian pharmacy.

INotifyPropertyChanged


INotifyPropertyChanged is an interface that most viewmodels need to implement, buy soma from trusted pharmacy. Next day soma, It's used implicitly by the Silverlight and WPF data binding system to register a databinding's interest in the fact that a property has changed, thus keeping all bindings to the same property up to date, soma in japan. Soma paypal, When you implement it, you're responsible for firing a PropertyChangedEvent event every time a property changes, buy soma online without prescription, Fast shipping soma, with the name of the property as a parameter to the event.

Sometimes, soma tablets, Soma for sale, you might want to programatically watch changes to a property too. Imagine a screen where users can add rows of data that represent orders, soma san diego. Buy soma from trusted pharmacy, If there needs to be a "grand total" on the screen, then one viewmodel (possibly the root VM for the whole screen) will want to subscribe to the PropertyChanged event of each of the order's Viewmodels. Order soma from United States pharmacy, However, there's a nicer programming model for listening to updates (events etc) than the INotifyPropertyChanged event.., buy soma from canada. Order soma online overnight delivery no prescription,

IObservable


IObservable is the core of all RX programming (like IEnumerable is to LINQ). If you want to expose a source of data, soma medication, Ordering soma online, you need to expose an IObservable. There's already a utility method to turn an event into an IObservable, soma over the counter. But this Observable will publish IEvents, which isn't quite what I was after, buy soma from trusted pharmacy. Buy soma online cod, What I wanted was to create an IObservable of the new values of the viewmodel's property. Just like LINQ, delivered overnight soma, Soma from international pharmacy, we can use the "Select" method to acheive this.

Funcy Expressions


An Expression is a C#3 construct that allows you to pass expression trees around, buy generic soma. Real brand soma online, This is a very popular way for you to strongly type property names, because you can reflect over an Expressionwhere to buy soma, Soma to buy online, PropertyType>> to get the name of the Property. Buy soma from trusted pharmacy, You can also Compile() the expression to be able to execute it. My method uses both of these: It needs to know which PropertyChangedEvents it should react to (the Where() clause), buy cheap soma no rx, Where can i buy soma online, and it needs to read the new value out (the Select() clause).

The tests

Here are the unit tests for this extension method, where to buy soma. Soma in mexico, I had to create a dummy view model class to test, named "PropertyChanger", online buy soma without a prescription. Soma in us, Note how you can supply "true" to the startWithCurrent parameter to make sure your subscription will instantly start with the current value of the property, as well as receiving new values whenever a PropertyChangedEvent is fired, soma trusted pharmacy reviews. Soma in uk,

Enjoy. Buying soma online over the counter. Buy soma from mexico. Soma overseas. Saturday delivery soma. Soma gel, ointment, cream, pill, spray, continuous-release, extended-release. Order soma from mexican pharmacy. Soma price, coupon. Soma prescriptions. Rx free soma. Purchase soma. Cod online soma. Buy cheap soma. Soma for sale. Buy soma no prescription. Purchase soma online. Soma medication. Buy soma online without a prescription. Purchase soma. Order soma no prescription. Order soma from mexican pharmacy. Buying soma online over the counter. Where to buy soma. Ordering soma online. Buy soma online without prescription. Soma craiglist. Rx free soma. Where to buy soma.

Similar posts: Buy yaz from trusted pharmacy. Tramadol in usa.
Trackbacks from: Buy soma from trusted pharmacy. Buy soma from trusted pharmacy. Buy soma from trusted pharmacy. Buy soma from trusted pharmacy. Buy soma from trusted pharmacy. Buy soma from trusted pharmacy. Buy soma from trusted pharmacy. Buy soma from trusted pharmacy. Buy soma from trusted pharmacy. Buy soma from trusted pharmacy. Soma in canada. Buy soma without prescription. Soma in japan. Soma discount. Online buy soma without a prescription.

 

Buy Tramadol From Trusted Pharmacy

18 Dec

Thanks to Karl Shifflet and Unni Ravindranathan Buy tramadol from trusted pharmacy, , I've finally gotten my head around a superior method of populating Blend (and VS 2010's WPF designer) with sample data. This method, buy tramadol without a prescription, Tramadol price, coupon, which I am going to call the "DesignData build target", has the following advantages:


  • Blend will render your control as though it's running with real data, tramadol craiglist, Tramadol gel, ointment, cream, pill, spray, continuous-release, extended-release, as you design.

  • You won't have to look up and type magic strings when you're creating your bindings in Blend, Blend will be able to list the possible properties for you, order tramadol online c.o.d. Tramadol in canada, Intellisensational!

  • Once compiled, your output dll will have NO baggage associated with your designery frivolities.

  • You don't have to write lots of dummy / mock / stub code

  • You don't even have to finish writing your viewmodel: however you DO have to write all your properties, sale tramadol. Buy generic tramadol, This is a Good Thing, because it means your bindings will have the right magic strings in them.


How does it work?


First, buy tramadol online no prescription, Tramadol in us, you need a xaml file that builds up a sample instance of your viewmodel. Then all you have to do is set your Blend-specific DataContext to read from that file, buy cheap tramadol no rx.

How do I tell Blend where to get this design data?


I've already blogged about the d:DataContext attribute, letting you set up a DataContext but only inside Blend, buy tramadol from trusted pharmacy. Fast shipping tramadol, Another secret of the "d" xml namespace* is the {d:DesignData Source=someDesignDataFile.xaml} markup extension. So all you need in your UserControl or Window's xaml is (usually on the first element):

d:DataContext="{d:DesignData Source=someDesignDataFile.xaml}"

Karl's blog post explains this in a little more depth, tramadol san diego. Tramadol tablets,

What should be in this design data xaml file?


Just like you usually declare and populate a Window or UserControl, you can actually declare and populate your own view-models as the root element of a xaml file, online buying tramadol hcl. Tramadol to buy online, I got myself quite confused when I started working with this, because i didn't realise that the root element of the xaml file should be a declaration of your viewmodel (I was actually placing my viewmodel within a ResourceDictionary >< ):

image

Here you can see I've defined a new ScrumBoardDesignDataDemo.ViewModel.Board, tramadol in usa, Tramadol trusted pharmacy reviews, and started assigning some StageNames to it. Buy tramadol from trusted pharmacy, I've used the clr namespace of my viewmodel classes ("ScrumBoardDesignDataDemo.ViewModel") as the default xml namespace, instead of using what xaml files usually give you: the WPF control namespace. This just cuts down on the amount of typing required, tramadol in japan. Delivered overnight tramadol, Normally, if you're trying to instantiate a class without a public, buy tramadol from canada, Saturday delivery tramadol, parameterless constructor in xaml, you'll get a compiler error, buy cheap tramadol. Tramadol over the counter, You also won't be able to set properties that don't have public setters. This technique allows Blend to do a bit of magic (reflectively creating a doppelganger of your class) that means you can bend the rules a little, tramadol for sale. More on that in my next post, buy tramadol from trusted pharmacy. Buy no prescription tramadol online, Let's just concentrate on getting some sample data into Blend.

By now, tramadol from international pharmacy, Purchase tramadol, if you go into Blend and you try to set up a binding through the binding dialog (you get this by clicking on the peg next to a property, say ItemsSource, purchase tramadol online no prescription, Tramadol overseas, and choosing Binding), you'll get  this helpful dialog:

image

See how the "Fields" tree is populated, tramadol prices. Tramadol in uk, That's Blend's version of intellisense, which means you no longer have to rely on knowing what the right property name is and hand-typing it, tramadol from canadian pharmacy. Buy tramadol no prescription, Don't go away. Buy tramadol from trusted pharmacy, We are only half finished. Blend might be helping you choose property names, over the counter tramadol, Buy tramadol online without prescription, but we're left with two more problems:


  • Blend isn't displaying the sample data on screen.

  • This xaml file full of things that were only useful during development is being shipped to our customers inside our DLL.


We can fix this with a simple, but quirky little feature, tramadol to buy. Ordering tramadol online, By setting our design data file's build action to "DesignData" we will have both of our problems fixed. Blend will realise that it's ok to try and instantiate the object in the xaml file, tramadol pills, Tramadol prescriptions, and MSBuild will leave that xaml file out of our dll.

Setting DesignData build action for the first time


Normally, tramadol paypal, Buy tramadol online without a prescription, if you have a look at the properties of a xaml file in visual studio you'll see that the Build Action is set to "Page", or in the case of App.xaml it's "ApplicationDefinition", where can i find tramadol online. You'd think that it's just a simple matter of typing the word "DesignData" into that combobox, but if you try this, you'll get an exception message, buy tramadol from trusted pharmacy. Tramadol in india, Karl's blog post is about a template he wrote that gets over this problem (by creating the file with all the right properties for you), but I had to figure out how the magic worked, where can i buy cheapest tramadol online. Where can i order tramadol without prescription, It turns out that it's relatively easy to work around this, you just have to edit the csproj file manually, tramadol medication. Real brand tramadol online, I'll walk you through doing this with visual studio – although you could just as easily use notepad.

Save all your files, buying tramadol online over the counter, Order tramadol online overnight delivery no prescription, right click your WPF project and choose "Unload". Buy tramadol from trusted pharmacy, This puts your project into a disabled state where you can't do anything but hand edit the xml – which is exactly what we want to do.


  1. Right click the (now greyed out) project file and choose "Edit".

  2. Locate the design data xaml file: image

  3. Edit the element to be a "DesignData" element with no children: image

  4. Save your csproj file, order tramadol from mexican pharmacy, Tramadol in mexico, right click it and choose "Reload"


Now if you compile your project, you'll find that all traces of this design data have been erased, buy tramadol without prescription. Online buy tramadol without a prescription, Even better, if you go back to blend, where to buy tramadol, Cod online tramadol, you'll see that your sample data is now present (you may have to rebuild or even reload the project):

image

So hopefully you've got another tool in your toolbox to help you (or your graphic designer) be effective in Blend. This is my favourite method so far, buy tramadol online cod, Free tramadol samples, however there's a couple of situations where it might be unsuitable. My next post will be all about why, where can i buy tramadol online, Where to buy tramadol, but just so you know, this doesn't work well when:


  • You want custom logic to occur in your viewmodel at design time (ie a Color property on your viewmodel changes whenever another integer property goes below zero)

  • You are using DataTemplates with no Key, order tramadol from United States pharmacy, Buy cheap tramadol, just a DataType, and are relying on WPF to find the Template by your ViewModel class, where can i buy tramadol online. Tramadol san diego, (I understand that Silverlight doesn't support this anyway, so no problem there!)


As always, where can i buy cheapest tramadol online, I'm keen to know if I got anything wrong. There isn't much information about the whole "d:" namespace on the internet. Also, my third and final post in this series (about the magic that makes this work and how said magic causes the above problems) will come with a demo project.

* This namespace is actually http://schemas.microsoft.com/expression/blend/2008, but Blend always imports this as "d".

Similar posts: Buy xanax from trusted pharmacy. Next day imitrex.
Trackbacks from: Buy tramadol from trusted pharmacy. Buy tramadol from trusted pharmacy. Buy tramadol from trusted pharmacy. Buy tramadol from trusted pharmacy. Buy tramadol from trusted pharmacy. Buy tramadol from trusted pharmacy. Buy tramadol from trusted pharmacy. Buy tramadol from trusted pharmacy. Buy tramadol from trusted pharmacy. Buy tramadol from trusted pharmacy. Where to buy tramadol. Buying tramadol online over the counter. Tramadol from international pharmacy. Tramadol overseas. Where can i buy cheapest tramadol online.

 
 

Buy Topamax From Trusted Pharmacy

16 Dec

Buy topamax from trusted pharmacy, How do you make sure that what you (or your designer) sees in Expression Blend is exactly what the finished product will look like. Buy topamax online cod, A while ago I posted about the d:DataContext attribute in Blend, and how you could leverage that to populate Blend with realistic sample data, buy topamax no prescription. Topamax in australia, What was awesome about that.


  • You could see exactly how the finished product would look WHILE you were designing, buy topamax without a prescription. Topamax paypal, True WYSIWYG means efficient designers!

  • Blend would provide typesafe data binding (I don't think I called this out, but bringing up the Binding dialog box shows a chooser for correct property names, topamax craiglist. Bye bye magic strings!)

  • Having sample data in your ItemsPresenters/ListBoxes/TreeViews means that blend will let you edit the template in place, providing for an even more useful WYSIWYG experience.


If you haven't tried it yet, but you are a XAML developer, I really suggest you try developing a screen in Blend when it's populated with sample data, buy topamax from trusted pharmacy. Fast shipping topamax, It's just so easy. With unit tests on your viewmodel and sample data in Blend, buy topamax online with no prescription, Buy topamax from mexico, you can finish a screen without ever having to press F5. Okay, topamax prices, Purchase topamax online no prescription, maybe once, but you'll be super happy because everything will work the way it was intended, topamax discount. Buy topamax online without prescription,

But at what cost?


Here are the problems that I've found with this approach in my own projects:

I often had to write alot of code, either dummy services to be passed into the viewmodel, topamax in us, Topamax in india, or lots and lots of code to simply add things into the derived viewmodel's collections. Buy topamax from trusted pharmacy, This code (often hacked together) got deployed, bloating my DLL file. This sucks extra for Silverlight where the DLL has to be downloaded every time) and, topamax in uk, Topamax in canada, well, looking messy, buying topamax online over the counter. Cod online topamax, Depending on how your viewmodel is coded, you can't always provide a simple design-time subclass that will populate everything you want, real brand topamax online. Buy generic topamax, While Dependency Injection is awesome, we aren't all the architects on our projects, buy cheap topamax no rx, Topamax prescriptions, and you might get handed a viewmodel that relies on hard coded dependencies that will do yucky things like call web services, read files or connect to a database, topamax trusted pharmacy reviews. Topamax over the counter, Other times, the ways in which the services are used are so watertight that it's impossible (or at least it would take hundreds of lines of well thought out code) to make sure you had the right sample data for your designer, buy topamax without prescription.

Whenever the viewmodel or the services evolved, the design-time viewmodel needed to keep up, buy topamax from trusted pharmacy. Free topamax samples, Often (on my project), the person adding features to the viewmodel wasn't the person who cared about the design time viewmodel, sale topamax. Purchase topamax, Sometimes they took the effort to make sure the design-time viewmodel compiled, other times they deleted it, topamax tablets. Buy topamax online no prescription, Which is fair enough, they didn't write the code, next day topamax, Where can i order topamax without prescription, they don't see the point of it, all its doing is helping me design the XAML, online buy topamax without a prescription. Buy topamax from canada, So I'd end up restoring the file from source control, adding it back into the project, over the counter topamax, Topamax medication, and maintaining it, which was often a lot of effort, where can i find topamax online. Topamax from international pharmacy,

The solution


In the meantime, I've been reading around the blogosphere and found a better way to do design data in blend, delivered overnight topamax. Order topamax from mexican pharmacy, It doesn't rely on Dependency Injection (although DI is lovely), it's easy to maintain and best of all it has NO effect on your compiled DLL, purchase topamax online. Topamax for sale, Stay tuned, having gone over (in tedious detail) the why of this new approach, topamax pills, Topamax in mexico, I'm going write a new post about how. Buy no prescription topamax online. Topamax to buy. Ordering topamax online. Saturday delivery topamax. Online buying topamax hcl. Order topamax online c.o.d. Topamax in japan. Buy topamax online without a prescription. Where to buy topamax. Topamax gel, ointment, cream, pill, spray, continuous-release, extended-release. Topamax from canadian pharmacy. Topamax to buy online. Topamax price, coupon. Where to buy topamax. Topamax buy online. Topamax overseas. Order topamax no prescription. Rx free topamax. Order topamax online overnight delivery no prescription. Topamax in usa.

Similar posts: Buy seroquel from trusted pharmacy. Where to buy antabuse.
Trackbacks from: Buy topamax from trusted pharmacy. Buy topamax from trusted pharmacy. Buy topamax from trusted pharmacy. Buy topamax from trusted pharmacy. Buy topamax from trusted pharmacy. Buy topamax from trusted pharmacy. Buy topamax from trusted pharmacy. Buy topamax from trusted pharmacy. Buy topamax from trusted pharmacy. Buy topamax from trusted pharmacy. Where can i find topamax online. Topamax to buy. Topamax in uk. Buy topamax online without prescription. Order topamax from United States pharmacy.

 
 

Buy Flomax From Trusted Pharmacy

10 Sep

Sometimes you don't want to make your users think Buy flomax from trusted pharmacy, . There's the odd situation where you want to represent time in natural language: "about 4 hours ago" instead of just printing out a full timestamp, rx free flomax. Flomax discount, If you're building a website, then the jQuery plugin Timeago is a pretty sweet way to do it (as long as you can stand webpages that auto update text), online buying flomax hcl. Flomax from canadian pharmacy, Sucks for me, I'm working with WPF, where to buy flomax. Buy no prescription flomax online, (Not really sucks at all). So I needed a C# implementation of the same thing, buy flomax from trusted pharmacy. Surely someone's done this, purchase flomax, Flomax in usa, right. Well my Google-fu failed me, flomax medication, Buy flomax no prescription, and even when I Googled on bing I came up with nothing, so I built it myself, flomax overseas. Flomax for sale, And I'm posting it here for you (and for me, later), buy cheap flomax. Flomax buy online, If you've found a good one, please let me know, flomax prescriptions. Buy flomax from trusted pharmacy, First, the test cases, so you can see if the format I want is the format you want:

[TestClass]
public class FriendlyTimeDescriptionTest
{
private static string Run(TimeSpan span)
{
return FriendlyTimeDescription.Describe(span);
}

[TestMethod]
public void TestNow()
{
Assert.AreEqual("now", Run(new TimeSpan(0, 0, 0, 0)));
}

[TestMethod]
public void TestSeconds()
{
Assert.AreEqual("1 second ago", Run(new TimeSpan(0, 0, 0, 1)));
Assert.AreEqual("2 seconds ago", Run(new TimeSpan(0, 0, 0, 2)));
Assert.AreEqual("59 seconds ago", Run(new TimeSpan(0, 0, 0, 59)));
}

[TestMethod]
public void TestMinutesAndSeconds()
{
Assert.AreEqual("about 1 minute ago", Run(new TimeSpan(0, 0, 1, 1)));
Assert.AreEqual("about 3 minutes ago", Run(new TimeSpan(0, 0, 3, 1)));
}

[TestMethod]
public void TestMinutesAndSecondsRounding()
{
Assert.AreEqual("about 4 minutes ago", Run(new TimeSpan(0, 0, 3, 31)));
}

[TestMethod]
public void TestDaysHours()
{
Assert.AreEqual("about 3 hours ago", Run(new TimeSpan(0, 3, 3, 1)));
Assert.AreEqual("about 2 days ago", Run(new TimeSpan(2, 0, 1, 1)));
}
}


I've conveniently wrapped all this up into an IValueConverter implementation, but if you're not using WPF you can rip out the necessary methods. Flomax pills, Please excuse the newline-enthused formatting - this blog theme has limited column width.
[ValueConversion(typeof(DateTime), where can i find flomax online, Order flomax from United States pharmacy, typeof(string))]
public class FriendlyTimeDescription : IValueConverter
{
public object Convert(
object value,
Type targetType, order flomax from mexican pharmacy, Buy flomax online without a prescription, object parameter,
CultureInfo culture)
{
var time = System.Convert.ToDateTime(value);
return Describe(DateTime.Now - time);
}

static readonly string[] NAMES = {
"day", flomax san diego, Flomax in india, "hour",
"minute", fast shipping flomax, Sale flomax, "second"
};

public static string Describe(TimeSpan t)
{
int[] ints = {
t.Days,
t.Hours, flomax gel, ointment, cream, pill, spray, continuous-release, extended-release, Flomax in japan, t.Minutes,
t.Seconds
};

double[] doubles = {
t.TotalDays, flomax prices, Buy flomax online without prescription, t.TotalHours,
t.TotalMinutes, buy flomax from canada, Order flomax online overnight delivery no prescription, t.TotalSeconds
};

var firstNonZero = ints
.Select((value, index) => new { value, flomax in canada, Buy flomax without a prescription, index })
.FirstOrDefault(x => x.value != 0);
if (firstNonZero == null)
{
return "now";
}
int i = firstNonZero.index;
string prefix = (i >= 3) . "" : "about ";
int quantity = (int)Math.Round(doubles[i]);
return prefix + Tense(quantity, ordering flomax online, Buy flomax online cod, NAMES[i]) + " ago";
}

public static string Tense(int quantity, string noun)
{
return quantity == 1, saturday delivery flomax. Cod online flomax, "1 " + noun
: string.Format("{0} {1}s", quantity, order flomax no prescription, Flomax to buy online, noun);
}

public object ConvertBack(
object value,
Type targetType, flomax in australia, Purchase flomax online no prescription, object parameter,
CultureInfo culture)
{
return Binding.DoNothing;
}
}


Enjoy, where can i order flomax without prescription. Flomax craiglist. Flomax in mexico. Flomax price, coupon. Over the counter flomax. Buy flomax from mexico. Flomax from international pharmacy. Flomax over the counter. Free flomax samples. Purchase flomax online. Delivered overnight flomax. Flomax to buy. Buy flomax online with no prescription. Next day flomax. Flomax in us. Order flomax online c.o.d. Real brand flomax online. Flomax tablets. Where can i buy flomax online. Flomax in uk. Buy flomax without prescription. Where can i buy cheapest flomax online. Buy flomax online no prescription. Where to buy flomax. Flomax paypal.

Similar posts: Buy naltrexone from trusted pharmacy. Buy generic topamax.
Trackbacks from: Buy flomax from trusted pharmacy. Buy flomax from trusted pharmacy. Buy flomax from trusted pharmacy. Buy flomax from trusted pharmacy. Buy flomax from trusted pharmacy. Buy flomax from trusted pharmacy. Buy flomax from trusted pharmacy. Buy flomax from trusted pharmacy. Buy flomax from trusted pharmacy. Buy flomax from trusted pharmacy. Flomax in mexico. Buy flomax from mexico. Rx free flomax. Fast shipping flomax. Cod online flomax.

 
5 Comments

Posted in .Net, Dot

 

Buy Naltrexone From Trusted Pharmacy

02 Aug

Update: I've detailed another technique for implementing design time data in blend in this newer post (using something called DesignData) Buy naltrexone from trusted pharmacy, How can you develop a complex GUI without ever needing to build and run it.

WYSIWYG tools have come a long way in recent years, buying naltrexone online over the counter, Buy cheap naltrexone no rx, and if you're building a WPF app you can't go past Microsoft's newly-released Expression Blend 3. I'd always preferred Blend 2 over Visual Studio 2008 for building my XAML, buy generic naltrexone, Online buy naltrexone without a prescription, not least because of the Silverlight support. But Blend 3 has some features that quite frankly put me in GUI developer nirvana, naltrexone trusted pharmacy reviews. Real brand naltrexone online, Sketchflow shows an awful lot of promise, but what's really floating my boat is the almost undocumented design time only datacontext support, naltrexone in japan. What does that even mean, buy naltrexone from trusted pharmacy. Naltrexone in uk, Let me use a simple WPF game, Connect 4, naltrexone to buy, Naltrexone san diego, to show you...

Lets say I've already built the game, order naltrexone from United States pharmacy. Saturday delivery naltrexone, Just pretend I'd even written most of the XAML by hand. Here's what the game looks like when it's just been launched:

running_startgame

and here's a game that's partway through:

running_midgame

Buy naltrexone from trusted pharmacy, Perfect. Where can i buy cheapest naltrexone online, The game is finished. Let me tell you about how this was built:

First, online buying naltrexone hcl, Order naltrexone online overnight delivery no prescription, I coded my ViewModel, a bunch of classes that the XAML binds to, naltrexone prices. Where can i order naltrexone without prescription, I've implemented INotifyPropertyChanged where necessary, and am using ObservableCollections instead of Lists, rx free naltrexone. Naltrexone gel, ointment, cream, pill, spray, continuous-release, extended-release, Note that this is quite a simple game, and I don't really have a Model (in the M-V-VM sense) to speak of:

viewmodel

The Game is the root of everything, naltrexone in usa, Naltrexone over the counter, it tracks the Players, whos turn it is, buy naltrexone from canada, Naltrexone trusted pharmacy reviews, and the Columns. Columns have a collection of Cells, and Cells track whether or not  a Token has been placed within, buy naltrexone from trusted pharmacy. I've exposed a Command on the Column class, over the counter naltrexone, Where can i find naltrexone online, which picks up mouse clicks through a tall, invisible button in my XAML, naltrexone paypal. Buy naltrexone without a prescription, The XAML for this game is quite straightforward. The window contains an ItemsControl for the columns, naltrexone to buy online, Purchase naltrexone online, the column template contains an ItemsControl for the cells, and the cell template renders a blue rectangle with a hole in it, naltrexone pills, Buy naltrexone online cod, and an optional token. Grab the code and check it out if you like - you can download all this source at the bottom of the post.

Lets say that I had made this Viewmodel the datacontext of my main Window in the Window.Loaded event:

public void Window_Loaded(...){LayoutRoot.DataContext=new Game(7,5);}

When I come to edit the XAML in Blend (let's say I was planning to make the UI look a bit foxier, sale naltrexone, Naltrexone craiglist, with animations and gradients and whatnot), this is what I get:

No data in blend

Which is fair enough, buy naltrexone from mexico, Naltrexone for sale, because blend is effectively running my program with no data. Buy naltrexone from trusted pharmacy, The Window_Loaded event won't be fired by Blend, Blend only works with the XAML. The Visual Studio WPF designer has the same problem:

Visual Studio with no data

A feature of WPF that has always existed, naltrexone prescriptions, Purchase naltrexone online no prescription, and is completely cool is that you can shift this datacontext declaration into your XAML (Note that the use of an ObjectDataProvider is optional. If we were using silverlight we'd turn these constructor arguments into properties):

xaml_datacontext

Even before Blend 3 came along, where can i buy naltrexone online, Purchase naltrexone, doing this would mean that Blend (and Visual Studio) would be able to render your XAML as though a game had just started:

blend_realdata

This is nice. Now we get a good idea of how the GUI will really look when it's running, buy no prescription naltrexone online. Order naltrexone no prescription, We can even edit the XAML Templates in place (to see what I mean, download the source, buy naltrexone without prescription, Naltrexone in australia, right click an ItemsControl and edit its ItemsTemplate). We'd be in big trouble, however, if our ViewModel tried to call anything external on construction, buy naltrexone from trusted pharmacy. For example, buy generic naltrexone, Where to buy naltrexone, if we were building a twitter client, we might start downloading tweets through a web service call, naltrexone in canada. Next day naltrexone, This may or may not work when your code is running inside blend, but you'd be working with variable results, buy naltrexone online without prescription, Naltrexone in us, and as soon as you have an exception your designer would die. Jonas Follesoe has a great post that talks about how you can leverage Dependency Injection to get design time data services and runtime data services going, where to buy naltrexone. Online buy naltrexone without a prescription, Go read it - that's the post that made me realise how cool and important it is to get realistic data into your design time experience. Buy naltrexone from trusted pharmacy, Now that Blend 3 is out, however, we've got a new tool in our belt. I don't know if you've ever tried to change the DesignWidth or DesignHeight of a UserControl or Window from Blend, delivered overnight naltrexone. Naltrexone price, coupon, This post explains it pretty well, if you haven't... Well, fast shipping naltrexone, Buying naltrexone online over the counter, Blend will go and add a bunch of namespace declarations to your XAML, the most important alias of which is "d", buy naltrexone no prescription. Naltrexone buy online, You'll notice that you can put d:DesignWidth in any element you like, and nothing will happen at runtime, buy naltrexone online no prescription. Naltrexone in india, If you're lucky (or you put it in the right place), blend will pick up this design-time data, buy cheap naltrexone no rx, Buy cheap naltrexone, and will render your control at that width, but only from within blend, naltrexone tablets. The fact that your XAML can contain directives that will only be executed / honoured / considered by Blend is quite a powerful one.  There aren't very many of these attributes available, however,  Blend 3 introduced a big one: "d:DataContext", buy naltrexone from trusted pharmacy.

I stumbled across d:Datacontext when I was playing with Blend 3 and tried adding a "live datasource" to my window. I thought it was going to behave just like the old way of setting a DataContext, but when I ran my application, there was no data. I had a look at the XAML and saw that a Datacontext was being set on my root element, just like I expected. But why wasn't this being applied at runtime. Buy naltrexone from trusted pharmacy, I had a really, really close look at the XAML and spotted the "d:" before the word datacontext. Sweet. I deleted that, and the app ran as expected. My next thought was to try setting both a design time (d:) and a run time (no d:) Datacontext. It worked.

So the upshot is, now we can write code like this:

Setting a runtime AND a designtime datacontext

Or we can even set the real DataContext at runtime through the Window_Loaded (or whatever) event, buy naltrexone from trusted pharmacy. Why is this exciting. Now, it's easyto have blend show a truly representative form of our gui at design time:

blend_designdata

This, by the way, was acheived with the following design time subclass of Game:

code_designgame

Simple, no. By using an ObjectDataProvider, we can even prevent the DesignTimeGame from even being instantiated at runtime. If you're coding in silverlight, you'd use an alternative: "d:DataContext={d:DesignInstance vm:DesignTimeGame}", which would only work with an empty constructor - which is fine, because even if the runtime game requires constructor parameters, we can just write an empty designtimegame constructor that passes some dummy ones in. Buy naltrexone from trusted pharmacy, Now that we've got this design time data, it's much easier to spruce things up in the XAML (note that I'm editing a template in-place, and that I deliberately coded the design time model to have a token in the top left cell):

Editing a template in place with DesignTime data

I can't really express how much easier this design time data can make your coding. So please, download my example project, open it in blend 3, and try (for example) adding a gradient overlay to the tokens, or even just resizing them. I have to admit, I didn't hand code the XAML, I blended it in about ten minutes once I had the design time data available to me. And I didn't have to run it till I'd finished.

Download the Connect4 Source here.

Similar posts: Buy flomax from trusted pharmacy. Ordering yaz online.
Trackbacks from: Buy naltrexone from trusted pharmacy. Buy naltrexone from trusted pharmacy. Buy naltrexone from trusted pharmacy. Buy naltrexone from trusted pharmacy. Buy naltrexone from trusted pharmacy. Buy naltrexone from trusted pharmacy. Buy naltrexone from trusted pharmacy. Buy naltrexone from trusted pharmacy. Buy naltrexone from trusted pharmacy. Buy naltrexone from trusted pharmacy. Naltrexone in mexico. Buy naltrexone without prescription. Naltrexone in australia. Buy naltrexone from canada. Where can i buy naltrexone online.