tag:blogger.com,1999:blog-254577322024-03-13T08:23:31.257-05:00.NET DreamsA software architect's ramblings on code and calling.Unknownnoreply@blogger.comBlogger31125tag:blogger.com,1999:blog-25457732.post-37914888643584410932012-10-07T02:15:00.002-05:002012-12-17T19:39:48.786-05:00An Open LetterFor too long Google, Facebook, and Twitter have defined the marketable social experience on the Internet. Like the highways of Brazil, they have lined as much of the Internet that they can with clickable billboards; pushing products and services they think are most likely to grab an errant click. With the blessings and adulation of so called "thought leaders," they have attempted to rule over us as so many peasants. In fact, peasants is too kind of a term. They see us as their property, their cattle; mechanically picking apart our preferences, our relationships, and even our private thoughts, in order to maintain their increases. A corrupt politician would be proud of their methods, deviously misdirecting all inquiry, while carefully preserving the facade of "Do no evil." Even further evidence has shown that they are pursing their goals with a sinister delight, believing in no privacy but their own.<br />
<br />
Factually, the list of grievances is almost innumerable. How many breaches of privacy have there been? How many rogue employees watching us in secret? How many archives that have secretly leaked to advertisers? How many people censored? How many client businesses have they killed? In the end, how many times have they sold us? Millions? Billions? Trillions?<br />
<br />
Enough! We shall be slaves no longer! While the Internet is still a free network, there is another way. There is another land on which we may build the future. A land where we are not cattle, but customers. A land where we own our data, and our privacy is sacrosanct. A new frontier, being blazed by sites and services such as <a href="http://alpha.app.net/">App.net</a>, <a href="http://www.duckduckgo.com/">DuckDuckGo</a>, and <a href="http://www.fastmail.fm/">Fastmail</a>. We are being calling to join them in building a new world. A world, where for the price of a fancy coffee per month we can be secure in the fact that we no longer need to suffer information abuse. A world where we can be sure that our information is our own, and we can do with it what we will, including delete it permanently.<br />
<br />
Therefore, today I am going Galt; deleting my Twitter account, shortly deleting my Facebook account, and declaring my independence. I also issue the call to you. If you are tired of Twitter, if you are Facebook's huddled masses, and if Google has you yearning to be free, then pick up your data and join me.<br />
<br />
We the people of the Internet are revolting, and the revolution will be live-blogged... on <a href="http://alpha.app.net/">App.net</a>.Unknownnoreply@blogger.com6tag:blogger.com,1999:blog-25457732.post-23030260416202764802012-09-01T23:04:00.002-05:002012-12-17T19:38:34.820-05:00RapptorMods and My App.net Dreams<strong><span style="font-size: large;">My Dream</span></strong><br />
<br />
I had a dream, a dream that I could build something amazing. If given the opportunity, I could create something that could change the way we look a the world around us; something that could, maybe, just maybe, touch everyone's lives a little bit. It was a big dream, and particularly difficult considering my biggest creative talent seems to be development for large corporations. Yet still I dreamt on, about building, about creating, about that something just over the horizon.<br />
<br />
Time passed, and I continued to dream. Then came App.net, a simple idea that seemed to spit in the face of the Internet as we have come to know it. An idea that dared to ask the question "What if?". What if we treated people as customers rather than cattle? What if we respected creativity rather than try to own it? What if we gave people a platform on which to dream their dreams, and share them with others? To me, it is a simple idea, but one that cries "Renaissance, and Revolution!" An idea on which I could build dreams.<br />
<br />
So that is exactly what I set out to do. I put my fingers to the keyboard, and neglected almost all else. I drove on furiously, encouraging others to build their digital homesteads on this brave new frontier. In the process, I began imagining how the dreams of others could become a digital reality on App.net.<br />
<br />
I decided to start with making it easier for others to make their digital creations in the only way I knew how. Building C# libraries that would make interacting with App.net much easier for those who could write programs in .Net. Yet as I coded questions still haunted me, dogging at almost all my thoughts. What would it take to make something new here? What does "new" look like? How can we go beyond what has been done before?<br />
<br />
Then it hit me, App.net is the Minecraft of social networks. It is a network where literally anything could be built. With the right tools you could create modifications of App.net, just like there are modifications of Minecraft.<br />
<br />
With App.net Mods you could build the digital equivalent of airplanes and spaceships, while the other social networks were in the process of tearing down the digital horse-trails that connected them. With App.net Mods you could make social mountains; you could even change the shape and behavior of social fabric itself, just like Minecraft Mods have done. With App.net Mods you could do almost anything... All you would need are the tools to build Mods for App.net, and I had the tools!<br />
<br />
So once again I began to code furiously, listening to the imaginations and dreams of those around me. I needed to prove to myself that this was the way forward; that App.net Mods could work as I had imagined. It was excruciatingly difficult work. I was a times frustrated, exhausted, aggravated, confused, and ultimately drained. Yet here I stand, a little less than a week since I started working, with the proof I was seeking.<br />
<br />
<strong><span style="font-size: large;">RapptorMods - Tagging</span></strong><br />
<br />
It is my pleasure to announce <a href="https://github.com/jdscolam/Rapptor.Mods.Feathers" target="_blank">RapptorMods</a>. RapptorMods is a collection of Modifications to the App.net API, starting with Tagging. Tagging is a live API for third-party developers that allows any user to tag any post with any text string up to 50 characters. It isn't complicated, and in a <strong>very Alpha</strong> state (so please be careful), however I plan on updating frequently over the coming weeks, though at a much slower pace than I've been working lately. It is my hope that RapptorMods will continue to provide some amazing functionality on-top of App.net, and stand as an example for future App.net Mods to expand the platform. Most importantly though, I hope RapptorMods shows everyone, developers, and non-developers alike, what amazing things can be done when you put your mind and heart into creating something.<br />
<br />
For some technical details, RapptorMods is currently hosted as an Azure website, with an Azure Sql database. The API documents, and client-side .Net wrapper code, tests, and examples can be found at the <a href="https://github.com/jdscolam/Rapptor.Mods.Feathers" target="_blank">RapptorMods GitHub</a>. There will also be a NuGet package for the .Net developers to use once the API gets a little more stable. Please don't hesitate to contact me if you have any questions, or need help getting your client code to connect.<br />
<br />
<strong><span style="font-size: large;">A Few Words on Costs</span></strong><br />
<br />
I want to continue to do amazing things on the App.net platform, and I have the ability to host the API for a short time for free. However, in reality hosting will likely become very expensive very quickly. Also, I love build things like this, and making them even better over time, but the time commitment with such a short deadline is simply unsustainable for me by myself. So I am reaching out to the community. Please tell me if you have any suggestions on how to make RapptorMods a financially sustainable operation, so that it can continue to benefit the App.net community far into the future.<br />
<br />
<strong><span style="font-size: large;">Finally </span></strong><br />
<br />
I want to first of all thank my Lord and Savior Jesus Christ.<br />
<br />
I want to also thank all of the wonderful people on App.net who have inspired me, believed in me, and encouraged me throughout this process. It has not been easy, and you all have been wonderful.<br />
<br />
Lastly, this project is dedicated to my daughter Catherine, and all those who dare to dream. Don't ever give up looking over the horizon, and imagining what may be.Unknownnoreply@blogger.com2tag:blogger.com,1999:blog-25457732.post-65843351447449323502011-01-16T16:25:00.004-05:002011-11-21T10:01:54.201-05:00WCF REST IIS Hosting 404 Issue - RESOLVED!Recently I've been mucking about in the WCF-REST arena and ran into an infuriating problem that kept me busy for almost three days. Essentially I had created a small WCF REST service, and it worked fine when accessing it from VS2010 debugging, however why I tried to access the version I had published in IIS (IIS7 or IIS7.5) it would show me a 404 error, or the annoying "directory browsing not enabled" error. Now you'd expect this on the old .NET 3.5 implementations of WCF REST, but in the newer environments you can do a .svc-less implementation of your service that is much cleaner and leads to a very straight-forward code to URL implementation. I finally found a solution to my problem, and though it was one of those embarrassingly obvious solutions, I could have gotten three days of my life back if someone would have mentioned their mistake.<br />
<br />
Now if you do a <a href="http://www.google.com/search?q=wcf+rest+iis+hosting&rls=com.microsoft:en-us&ie=UTF-8&oe=UTF-8&startIndex=&startPage=1">Google search on "wcf rest iis hosting"</a> you'll see that quite a few people have been having these issues, and there are answers out there ranging from making sure the AppPool user has the right permissions to ensuring that <a href="http://social.msdn.microsoft.com/Forums/is/wcf/thread/5dc66deb-5f01-44ca-9e79-49f2a1d91f2e">ASP.NET had been properly installed on IIS</a>. None of these suggestions worked for me, leading to quite a bit of frustration. There was one small hint tucked away that eventually tipped me off to the real solution, however I didn't think to check it until today. On <a href="http://christopherdeweese.com/blog2/">Christopher Deweese's blog</a> he has <a href="http://christopherdeweese.com/blog2/post/drop-the-soap-wcf-rest-and-pretty-uris-in-net-4">a great post discussing how to "do" WCF REST in .NET 4.0</a> and in the comments he mentions "You should not have a virtual folder set up for your paths. You should just deploy the service and let the routes be determined by the application (not at the IIS level)." This is the key, in your global ASAX file you'll have a line of code that looks like this: <span style="color: #2b91af; font-family: Consolas; font-size: x-small;"><span style="color: #2b91af; font-family: Consolas; font-size: x-small;"><span style="color: #2b91af; font-family: Consolas; font-size: x-small;"></span></span></span><span style="font-family: Consolas; font-size: x-small;"><span style="font-family: Consolas; font-size: x-small;">RouteTable.Routes.Add(</span></span><span style="color: blue; font-family: Consolas; font-size: x-small;"><span style="color: blue; font-family: Consolas; font-size: x-small;"><span style="color: blue; font-family: Consolas; font-size: x-small;">new</span></span></span><span style="font-family: Consolas; font-size: x-small;"><span style="font-family: Consolas; font-size: x-small;"> </span></span><span style="color: #2b91af; font-family: Consolas; font-size: x-small;"><span style="color: #2b91af; font-family: Consolas; font-size: x-small;"><span style="color: #2b91af; font-family: Consolas; font-size: x-small;">ServiceRoute</span></span></span><span style="font-family: Consolas; font-size: x-small;"><span style="font-family: Consolas; font-size: x-small;">(</span></span><span style="color: green; font-family: Consolas; font-size: x-small;"><span style="color: green; font-family: Consolas; font-size: x-small;"><span style="color: green; font-family: Consolas; font-size: x-small;">"MyServiceName"</span></span></span><span style="font-family: Consolas; font-size: x-small;"><span style="font-family: Consolas; font-size: x-small;">, </span></span><span style="color: blue; font-family: Consolas; font-size: x-small;"><span style="color: blue; font-family: Consolas; font-size: x-small;"><span style="color: blue; font-family: Consolas; font-size: x-small;">new</span></span></span><span style="font-family: Consolas; font-size: x-small;"><span style="font-family: Consolas; font-size: x-small;"> </span></span><span style="color: #2b91af; font-family: Consolas; font-size: x-small;"><span style="color: #2b91af; font-family: Consolas; font-size: x-small;"><span style="color: #2b91af; font-family: Consolas; font-size: x-small;">WebServiceHostFactory</span></span></span><span style="font-family: Consolas; font-size: x-small;"><span style="font-family: Consolas; font-size: x-small;">(), </span></span><span style="color: blue; font-family: Consolas; font-size: x-small;"><span style="color: blue; font-family: Consolas; font-size: x-small;"><span style="color: blue; font-family: Consolas; font-size: x-small;">typeof</span></span></span><span style="font-family: Consolas; font-size: x-small;"><span style="font-family: Consolas; font-size: x-small;">(</span></span><span style="color: #2b91af; font-family: Consolas; font-size: x-small;"><span style="color: #2b91af; font-family: Consolas; font-size: x-small;"><span style="color: #2b91af; font-family: Consolas; font-size: x-small;">MyServiceType</span></span></span><span style="font-family: Consolas; font-size: x-small;"><span style="font-family: Consolas; font-size: x-small;">)));</span></span><span style="font-family: Consolas; font-size: x-small;"><span style="font-family: Consolas; font-size: x-small;"></span></span><br />
<br />
Now, when you access this from the debugger you'll end up doing so from a URL similar to "http://localhost:[port]/MyServiceName/...", however once you publish your service to it's own IIS application under the Default Web Site you'll get the 404's starting to pop up again trying to access the URL "http://localhost/MyServiceName/..." The answer to the problem becomes obvious when you notice that "http://localhost/MyServiceName/MyServiceName/..." works. The "MyServiceName" string within your ServiceRoute(...) is being appended to the root of your application to determine the route to your service. So to fix this you can simply publish your service to the root of its own site, or make your RouteTable declaration look like this: <span style="color: #2b91af; font-family: Consolas; font-size: x-small;"><span style="color: #2b91af; font-family: Consolas; font-size: x-small;"><span style="color: #2b91af; font-family: Consolas; font-size: x-small;"></span></span></span><span style="font-family: Consolas; font-size: x-small;"><span style="font-family: Consolas; font-size: x-small;">RouteTable.Routes.Add(</span></span><span style="color: blue; font-family: Consolas; font-size: x-small;"><span style="color: blue; font-family: Consolas; font-size: x-small;"><span style="color: blue; font-family: Consolas; font-size: x-small;">new</span></span></span><span style="font-family: Consolas; font-size: x-small;"><span style="font-family: Consolas; font-size: x-small;"> </span></span><span style="color: #2b91af; font-family: Consolas; font-size: x-small;"><span style="color: #2b91af; font-family: Consolas; font-size: x-small;"><span style="color: #2b91af; font-family: Consolas; font-size: x-small;">ServiceRoute</span></span></span><span style="font-family: Consolas; font-size: x-small;"><span style="font-family: Consolas; font-size: x-small;">(</span></span><span style="color: green; font-family: Consolas; font-size: x-small;"><span style="color: green; font-family: Consolas; font-size: x-small;"><span style="color: green; font-family: Consolas; font-size: x-small;">""</span></span></span><span style="font-family: Consolas; font-size: x-small;"><span style="font-family: Consolas; font-size: x-small;">, </span></span><span style="color: blue; font-family: Consolas; font-size: x-small;"><span style="color: blue; font-family: Consolas; font-size: x-small;"><span style="color: blue; font-family: Consolas; font-size: x-small;">new</span></span></span><span style="font-family: Consolas; font-size: x-small;"><span style="font-family: Consolas; font-size: x-small;"> </span></span><span style="color: #2b91af; font-family: Consolas; font-size: x-small;"><span style="color: #2b91af; font-family: Consolas; font-size: x-small;"><span style="color: #2b91af; font-family: Consolas; font-size: x-small;">WebServiceHostFactory</span></span></span><span style="font-family: Consolas; font-size: x-small;"><span style="font-family: Consolas; font-size: x-small;">(), </span></span><span style="color: blue; font-family: Consolas; font-size: x-small;"><span style="color: blue; font-family: Consolas; font-size: x-small;"><span style="color: blue; font-family: Consolas; font-size: x-small;">typeof</span></span></span><span style="font-family: Consolas; font-size: x-small;"><span style="font-family: Consolas; font-size: x-small;">(</span></span><span style="color: #2b91af; font-family: Consolas; font-size: x-small;"><span style="color: #2b91af; font-family: Consolas; font-size: x-small;"><span style="color: #2b91af; font-family: Consolas; font-size: x-small;">MyServiceType</span></span></span><span style="font-family: Consolas; font-size: x-small;"><span style="font-family: Consolas; font-size: x-small;">)));</span></span><br />
<br />
I hope this saves you a good bit of time in the future when trying to publish WCF REST to IIS7/7.5 and good luck with your future coding!Unknownnoreply@blogger.com16tag:blogger.com,1999:blog-25457732.post-1698077485391613592008-11-05T19:20:00.001-05:002008-11-05T19:20:18.279-05:00LINQ to SQL – Dead as a …<p>LINQ to SQL is dead, long live LINQ to SQL.  No, it’s not “coming back” or pining for the fjords, it’s really truly dead.</p> <p>At least that is the consensus coming from those both inside and outside Microsoft.  L2S is being deprecated in order to make way for the “One true ORM”<em>tm </em>a.k.a., Entity Framework (EF).  Not that this is entirely surprising considering L2S was transferred to the SQL Data programmability team back in July.  Hopefully, as many people at <a href="http://www.kaizenconf.com">Kaizen Conf</a> were discussing, EF2 will be much less heavy, and have true Persistence Ignorance.  I’ll keep an eye out, but I’m not entirely holding my breath.</p> Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-25457732.post-67708178986065606292008-09-19T20:54:00.001-05:002008-09-19T20:54:48.705-05:00My new rally cry"I am a PC and I sell fish!"Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-25457732.post-71779741224457335442008-03-24T16:58:00.003-05:002008-03-26T12:51:40.626-05:00In Soviet Russia, Blog Posts YouWisdom of the ages right <a href="http://tech.groups.yahoo.com/group/altdotnet/message/5054">here</a>, wisdom of the ages ;). <a href="http://ayende.com/Blog/Default.aspx">Oren </a>is like Life Ceral's Mikey for Alt.NET.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-25457732.post-70566638949776617332008-03-05T11:09:00.006-05:002008-03-05T15:23:21.095-05:00WPF: Data-bind This!I've been struggling to learn WPF while writing a small log reporting app and one of the hardest things for me to figure out so far has been the data binding logic. Unlike plain-old WinForms, the many ways to hook-up object data to your controls follow a vague syntax, are not designer drive, and seem to come together magically at runtime; the last part being very similar to the Web Site project in VS2005. Since I'm extremely new to WPF and unfamiliar with the binding syntax (though I'm catching up) it would have been nigh impossible for me to figure it out how get anything done without using some serious Google-fu. Unfortunately even the Google-fu failed me and I had to rely on a group of <a href="http://tech.groups.yahoo.com/group/altdotnet/">experts </a>to point me in the right direction. After a few more hours of struggling I was able to figure most of it out and I figured it was a good idea to help somone else's Google-fu out on my blog.<br /><br /><strong>What do you mean your Google-fu failed?</strong><br /><br />Well in this case almost all of the examples I was able to find out there dealt with binding to a pre-done static list of items created and populated within the XAML itself, binding to a list of objects populated in the default constructor of a container class that would be instantiated within the XAML itself (very confusing), binding a custom list class that was once again instantiated via a default constructor within the XAML, and binding to a DataSet. None of these use cases really hit what I would consider the basic use case (and the one forum question I did find asking about this basic case went unanswered): You have a non-static list of objects conforming to a known type or interface generated from within your domain and exposed via a controller/presenter/service class. So looking for this out there was no-dice, and the MSDN documentation was nearly impossible to read and pretty much covers the worst of the above examples. Eventually, and with much trial and error, I was able to figure it out.<br /><br /><strong>So how does it all work?</strong><br /><br />Good question! I'm still trying to tease out all the details, on how this works, but in general I've got it. In the back-end domain we're still generating and exposing our objects as normal, none of this has really changed, but once we get to the code-behind it's a little different, and the XAML is entirely different. The first thing we have to know in this space is that we can only bind to controls that support dependence properties, and these are the properties we will actually be binding to data such as the Text="..." attribute of a TextBlock (i.e. myTextBlock.Text). Without these properties being available on our control we're out of luck when it comes to binding. Next we'll have to determine whether or not we're binding to a single object or a collection of objects (myTextBlock.Text to a string or myComboBox to a collection). If we're using a collection we'll also decide if we want to customize our view into the collection (more on this later). I should also mention that at this point I'm only talking about One-Way binding (read-only into the data), I haven't quite gotten Two-Way binding down pat yet, so that'll be the topic of another post.<br /><br />Now once we've figured out what control we want to bind to what data, we'll need to take a moment in order to figure out where the best place to expose this data is. In the case of WPF's XAML implementation there are a couple of places we can do this. The first is using the DataContext, a sort of "catch-all" that most of these dependency objects (what I'll call the objects with dependence parameters) have for data. This can be bound to pretty much anything as it takes in an "object" type, so the simplest way to set the DataContext in code is by saying myControl.DataContext = myData. You can also set the DataContext as an attribute on the tag for your particular object. One nice but dangerous thing about the DataContext is that it is inherited down the XAML tree so it's possible to set the DataContext property/tag on any object that contains your object and have the object that you want to bind take advantage of it. <a href="http://www.beacosta.com/blog/">Beatriz</a> has a good post on the subject <a href="http://www.beacosta.com/blog/?p=6">here</a>.<br /><br />Another option for exposing the data is to directly set the binding "source" for the property you want to bind your particular WPF control. This is a little confusing to do as it requires you to deal with WPF's binding syntax. Using the binding syntax without the "source" looks something like this:<br /><br /><br /><pre><code><TextBlock Text="{Binding Path=MyProperty}"/></code></pre><br /><br />As you can see we have the Text attribute set to a string containing the keyword "Binding" in curly braces, which identifies that you want to bind the Attribute/Property to something. The Path= (notice the lack of quotes) statement is where you tell WPF which property on your data you want to bind to. It's possible to write this statement as "{Binding}" or "{Binding .}" to say that you want to bind to everything on some inherited DataContext, but remember that depending on the property you set this way it may just call .ToString() when it gets to binding, so be careful. Now when you use the binding syntax there's also a Source keyword. The binding syntax that uses the Source keyword looks something like this:<br /><br /><br /><pre><code><TextBlock Text="{Binding Source={StaticResource myDataObject}, Path=MyProperty}"/></code></pre><br /><br />This will tell the binding to find the Path property using the given data object within the source declaration. Again myDataObject can be declared either in your XAML or within your code-behind, however it's important to reference your code-behind clr-namespace at the top of your XAML file (see <a href="http://msdn2.microsoft.com/en-us/library/ms747086.aspx">here (MSDN link, Sorry!</a>). If you do this you would reference namespaceAlias:myDataObject, where namespaceAlias is whatever alias you've setup at the top of the XAML file. Using the source property is useful in some cases including debugging (again see Beatriz's <a href="http://www.beacosta.com/blog/?p=6">article</a>), but I'm not sure about all the details that surround the StaticResource keyword. Any comments to clarify that keyword would be appreciated.<br /><br />You can also directly set the binding on a given object via code, however I've had some trouble getting the source to change as it kept its reference to the original object, but again it will be the topic for another post.<br /><br />The final way to expose data to your binding is particular to binding to collections. If your control supports binding to a collection (Grid, ListView, ListBox, ComboBox, TreeView, etc.) then you can bind its ItemsSource Property/Attribute (I'm going to start calling them "propttributes" soon!) to your data, which will then allow the attributes and children of any template items (used in a DataTemplate or a HierarchicalDataTemplate, which you can find further information on <a href="http://msdn2.microsoft.com/en-us/library/ms742521.aspx">here (MSDN link, sorry!)</a>) to bind directly to properties on object instances within your collection.<br /><br />This is all the "setup" we need to understand getting our controls bound to data (finally!) so all that's left to do is actually wiring up our binding to our attributes. Again this uses the binding syntax above, and I think I've covered how to write those, however feel free to ask if you have any questions or get confused. Anyways I think I've at least covered the basics, however I'll have to write some future posts on collections and the CollectionView for grouping, sorting, and formatting as well as getting data to refresh.Unknownnoreply@blogger.com1tag:blogger.com,1999:blog-25457732.post-355104057796472202008-03-03T17:32:00.008-05:002008-03-05T11:09:15.766-05:00WPF: Adventures in Formatting<strong>Problem: </strong>I needed to have a really long string text in a bound WPF ListView column wrap instead of running on until the end of the text.<br /><br /><strong>Solution:</strong> After doing quite a bit of searching around I was unable to find a good concrete example that worked in my particular case. The closest example I found looked something like this:<br /><br /><br /><pre><code><ListView Height="Auto" Name="lsvErrorSummary2" ScrollViewer.CanContentScroll="False"><br /><br /> <ListView.View><br /><br /> <GridView><br /><br /> <GridViewColumn Header="Message" Width="200" DisplayMemberBinding="{Binding Path=Property}"><br /><br /> <GridViewColumn.CellTemplate><br /><br /> <DataTemplate><br /><br /> <TextBlock TextWrapping="Wrap" Text="{Binding}" /><br /><br /> </DataTemplate><br /><br /> </GridViewColumn.CellTemplate><br /><br /> </GridViewColumn><br /><br /> </GridView><br /><br /> </ListView.View><br /><br /></ListView></code></pre><br /><br />Maddeningly enough this doesn't work as I spent at least an hour trying to find some magical combination of properties that would get it to work. The reason this doesn't work seems to be the fact that when we use the "DisplayMemberBinding" to bind the column WPF is using the binding for both the data and how to display the data, or at the very least WPF is just using the default for displaying the bound data. That being said I was able to solve it by making some changes.<br /><br />The first thing I did was to remove the DataTemplate out into a Resources area (Window.Resources would work) and make sure to give it an x:Key="" attribute. After doing that I pulled out the GridViewColumn.CellTemplate tags as well. All that's left to do is to set the Text attribute of your DataTemplate's TextBlock equal to your real binding property (i.e. Text="{Binding Path=Message}" and point the CellTemplate attribute to the DataTemplate's x:Key (i.e. CellTemplate="{StaticResource CustomListViewItems}"). The end result should look similar to below:<br /><br /><br /><pre><code><Window.Resources><br /> <DataTemplate x:Key="CustomListViewItems"><br /> <TextBlock TextWrapping="Wrap" Text="{Binding Path=Message}" /><br /> </DataTemplate><br /></Window.Resources></code></pre><code><pre><br /><ListView Height="Auto" Name="lsvErrorSummary" Width="511" ScrollViewer.CanContentScroll="False"><br /> <ListView.View><br /> <GridView><br /> <GridViewColumn Header="Message" Width="200" CellTemplate="{StaticResource CustomListViewItems}"><br /> </GridViewColumn><br /> </GridView><br /> </ListView.View><br /></ListView></code></pre><br />So far so good, now here's the hard part: this only works well when the column has a fixed width, but the TextWrapping setting will fail to take effect otherwise. In order to have it work with a flexible width a little bit of hacking is required. The easiest way to do this is using the ActualWidth property on the GridViewColumn you're wrapping. The following code shows doing this with two columns in the ListView:<br /><br /><br /><pre><code>((GridView)myListView.View).Columns[1].Width =<br /> myListView.ActualWidth - ((GridView)myListView.View).Columns[0].ActualWidth - 5</code></pre><br />With this code I'm using Columns[1] as the column that wraps and I am determining the width with a little padding on the end (hence the "- 5"). There may be a more effecient way of doing this, but the math is pretty straight forward and you can run this code whenever the ListView would resize in order to maintain the text wrapping.Unknownnoreply@blogger.com2tag:blogger.com,1999:blog-25457732.post-67997168503728130762008-01-14T22:29:00.000-05:002008-01-14T22:31:11.672-05:00She's Here!Catherine Celeste Scolamiero was born at 8:11pm 1/14/2008, weighing exactly 7 lbs. and 20 in. of length. Everyone remarked at her long and beautiful dark hair. She is doing very well.<br /><br />Stefanie is also doing well and currently recovering.Unknownnoreply@blogger.com3tag:blogger.com,1999:blog-25457732.post-79078417445952559302008-01-14T17:52:00.000-05:002008-01-14T17:55:18.987-05:00Chasing Chad<a href="http://www.lostechies.com/blogs/chad_myers/default.aspx">Chad Myers</a> and his wife recently had a baby, and we're following them right up with one of our own. My wife is currently in labor with our baby and we're blogging to notify our friends and family with updates. The internet is a wonderful thing!Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-25457732.post-40473688243573833322008-01-10T14:40:00.000-05:002008-01-10T16:12:34.056-05:00The Joys of AppDomains<strong>Problem:</strong> We need the ability to launch a .NET executable that has ShadowCopyFiles turned on by default in the AppDomain.CurrentDomain.<br /><br />This is an issue because, from what I can tell, since .NET 1.0 there has been no way for an assembly to modify the settings in the primary AppDomain. The last time I looked at this issue was back in 2004 when <a href="http://sporkmonger.com/">Bob Aman</a> and I did some serious work on dynamically loading/unloading AppDomains on the fly. We enabled ShadowCopyFiles on the created AppDomains so we could update the assemblies loaded on the fly as well. Delving into these depths of the CLR and Fusion turned out to be a major undertaking as we had to slog through one of the most poorly documented portions in all of .NET. In the end we were able to work it out and everything came together.<br /><br /><strong>Solution:</strong> This time out, three versions of the .NET framework later, I was seriously disappointed to see how little this area has improved. Again it was back to the answer-less message boards and Google groups to try and scrounge up an answer. Fortunately instead of being several months worth of work it was only a few days before I was able to find an answer: Create a launcher executable so simple that it is extremely unlikely to ever change then have that executable create a new AppDomain with ShadowCopyFiles enabled. The launcher will then run <newappdomain><appdomain>.ExecuteAssembly(<assembly>) on the executable we want to have ShadowCopyFiles enabled.<br /><br /><strong>Pros:</strong> The portion that we really want to be modifiable will be. Also the solution is pretty elegant as the launcher is reusable anytime we run into this particular situation.<br /><br /><strong>Cons:</strong> This solution is really just a work-around (a kludge in the eyes of some) because we can't really change the settings on the default AppDomain a process gets. The launcher won't be modifiable at runtime, so it's really important that it's extremely simple and unlikely to change.<br /><br /><strong>Sources:</strong> Here's a list of a few places with helpful information on this problem and related problems.<br /><br /><ul><li><a href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=766783&SiteID=1">How to Set ShadowCopyFiles for CurrentDomain</a> - This is a post that describes the same problem I was trying to solve. There weren't really any helpful answers posted here, however it does have some discussion of the problem.</li><li><a href="http://www.codeproject.com/KB/dotnet/UsingShadowCopyFiles.aspx">Get rid of EXE/DLL locks by using ShadowCopyFiles appropriately</a> - This post has some excellent sample code for the Launcher.exe. It's a bit hard to read at some points.</li><li><a href="http://bartdesmet.net/blogs/bart/archive/2006/07/29/4146.aspx">AppDomain Shadow Copy Explained</a> - A great treatment of the ShadowCopyFile basics by Bart De Smet.</li><li><a href="http://www.codeproject.com/KB/cs/dynamicpluginmanager.aspx?df=100&forumid=128153&exp=0&select=980604">Plug-in Manager</a> - The article on fully dynamic plug-ins by Bob Aman back in 2004. This documents several lesser known quirks of the AppDomain system and contains some great explinations for the way the whole process works.</li><li><a href="http://blogs.msdn.com/junfeng/archive/2004/02/09/69919.aspx">AppDomain and Shadow Copy</a> - A blog entry by Microsoft's Junfeng Zhang that captures some of the ShadowCopyFile quirks. It's important to note that the API calls he mentions at the end have all been depricated and SHOULD NOT be used.</li><li><a href="http://tech.groups.yahoo.com/group/altdotnet/message/834">AppDomain Question</a> - An expert discussion of the particular problem faced here and suggestions of alternative ways to solve it. An excellent source for information.</li></ul>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-25457732.post-89549806644359026942008-01-08T11:05:00.000-05:002008-01-08T11:13:35.990-05:00Welcome BackI know it's been over a year since I last posted here, but I am back, and look forward to blogging some more. It's good to be back, and I can't want to post some new content dealing with the 3.5 framework and VS2008. There will definitely be more to come soon, in the meantime check out a new blog I've added to my must read list:<br /><br /><a href="http://www.lostechies.com/blogs/chad_myers/default.aspx">Chad Myers' Blog</a> - <a href="http://feeds.feedburner.com/ChadMyersBlog?format=xml">RSS</a>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-25457732.post-1166546497717418762006-12-19T11:41:00.000-05:002006-12-19T11:41:37.733-05:00Snow and happinessMerry Christmas everyone!Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-25457732.post-1163169572756684842006-11-10T09:26:00.000-05:002006-11-10T09:39:32.776-05:00A good storyI recently had a slowness issue keeping my old project from going into full BETA. The issue would show up on Windows 2k3, however not on XP Pro. Essentially what was happening was that a certain page in the project was taking 9 - 30 seconds to load with small amounts of data (between 30 and 100 records), obviously an unacceptable amount of time. Trace.axd revealed that the page itself was loading and processing in ~.12 seconds, however it was taking the rest of the time to render. This was a big deal, and beyond the scope of my code to debug, so I decided to get a little backup from Microsoft to find out why there was such a huge discrepency between Win XP and Win 2k3, as well as what was taking so long in the pre-render through rendering phases. Well three days later we found that the issue was within one of our component vendor's controls (we use DevExpress), and specifically the licensing call. As it turns out the licensing call was being made recursively every time the page was hit. This execution "explosion" was the cause of our problems. So we contacted DevExpress, provided them with all of Microsoft's data and our own data (traces, dumps, etc.), and to our surprise we were given a bit of a run around by their support people.<br /><br />At this point things look bleak (vendor giving you the run around with a critical piece of software), however all was not lost. The hero of the story on the DevExpress side would be their CTO: Julian. We contacted him with our troubles, he got to the bottom of it, we received a release fixing the licensing issue, and we were informed that in the future they would be rewriting the component in question in order to fully optimize it for speed. So in the end everyone was a winner, I have a product well on the way to production, DevExpress really came through for us (all is definitely forgiven there!), and all DevExpress users will probably be very impressed with their performance in the 6.3 release.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-25457732.post-1159271608498174682006-09-26T06:45:00.000-05:002006-11-10T09:25:58.616-05:00How hard can it be people?!?Alright, you have .NET, you have ORACLE, and you have LOB fields (BLOB/CLOB, i.e. a place to store huge amounts of data for anything (BLOB) or for up to 4GB of text (CLOB) for those who don't know). How hard can it be to make a relatively coherant set of simple conversions, particularly for things over 32kb in size?!?! Obviously it isn't easy, or we wouldn't have to go through all of <a href="http://support.microsoft.com/default.aspx?scid=kb;en-us;322796">this mess</a>. Needless to say I'm more than a little ticked off at both Microsoft and ORACLE on this one. It should be pretty normal to allow people to store things like files, images, and large strings on the database, and we've been doing it for years. So why does it have to be so hard to do? Why can't we just have a simple conversion from the .NET type to the ORACLE parameter? Why isn't there a simple way for us to pass BLOB parameters in .NET? It's time to get on the ball over there at ORACLE and Microsoft; give us a good solution.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-25457732.post-1158845319051257762006-09-21T08:10:00.000-05:002006-09-21T08:28:50.593-05:00Updates, DevExpress, Licensing, etc.First of all I want to apologize for it being so long since I've updated. Work's been crazily busy, and the last thing I've had time for is updating blog entries. I would, however, like to post on a couple of things.<br /><br />First a heads up. If you are currently working with DevExpress controls there may be a problem in Windows 2003 Server with their ASPxGrid's licensing call. I've noticed this with the site I'm building and when hosted on Win2k3 it takes almost three times longer to complete rendering of the grid on the server side. This issue may affect all their controls as well. I am currently working on that with their support team and Microsoft. If this is really a problem I'll post about it again and let you know.<br /><br />Also, speaking of DevExpress, I actually tried what was described in <a href="http://community.devexpress.com/blogs/ctodx/archive/2006/07/14/201.aspx">this post</a> and I have to say, Julian B, you rock! He actually took the time to talk to me and I believe him that the performance issues I've discussed will be looked into and resolved. Again, huge kudos to Julian. DevExpress is a good company, and though I have some issues with their controls (VS2k5 documentation) I am consistantly impressed by their commitment to customers. In other words, buy their stuff.<br /><br />Okay, now for some cross posting blog mentions:<br />-<a href="http://www.bluebytesoftware.com/blog/">Joe Duffy</a>: When you have one too many threads, or want to do multi-AppDomain instantiation (say it with me, Rich-Client Plugins) this is the blog for you. I look forward to more cool stuff coming from Joe.<br />-<a href="http://blogs.msdn.com/junfeng/default.aspx">Junfeng Zhang</a>: This just confuses me sometimes, but it's a good detailed blog about the .NET Framework.<br />-<a href="http://blogs.technet.com/markrussinovich/default.aspx">Mark Russinovich</a>: Mark is here for when Windows just makes you say WTH?<br />-<a href="http://www.longhornblogs.com/chris123nt/default.aspx">Chris's Corner</a>: Want some Vista hate? Go here, and not only learn what to hate about Vista but also why, when, and how much.<br />-<a href="http://blogs.msdn.com/tomholl/default.aspx">Tom Hollander</a>: Wow, I mean just wow. The P&P folks are the best at Microsoft. They're actually making things that are causing enterprise level development to be better, easier, and cheaper. Who would have thought? Power to the people Tom, <a href="http://blogs.msdn.com/tomholl/archive/2006/09/05/741336.aspx">power to the people</a>.<br />-<a href="http://www.longhornblogs.com/chris123nt/default.aspx">Peter Bromberg</a>: Who is this guy and why does he rock so much? I dunno, but keep up the good fight Pete. He's a great dose of humor, politics, and in your face programming. If the code doesn't work Peter will beat you and your code until it does, and you'll like it!<br /><br />Alright, that's it for now.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-25457732.post-1153321680355586002006-07-19T09:59:00.000-05:002006-07-19T10:08:00.366-05:00100% Pure MicroLiveI know it's been awhile, and I'm sorry about that.<br /><br />Lately I've been checking out the "Live Revolution" over at <a href="http://www.live.com">www.live.com</a> to figure out what all the buzz is about and to keep tabs on where <a href="http://www.microsoft.com">The Borg</a> are going technology wise for the more main-stream. This, scarily enough, lead me to create a <a href="http://dotnetabstracts.spaces.msn.com">"LiveSpaces" site </a>(currently MSN Spaces, but that will change just like messanger I'm sure).<br /><br />Now the more I think about this Live stuff, especially in light of Verizon's FiOS initiative I am slowly becoming convinced of a new web revolution, one where some of our old web-dreams will come true. In particular I think that the web will become a very likely place for very rich-client style apps and maybe even a host for XAML/AJAX apps with full rich client functionality available without the pain of Flash and the postbacks of server-side code. Who knows, this may lead to even more unstructured work environment possibilities, though I get the feeling that Europe, Japan, and possibly Austrailia are already there (please comment to me and let me know if they are). Anyways, I don't know whether or not these will be realities until my generation becomes management, however the idea of "flex-work" instead of just "flex-time" seems to answer some of the slave to the job via technology issues of today. Though I think about management, and they just won't want to give up control. It's an intersting though though.<br /><br />Anyways, let me know what you think.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-25457732.post-1145885141716700432006-04-24T07:56:00.000-05:002006-04-24T08:29:20.800-05:00Some quick ponderingAfter a conversation this weekend with a friend, I thought I might post some useful links for those going down a service or component oriented route. I hope these are helpful.<br /><br />-<a href="http://msdn.microsoft.com/library/?url=/library/en-us/dnpag2/html/EntLib2.asp">Microsoft's Enterprise Library for .NET 2.0</a>: The Enterprise Library's latest version is a really wonderful framework for the development of both Applications and Services. In summary it is divided up into six distinct Application blocks designed to cover basic abstraction that are also <strong>open source</strong>. Some of the most useful blocks are the Data Access Application Block (DAAB) and the Cryptography Application Block (CAB). Look for more and more pieces to be added to this block in the future. Also, if you are looking to develop applications for Oracle and use the DAAB you should read this blog further to see some interesting issues and hiccups you may run into. The DAAB is also great if you need to develop for several databases and need the .NET implementation side to be close to database agnostic. That being said this may be impossible with Oracle due to their seeming inability to work cleaning with a generic implementation.<br /><br />-<a href="http://www.oracle.com/technology/software/tech/windows/odpnet/index.html">ODP.NET and ODT for VS2005</a>: Though still in Beta, this release looks to be feature complete, and reasonably stable enough. Though Microsoft and Oracle will still bicker about smaller details it is still better to use the Oracle provider than the one included with .NET by default. The Oracle implementation is faster, more flexible, and will provide better integration than the standard .NET provider. It is also possible to modify the DAAB to use ODP.NET instead of the default .NET provider. I would also like to mention that the code changes for the DAAB are relatively minor (shouldn't take more than 30 minutes if you know what to change before hand).<br /><br />-<a href="http://sourceforge.net/projects/ingeniousmvc">Ingenious MVC</a>: By now all developers should be trying to learn and get used to patterns. One of the most powerful patterns available is the Model-View-Controller (MVC). Though a discussion of that pattern is out of scope for this post, I would strongly encourage reading Chapter 14 of <a href="http://www.amazon.com/gp/product/0321127420/qid=1145884310/sr=2-1/ref=pd_bbs_b_2_1/102-8265681-9306519?s=books&v=glance&n=283155">Martin Fowler's "Patterns of Enterprise Application Architecture"</a>. It is important to note that MVC is <strong>not just for Web Applications</strong>, it has plenty of application for rich client applications and should be included at the application form level (i.e. forms have controllers specifically developed for the application they are in, or the purpose they serve, controllers should not be "super-generic" for any/all applications). That being said my friend Kent Boogaart has developed an excellent MVC framework that is extremely straight forward and easy to implement. The base documentation for Ingenious MVC is very good, however it's usage documentation is not yet complete. I would suggest reading the documentation for <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnpag/html/uipab.asp">Microsoft's User Interface Process Application Block (UIPAB)</a> (and <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnpag/html/uipab.asp">here</a>) if you would like further information, however <strong>you should not use Microsoft's block</strong> as it is going to be replaced in approx. 1 - 2 years for .NET 2.0 and is extremely complicated. You should use Kent's framework instead as it is a simplified version of the UIPAB and is much more clean and consistent. I have full confidence that Kent's Ingenious MVC will be well supported and relevant in the future.<br /><br />Anyways, that's a good start, and if any of you out there have any questions, please feel free to comment, and I will be happy to respond as I can.Unknownnoreply@blogger.com3tag:blogger.com,1999:blog-25457732.post-1145362915900005652006-04-18T07:13:00.000-05:002006-04-18T07:21:55.916-05:00Go go Profile Providers!It was an interesting day yesterday. Got into a discussion about launching UI applications in another thread, and the general concensus was to have events fired from within a worker thread that are caught by the UI then Invoked against the UI thread, doing this to get around having to have a separate message pump. I ended up actually just launching the form in the other thread and refreshing it to update itself (it was just a simple progress bar form). it seemed to work out well, however I think in the future I will follow the other route, especially separating business logic out of the UI layer. Normally I would have done that, however in this particular application I just wanted something quick and simple, which it's working out to be so far.<br /><br />In other news, I wonder if anyone really will shell out $400 for Vista Premium. Anything over the $200 range seems rediculous to me in particular, however the new pricing scheme has yet to be released officially. Just doesn't seem right to me though.<br /><br />Also, if you know of anyone looking for an Administrative Assistant, or Data Entry person, paricularly in the psychology field, please let me know ASAP. My wife is currently looking for a job in those fields.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-25457732.post-1145279241998605642006-04-17T07:55:00.000-05:002006-04-17T08:07:22.016-05:00Happy Monday?Just received word this morning that the source code for the ASP.NET 2.0 provider model has been made available for <a href="http://download.microsoft.com/download/a/b/3/ab3c284b-dc9a-473d-b7e3-">download</a>. This is great news, especially since I'm just about ready to start on that portion of the project. I have one custom provider and its classes left to do, after which I am off to work on bulding the administrative portion of the site. All of which is rather exciting. Anyways, this is great news.<br /><br />In other news, I was kicking around ideas for "digital life" over the weekend. Essentially self-compiling, self-replicating, and self-modifiying (based either on programmed choices or a random number or both) code. This idea flew like an elephant with my wife, but I'm interested in getting feedback from others as well.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-25457732.post-1145019520233457202006-04-14T07:50:00.000-05:002006-04-14T07:58:40.240-05:00Happiness is MVCI must take a moment to send out a congratulations (though a day late) to <a href="http://kentb.blogspot.com">Kent B.</a> and his release of the new <a href="http://sourceforge.net/projects/ingeniousmvc">Ingenious MVC</a>. I haven't had the chance to get into it much, I hope it should turn out to be as well conceived as its name. That being said, please support Kent and his hard work. This component should really help out for my current project, especially considering the "mess" that is the UIPAB. I am guessing that, as usual, Microsoft will wait till the last minute for generating something useful in this regard. Disapointing, yes, but the way of the industry.<br /><br />As far as project progress, the basic Membership converter is complete, and I'm rather proud of that little app if I do say so myself. I'm almost two thirds of the way through the Role Provider, though I would like to use roles to exclude access to certain pages in the site, however the setting up of those rules seems to be relegated to the ASP.NET Configuration utility, which is great if you're running on a Microsoft SQL Server platform, but practically useless in any other context. Needless to say this is a good bit frustrating.<br /><br />Also I would like to give a hello to anyone coming over to this blog from LiveJournal. It's good to see you here, and I look forward to any comments you may have.Unknownnoreply@blogger.com1tag:blogger.com,1999:blog-25457732.post-1144932582202464652006-04-13T07:45:00.000-05:002006-04-13T07:49:42.210-05:00Semi-colons, and other such stuff.Another day another Oracle and .NET don't agree moment. This time about semi-colons. Oracle wants them in Oracle, but adds them automatically in .NET. The Microsoft provider for Oracle wants them in .NET. Again, nobody agrees. This makes life frustrating when trying to develop an application. Not a show stopper by any means, but still a pain when there is a lack of consistency. That being said, I finished the Membership Provider yesterday and have moved on to writing a conversion application that will hopefully be basically finished today.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-25457732.post-1144847193697478222006-04-12T07:49:00.000-05:002006-04-12T08:06:33.706-05:00Goodmorning Vietna... I mean .NET!It's another day working on the Membership Provider for my project. I've been having a rather interesting time getting it to do max password tries without requiring a password Question and Answer. I hope I can get away with it in the end. I don't really want or need the Q&A section for this project so I'd rather do without it.<br /><br />In other news I came up with a somewhat slicker way of dealing with the -1 issue between Oracle and .NET. It's made all of the database code (except in one instance) much more generic. Just create a database, add a command when you need one, add params, and execute. No muss, no fuss. Connections are managed and cleaned up in all cases save dataReaders, and those you just need to dispose of when you're finished. Again, rather straight forward and easy. I'm glad to finally be to this point as it makes database interaction very slick. I have to admit, the DAAB was definitely a good idea. I can only imagine how nice it is when hitting SQL Server 05.<br /><br />Anyways, enough rambling on that. There's one piece of interesting news, and that's the MSFT Vista delay. I am very disappointed in the execution of the .NET portion when it comes to Vista. There are some excellent articles regarding it by Richard Grimes. <a href="http://www.grimes.demon.co.uk/dotnet/vistaAndDotnet.htm">This article</a> deals with the amazing disappearance of .NET from Vista, and <a href="http://www.grimes.demon.co.uk/dotnet/man_unman.htm">this article</a> gives a compelling discussion on .NET managed code that is, in fact, repeatable and un-biased. It also shows, I think, why MSFT is crazy to give .NET a smaller role in Vista. Especially considering the impact multi-core processors have on .NET execution performance.<br /><br />Do you have an opinion? If so, please share it.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-25457732.post-1144759341066146662006-04-11T07:26:00.000-05:002006-04-11T07:46:07.676-05:00Decisions, DecisionsAfter the past two days of Oracle craziness I am most definitely ready to start work on building the site I've designed. The biggest question is whether or not to finish the providers or the data conversions first. To do the data conversion I need to finish the Membership provider at the very least, however I should be able to get some reasonable test data into the new schema for further development. So I'm just deciding that now.<br /><br />I do currently have a functional version of the DAAB that works on .NET 2.0 with the ODP.NET Beta on Oracle 10g (tested on XE, however it should be just as happy with the full blown version and that's where this particular project's data store will be living) and would be happy to share any help I can with that.<br /><br />Other than that I'll post more news as I come across things.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-25457732.post-1144700165195835672006-04-10T15:10:00.000-05:002006-04-10T15:16:05.203-05:00SOLVED!Ahh, the joys of Oracle and .NET and what happens when companies are focused on themselves versus those that use their products.<br /><br />Anyways, enough philosophical ranting. The solution to all of my Oracle 10g on DAAB problems is shown in <a href="http://forums.oracle.com/forums/thread.jspa?forumID=146&threadID=378466">this post</a>. It's worth a read if you plan on doing any Oracle work using the DAAB. That being said, they should hopefully have a less painful and more direct work around for the issue instead of me having to recreate every parameter on the likely chance that they had their internal size variable set to zero instead of -1.<br /><br />So it's on to ASP.NET Providers for me, and possibly looking into converting the security information for several users in the near future. All interesting possibilities indeed.<br /><br />Let me know if anyone out there in blogger land would like some further information on the issue.Unknownnoreply@blogger.com0