Much aBlog about nothing...
I have found that a lot of simple things are like that, it is almost impossibe to find real basic instructions. In my first explorations of c#, I had trouble declaring arrays. I would keep typing "new Array(" and then ... well I'm sure you know the feeling.
I think we all have those days...
It would be more efficient to write the code like this: <codeSnippet language="C#"> myValue = (string)myHashtable[myKey]; if(myValue != null) { ... work with it here ... } </codeSnippet> The reason for this is that it reduces the number of lookups. In your example, you're doing two lookups: ContainsKey and then the indexer. In my code, you're doing one lookup and then testing the result which, if the dictionary doesn't contain the key, will be null.
Hmm, interesting. I guess I had it in my head that attempting to index the hashtable on a non-existent key would throw an Exception. Is that the "old VB6" way? Something in my brain is telling me that. Thanks for the opimization. Mike
I admit I spent half an hour looking for the same thing. I was looking for a 'get' method! I feel accessing should be included in code snippet in the help.
As soon as I setup a server at school, my team is going to start doing this - agg blog for us to track everything we do.
You mean to tell me that people on projects in workplaces know what the other people on the team are doing and are looking for better ways to communicate information? Weird... I want to work somewhere like that.
IMHO, the weekly 15 minutes team "Standing Meeting" from Extreme Programming is more efficient... or at least is a good complement.
I recently tailored ScottW's phenomenal .text 0.94 source for our company and particular project environment. My experience with it is on my blog under the .text category. All users can post to any project and subscribers are managed in the weblog by project. We haven't made the leap to RSS client aggregators on desktops, but no one has a problem with the email-subscription model I put in place. In a way it beats RSS since subscribers receive all comments via email as well. I, of course, use Newsgator. The release of the project weblog was pretty successful, and I was asked to put a similar weblog system online for Proposals (which I did in a couple of days), as well as one for Opportunities. When our people have Newsgator installed on their desks, I'll know our project weblogs have been a success.
Hey Mike, who could this client be? could it be satan? .. or just W. later,
Have you installed IISLockdown and/or URLScan?
Mike: Ive had a similar issue in the past and there was an error in the web.config file. Try running the project (CTRL-F5) and if there's an error with the web.config, it will alert you as to where it is. I hope this solves your problem.
Also, make sure the VS Debuggers group has permission to access your application's directory.
This is where I turn when I run into ASP.NET Debugger problems (just rarely enough that I don't remember the answers offhand): http://www.gotdotnet.com/team/csharp/learn/whitepapers/howtosolvedebuggerproblems.doc
Make sure you're not running URLscan or IISlockdown wizard, if you are you need to configure URLscan to allow DEBUG.
They probably assumed you would be smarter about how you returned your SQL results :-) No one in their right mind ever returns 13,000 rows from a query to output on an ASP.NET page. Implement paging or filtering at the SQL level.
<rhetorical question> Why implement paging at the SQL Server when the grid does it for you? </rhetorical question> In this case, it is perfectly valid to return 13,000 rows to the middle tier. I would never consider sending 13,000 rows to the UI. Mike
I'd basically agree with Jesse: in most cases (OK all cases I've ever seen), it makes more sense to limit your SQL query to what you can reasonably handle in the UI layer.
WTF? Might I ask how you came across such a strange video? Here's another gem from the Germans: http://story.news.yahoo.com/news?tmpl=story&cid=573&ncid=757&e=10&u=/nm/20031203/od_nm/germany_cannibal_dc
Its an honest to goodness workplace training video for the driver. Granted they made it funny, but it really is for training.
I agree with you, but I also think that there may be other factors that will drive the use of the CLR in Yukon. PAG and some of the well-known authors will introduce some patterns for using the CLR that will become part of the common development practice for utilizing the CLR in Yukon. I expect to see some significant coverage of this on MSDN next year too.
hi mike, I didn't extend it because it was a private work for the company I worked in...
AndNode andNode = node as AndNode; if (andNode != null) { ... return buf; } OrNode orNode = node as OrNode; if (orNode != null) { ... return buf; } I think. Haven't coded it up.
You could also do a string compare on the type. switch(node.GetType().FullName) { case "Namespace.AndNode": ... } You may also want to think about redesigning your classes. In your current design you'll need to recode that method every time you add a new node which generally isn't a good sign.
When you add a new node *type* is what I should have said above.
I agree, best to implement Process inside each subclass.
At simplest level, you could put a "Process" string property in a node. That prop/method could return your node.left + node.OperatorText + node.right. The instead of calling Process(node) to get a string, you would just call node.Process Avoid names like process when you can, they are not clear ;)
Thanks for the quick feedback folks. I will consider redesigning this - the Process is supposed to take a query tree and make a big SQL string out of it, based on a bunch of knowledge about column and table names has. I don't know if I want to embed that knowledge into the nodes of the tree or not. Oh, and the actual method name isn't really Process. I'm removing details that aren't necessary or may be considered proprietary.
Any reason why you don't use the polymorphic behavior of objects and do this: public string Process(AndNode node) { return String.Concat(Process(node.left), “ and “, Process(node.right)); } public string Process(OrNode node) { return String.Concat(Process(node.left), “ or “, Process(node.right)); } public string Process(TermNode node) { return termNode.term; }
Based on your later description of the problem, maybe you should consider using employing the Interpreter design pattern (GoF) to represent your syntax tree as a set of composite functor classes. Interpreter http://www.dofactory.com/Patterns/PatternInterpreter.aspx Functor http://www.eli.sdsu.edu/courses/spring98/cs635/notes/command/command.html
One more thing, remember the Single Responsibility Principle (SRP) -- I see you got some advice to place the process behavior in the classes themselves. This may be a good thing, be revisit the intent of those classes first. A class should only be defined with a single set of consistent responsibilities. If you find moving this behavior causes your Node classes to have behavior that violates there original intent, you are violating the SRP. http://www.objectmentor.com/mentoring/OOPrinciples
Both are open source, so feel free to help out with the controls! :-) You can see the RssFeed control in action at: http://aspnet.4guysfromrolla.com/blogs/aspnet.aspx">http://aspnet.4guysfromrolla.com/blogs/aspnet.aspx and on the ASP.NET home page on 4Guys: http://aspnet.4guysfromrolla.com/ More info on both controls at: http://scottonwriting.net/sowblog/CodeProjects.htm
As many others have said, you probably want to move Process into each class. As a more plain-English way of saying what CausticMango said formally, andtime you find yourself with switch statements to determine what type of object you have, best to move that functionality into each individual class... hth
Oh my... I'm a bit scared...
Answers to many of the questions above should come in the forthcoming Yukon Full-Text Search paper due out in a few weeks. There are filters out there (third party and Microsoft) for other document types --> a number of XML filters, a PDF filter by Adobe, Corel has a WordPerfect filter apparently, and there are also supposedly filters for compressed files and lesser-known file types. A few people have ventured to write sample filters in C# which I think is great. I've done similar work, but more in reverse -- putting together code to get data _out_ of IFilters, Wordbreakers and Stemmers using C# (for testing purposes). I'll be posting that shortly. There are some more exciting multi-lingual capabilities coming in Yukon but I'd like to let the paper describe them :) Thanks, --andrew
XBOX deployment ! :| Omg would you care to elaborate ?
It was a slip of the tongue... But the idea of it...hmmm. Another friend of mine said that apparently some people are installing Linux on XBox consoles. Its cheaper because the hardware is subsidized... Mike
Its not the MS CLR but.... http://primates.ximian.com/~miguel/all.html#12%252F09%252F2003+12%253A00%253A00
I didn't say/er mean that... grrr.... I meant XCopy and Said XBox... I was up all night - I was tired... Joel
Feel better?
That has to be the most convoluted piece of code i've ever heard about. Had me rolling on the floor. :D :D
I would say that in general to stay away from static methods. The only exception for this is methods like the Parse method of Int32. Since you would not want to do something like Int32 value = Int32("123") Because constructors are not meant to be hefty just only initializers you would instead want to call a method which implies processing. Int32 value = Int32.Parse("123") You would not want to do something like Int32 value = new Int32() // if this was possible value.Parse("123") // or value = value.Parse("123") That is when you want to use a static method because you do not require an instance of the method. Now for the business services you will ALWAYS want to create a unique instance of the class or at the very least make a Singleton object. Also remember, static methods cannot be overriden in inherited classes. I just found it easier to maintain objects that are instantiated versus ones with static methods. Why, well I wrote an exception manager class and I decided, well for ease of use I'm going to make all the methods static and use a singleton approach. Well its a nightmare now if I want to change functionality or something else on the object. What if I wanted to inherit the manager into something more specific. I can't, I'm stuck. Not to mention I had to use two objects to get the same thing one would have done. It wasn't a true singleton. It created an instance of the instantiatble exception manager and called its methods from the static methods. NIghtmare when I look back on it. But guess what, everyone is using it and I'm stuck. If I had done it right I would have made the exception manager abstract and then provided some base functionality then forced each app to at least create one class that implements the exception manager in an appropriate manner for their application rather than forcing all applications to fit into one container (set of methods). Just examples of my bad experiences with static methods ...
When a method does not consume or modify state information within a class, it is perfectly reasonble to expose it using the static modifier. Your static methods then become more of a function library that you have chosen to associate with a particular class. One particularly valuable use of static methods is found in the factory design pattern. Here, you need a place for logic that will determine what object to actually create (and where) for return to a client. My guess is your performance concerns are not valid. Certainly, tho, if one would normally have an instance of the class available, probably not wise overdoing the static methods. I would really need more information on this business facade layer implementation...
There is no performance issue. The relevant issues are things like inheritance (as Adam pointed out) and remoting. Static methods do not inherit, nor can they get remoted if you may need to use them in a distributed system. However, they are still perfectly reasonable, if not prefered, when you are creating simple libraries of functions.
Your co-worker is right on. This is the first step to moving to a service oriented architecture ( see a collection of thoughts on the topic here: http://udidahan.weblogs.us/archives/012028.html Performance is not an issue here. Note that what is being discussed is a business facade layer. This pretty much is supposed to define in what ways the business services can be called. This is not some implementation of a domain model. Think of it as the API of the business. These are services that don't belong necessarily to any one class, but rather coordinate work among many classes.
Udi, I know, that your knowledge of soa is good, but i do not think, that exposing some method as static is a move towards soa. You would have to change more, than only few method. But certainly you know it, so nothing more needs to be said here :)
Radim, Kudos ! You've done it ! You've managed to push me over the edge to finally ( FINALLY ) write a post on migrating to SOA. I'll post a link here too later.
Although not as comprehensive as I'd planned ( for lack of space ) here it is: http://udidahan.weblogs.us/archives/012683.html I didn't much get into the importance of static methods per se, but there was a strong undercurrent.
I agree with the statement that static methods are great for function libraries. I would even go as far to say that it becomes a non-issue if you class is sealed. Since it cannot be inherited then there is no reason not to have static methods if you really do not need to maintain state. I can some what see why an SOA layer can use static methods. There really is no need to inherit SOA services. Of course this makes me wonder how SOA scales into remoting and such. But sometimes I'm always thinking ahead, saying to myself, you know I could extend this object in the future and if I force it to this limitation now because I'm not planning on extending it but I could see management saying 2 months after the release that they would want that functionality ... well then ... I'm discovering maintaining API's is tricky and political business. Specially when they support line-of-business applications. :D
Adam, Your comment touched on a very important, specific point. "management saying 2 months after the release that they would want that functionality ". They want functionality. They don't care about objects, inheritance, remoting, etc. At the most basic level, adding functionality means adding another method to a given service - or adding a new service with that method. Then, use the new functionality in client code. I don't see this as having much to do with extending objects, inheritence, etc. Its about the business. Of course, when it comes to implementing the functionality, use all the tools and methods that OO gives you - I mean, why not ? Finally, SOA doesn't scale by remoting - whatever that means. SOA scales by either scaling up the server a given service is running on ( adding RAM, more CPUs, etc ), or by scaling out to more servers. Because of the stateless nature of a service, you don't have state affinity issues, so its that much easier. Finally ( and this time I mean it ), SOA is ALL about line-of-business. Yes, it's sometimes tricky, but hey, that's why we get paid the big bucks.
I can completely relate to this post. Until last year, I was working for a consulting company, and I always felt like I was doing more than just the technical parts of my job. I was helping to respond to RFPs, participating in sales meetings, and other non-technical activities. And while I could do those things, and didn't mind doing those things, it bugged me that my job had to be more broad, while others got away with saying "I'm not technical". Especially since some of these people didn't do their own jobs very well. (Sales, marketing and PMs for example who couldn't spell or write coherent sentences, for example.) To solve the problem, I now work as an independent consultant. I still have to do all those non-technical things (in fact, I do more of them), but I am no longer annoyed by dumb excuses by sales/marketing types.
I have IE set for "Every visit to the page" and I don't have that problem in any ASP.Net apps.
500 connection pools because of the change in security context. What's interesting when people also specify a min of 10 connections in a pool too.
I'd like to change the code generation to replace all Friend methods and properties with Public. Can you do this with the annotations? I doesn't look like it... Of course, the question that'll come back is "why?". Because in order to write reusable code, I need to work at the datatable and datarow level of my strongly typed datasets to do some work (getting column names, etc). Given that I'm using Microsoft prescribed design patterns and layering my application, and given that we've decided to use datasets to transport data between layers (another big topic there) the Datasets need to be in a layer accessible to all other layers - we call it Common. Now, the code generated as Friend accessible is no longer accessible to my other projects/layers so I find myself doing a search and replace 'Friend' to 'Public' whenever the dataset needs regenerating. What irks me is that if my application wasn't layered, I wouldn't have this problem. Any ideas?
Here ya go: http://www.microsoft.com/sql/reporting/howtobuy/faq.asp
It'll be free - similar to OLAP. But its a dog right now. If you do some more research you'll see.
I think saying it's a dog without telling us why is pretty sad. I can see that at least one other blogger (http://weblogs.asp.net/sjsmith/archive/2004/01/19/60468.aspx ) is excited about the product and he is using it. Have you used the product Thomas?
Not quite as simple as saying its free. Reporting services comes with SQL Server. Therefore each server that has reporting services requires a SQL License. If you want to use it in its raw form the default interface is through the web, therefore you have 2 choices have 1 sql box with IIS installed and thus 1 SQL license or 2 boxs on with SQL on it that contains your data and one with IIS and Reporting services (and a SQL license) on it. So if you don't want IIS on your SQL box then you will need a second SQL License for your IIS box. Hope that makes sense, it is very subtle, and dependant on the how you want to secure your main SQL boxes.
Mike - I remember some review of this thing talking about it not being programmable with C# or VB.NET. Did you see anything in regards to that?
Both great groups, who produce good stuff but it seems like you are comparing the qualities of apples to those of oranges.
THe problem is this: there are serious issues with today's tools like VS.NET, .NET 1.1 etc. Instead of cranking out fixes for those issues (I mean, read the newsgroups and you run into a lot of them), we get hype about next-gen technology which seems to fix the issues we have today. That's not helping us one bit :), it leaves us with the feeling that there is no customer support. Also, how many people have the whidbey alpha bits? 10,000 people? For those 10,000 people Microsoft puts up articles how to do this and that. For the other 6 million people using .NET today these articles are completely useless. However 50% of the articles are for these 10,000 people, and NO fixes are released. It thus comes down to this: - there are issues, we ignore them - instead of fixing the issues, we hype the next-gen tool which will fix the issues eventually. That's no customer support, something that is also part of 'quality'. Microsoft is so eager to tell everybody that they listen to their customers. Well, I really don't see a lot of customers demanding NO support and hype instead. "When indigo arrives", that's at least 2 years away. Do you remember what you wrote 2 years ago? Was it targeting 2004 tech? I don't think so, because you can't make a living from writing software that is ready to rock in 2006, today, and that's what's this is all about: we need solutions TODAY, because the majority of the customers of .NET deal with issues TODAY with today's technology.
Looks like somebody already posted it to the discussion forum on his site: http://discuss.fogcreek.com/joelonsoftware/default.asp?cmd=show&ixPost=108869&ixReplies=18
Whoa... I can understand being a geek and all, but naming your child as Version 2.0 is just plain wrong. Think of the bullshit he'll go through for his entire life...
No self-respecting geek would do this but a dork geek-wannabe would. :)
sooo, when he goes to kg he will be V. 2.01? How about high school? V. 2.04.. when he gets married he can be V. 3.0! That is a whole new version, not only some features added.. When he gets old and retires he will probably be ... 95, full of bugs, loosing a lot of functionality and crashing all the time.. Sorry, couldn't help.. :^)
Really??? Wonderful :)
Handy if the Bogyman keeps stealing your floppies eh?
Just wait. Next they'll have "low in carbs, no transfats". You just wait.
Contrary to popular opinion, @table varibles make as much use of tempdb as do #temp tables. See http://support.microsoft.com/default.aspx?scid=KB;EN-US;Q305977& Question 4. I believe the main benefits of @table variables is that SQL Server knows the scope is limited so it can minimize locking, transaction scope, etc. I agree they're better than #temp tables and much, much better than cursors.
Thanks for this! Now I can update my code to be much more scalable :)
Timely question: http://aspnet.4guysfromrolla.com/articles/021104-1.aspx Subscribe to the great 4Guys RSS feed: http://aspnet.4guysfromrolla.com/rss/rss.aspx
This probably does what you need: http://www.metabuilders.com/Tools/DialogWindow.aspx
I'd agree you should go with the MetaBuilders deal if that does what you need. I've worked with a function that sets form fields on the window.opener form, which is essentially what the Metabuilders control does. Here's a simple function that does this: function SetImageId(imageID,imageSrc) { var i, inp = self.location.search.substr(1); var queryString = new Object(); if (inp.length > 0) { var ary = inp.replace(/\+/g, " ").split("&"); for (i in ary) { ary[i] = unescape(ary[i]).split("="); queryString[ary[i][0]] = ary[i][1]; } } var form = queryString["formname"]; var field = queryString["fieldname"]; var field2 = queryString["imagename"]; var srcString = 'uploads/images/' + imageSrc; eval("window.opener.document." + form + "." + field + ".value='" + imageID + "';"); eval("window.opener.document." + form + "." + field2 + ".src='" + srcString + "';"); window.close(); }
Is the question "how to do this" or "is this the right thing to do" ?
THOUGHT IT WAS A GOOD VIDEO JUST BRINGS THE SAFETY ASPECT TO LIFE BUT MADE FUN FOR A CHANGE ( UNLIKE THE GERMANS!!!)
Here's some more to play with: http://www.eggheaven2000.com/Website_Eggs/more3.html
just add "dotnet" to any search phrase and tab over to "Groups" ... you'll get only newsgroup hits. this tip used along with their toolbar search control is awesome. enter "dotnet marshalbyref" in the control and get all newsgroup hits. MSDN search is a joke. The Q is... will be soon be paying for google access now that they are going public???
You could always just narrow the search results by appending site:microsoft.com to your search...
prepending site:microsoft.com usually gives me better results than using the google.com/microsoft search engine.
Get the google deskbar, you can make custom searches. Googling "someClassName class" is pretty good for framework classes
Some people take things too seriously. I don't think anyone, publishers, authors or readers, has the expectation of being a Jedi master in [your programming platform here] in 21 days. It's just a clever marketing way to say, "We'll give you the basics and be as straight-forward as we can about it because you're really busy and important."
Does this mean that we should "JUST" start becoming masters of Windows 95? Are you also suggesting that due to the rate of change in our industry there are no experts? I've read that if you take One hour per week to study a subject you will become an expert in 4 years. Along that line - if you take 10 hours a week (probably about average for most type A personalities) then you can achieve the same goal in about 5 months. What I think needs to be quantified is what in fact you are teachning yourself in 21 days. If you are teaching yourself the fundamanetals of something (the very basics of C# for example) - this "may" be achievable provided that within that 21 days you spend at least 1 hour per day. I don't think I've ever seen "Become an EXPERT .NET Architect from Scratch" in 21 days before. Just my 2cents
Very helpful. I couldn't find a decent explanation of this anywhere else. Thanks!
Just noticed that the loop should be <= @MaxRowId. As it is, the last row of the table is never checked, as RowId starts counting at 1 rather than 0.
VB.NET
Ditto. You will see more of this sort of "programming within properties" thing coming in Whidbey too!
I would like VIDEO training for forklift. best regards chumpol kseg@kseg.co.th
You have been Taken Out! Thanks for the post.
I haven't had much luck installed Reporting services. You might look at ActiveReports, I've heard a lot of good things about it. http://www.lazycoder.com/weblog/index.php?p=41 http://www.lazycoder.com/weblog/index.php?p=42
Nope. RS is a purely connected model.
ActiveReports for .NET from www.datadynamics.com meets all the requirements you mentioned.
I'll take an Admin who silently overlooks his sites and who doesn't have time to flame ;) http://www.winternet.com/~mikelr/flame79.html
This is really interesting and it will help me with something I am doing. -Mathew Nolton
You really should get a raise.
I think the matrix spoof is really funny
Search MSDN for "Connection Pooling for the .NET Framework Data Provider for SQL Server" If you not change the "<....>" in the ConnectionString you have 1 connection pool.
nUnit 2.1 nAnt 0.84 (free) or Visual Build ($99)
You'll find some in the SharpToolbox. Categories are Testing, Build, Profiling. http://SharpToolbox.com
would like to do some training
Hi, I would like more information and your experience about porting CQL parser to .NET platform because I want to use this solution for my project (digital library gate SRU/SRW). Thanks Lubos.
good artical ,thank you!
great
I would like the video
not sure yet
Good Morning Sir, I Would Like to get a video tape for training forklift Thank's
Only one connection
dgdgdgd
thanks a lot
We need 5 pool connection
How about concurency and threat savety? Security testing (buffer overflow inspection, CSS vulerability)?
Hi, I was wondering if you'd gotten anywhere with CQL since you blogged this? Rob Sanderson
Is it possible to pass the table datatype as a parameter to another procedure? If not is it possible with a cursor? If not is it possible at all to pass a recordset as a parameter?
garbage
This is how I would go about it: You spent an hour a day studying programming for 21 days? Great. You put in 21 HOURS, not DAYS. And that's less than a day's workload. (If you do the math, you'll be spending 21th day's worth of studying on your 441st day of studying, if you keep the one-hour-a-day regime. And that 441 days don't count the holidays and sundays. If you were to add these in, it's probably going to take at least 2 years.)
good work
i think 500 pool
http://dotnetjunkies.com/WebLog/stefandemetz/archive/2004/07/17/19594.aspx
There seem to be two approaches to handling this situation: 1. Use the Destination property instead of the Url property and also include a Via to set the next hop for the message. The following code should do the trick for you: this.Destination = new EndpointReference( "http://localhost/service.asmx", "http://localhost:7777/service.asmx"">http://localhost:7777/service.asmx"); 2. Use a logical name for the service with a combination of the Destination property and the SoapActor attribute on the WebService itself. SoapActor("urn:MyService") on the WebService class in conjunction with the following at the client should do the trick: this.Destination = new EndpointReference( "urn:MyService", "http://localhost:7777/service.asmx"">http://localhost:7777/service.asmx");
Sorry, the URIs got crapped...
Good call on this; I've always wrapped an #if debug around a System.Thread.Sleep() for WinServices.
Should NOT start with the CMMI process template? Explain...
Well, if a company has no particular SDLC in place, would they choose the MSF Agile or the CMMI VSTS process template for their first Team System project? I would think they would choose Agile.
Can you help me to find some .NET training for my Chinese friend who lives in Beijing. I would like her to learn and perhaps get certified in .NET. Reply chernack@gmail.com
In one of my presentations I demonstrate the customization of a process template using the Imaginet Team System Customization toolkit.. Here I demo adding a "Threat" work item type and provide fields to capture categorization (STRIDE) and Prioritization metrics (DREAD). I do agree that this should be encapsulated in the process template itself. This is also not in the current builds of MSF for CMMI Improvement that I've seen either. I would suspect that at some point someone will likely post a work item definition to handle this at VSTSRocks.net. Heck, I could probably post the work item definition I created for the demo - however, the schema of the work item type and underlying process guidance has likely changed enough for it to be invalid in any release other than beta 2.
It seems to me that a difficult, but less important feature (3, 3, 9, 9) = 24 (4.8 weighted) could easily outweigh a crucial but easy feature (5, 6, 2, 1) = 14 (4.3 weighted). Do you apply a "reality check" to the final priority list to make sure it makes sense? Or does this all wash out because the top 60% of the list is going to get done anyway?
Yes, a reality check is in order, and usually that's where the weighting can adjust things if they are considerably out of whack. Or just deciding to rank them differently...
Actually, the formula could be made a bit more comprehensive, yet the complexity of the formula doesn't justify the difference in the results - typically. Also, take into consideration that you will likely place a "weight" on the different perspectives of the requirement. By default, eveything has equal weight of 1. If you wanted to place more weight on crucial features over risk and cost you could give it a weight of 2. The formula would look more like: Priority = (Benifit*BenifitWeight + Penalty*PenaltyWeight)/(Risk*RiskWeight + Cost*Cost Weight) Notice how the above is slightly different but slightly more difficult to do on a piece of paper - but possible in Excel and in Sharepoint. If you wanted to get even more detailed - there is yet another method that takes into account the overall % of the requirement in the total number of requirements in a list. This method, however, does require Excel to calculate and impossible to implement without a lot of extra programming in Sharepoint.
What's also great about Shelving is that you can move from one computer to another without needing to check in your code or moving the files yourself... something that's a huge pain in the A$$ with VSS.
I felt like you did at first, but I eventually just got good at writing FxCop compliant code. Of course, there are some rules I turned off, so that I wasn't writing compliant code for the same of writing compliant code. With just a couple rules ignored, most of the code we produce is 98% FxCop-correct.
I made a little overview a while ago. http://bloggingabout.net/blogs/pascal/archive/2005/11/29/10403.aspx http://www.sqldownunder.com/ and http://aspnet.libsyn.com/ are new to me.
Look at TestDriven.Net for running NUnit or VSTS tests in the IDE. It's the fastest way to kick off unit tests or start the debugger in a unit test.
The asp.net podcast url is at: http://aspnetpodcast.com/cs11/default.aspx. The libsyn url got setup incorrectly and actually shouldn't be there. Wally
I have a complete collection of podcast blogs at: www.dotnetslackers.com/Podcast/re-default.aspx Thought you might be interested.
I thought you are supposed to say Holiday Party? :)
I guess you can map in this way the atribute names from TeamSystem into MbUnit too.
Hi Mike, One correction on the link above. You can learn more about the project on my site at: http://webproject.scottgu.com. Hope this helps, Scott
"If we don't use Team Suite, then we don't have the Microsoft testing tools, so we'll use NUnit instead." Actually, if you just need the unit testing tools you can go for Team System Developer (which is cheaper than the full Team Suite). Team System for Testers (and Team Suite) just has more test tools, like load testing for web applications, grouping of test cases etc.
Can you post your xsl files that you created?
Take a look at this. I had to get rid of the javascript in the xsl and it worked like a charm. http://confluence.public.thoughtworks.org/display/CCNETCOMM/XSL+Transforms
Hi, great Blog... How is the stand of your MsTestCoverage.xsl + convert utility? It will be great if you could post them...
you said: I worked on building project files for NDoc and MSTest that would be executed by MSBuild. Not so hard to do....I have been trying for days to get this all to work....no luck...could you post your projects and any code required ?
It is like comparing apples and oranges. SharePoint is a strong intranet solution and provides many more features than a wiki would. This includes rich workflow, document management facilities, personal "my sites", customisable layout etc. Having said all this, MOSS (effectively SharePoint 2007) allows the provisioning of Wiki sites within it as well as making major steps forward in the areas I mentioned earlier. I guess more important to your question is what are you looking to do with your solution? What problems do you want to solve? That would dictate more which way you should go. - JD
On the areas that they have in common Sharepoint is like a wiki on steroids. This has it's pluses and minuses. On the plus sign Sharepoint support editting on a WYSIWYG interface (via Word or Excel for example) while most wikis have a rather rudimentary UI to edit information. Yet, at the same time wikis can be viewed and editted with just a browser.
As a SharePoint developer for a major governmental concern that projects force to break other country's toys, I have to say: You are not comparing similar tools. This is like comparing an apple to a rose. Sure, they are both plant product, but there the similarity ends. Likewise, they are used for completely different things. The closest thing you can say they share is the ability for users to contribute and control content. O.K., the above may be a bit of hyperbole, but, you can use Word to perform calculations, but wouldn't you rather use Excel?
Sharepoint now includes Wiki so what does it matter?
At OSCON I got a demo of a new "wiki" created by some ex-MS devs, they used to be on the Sharepoint team. The idea was to take the wiki concept, but iron out all the headaches of having to learn wiki markup. The end result is close to sharepoint. So I asked them, "Why am I using this instead of Sharepoint?". They had some good answers and are coming to my workplace to give another demo before we get too far into the Sharepoint rollout. A lot of the problems they were solving had to do with organizing content.
Check them out at opengarden.org, DekiWiki.
In comparison to 2003 and before, I find that I have a lot of difficulty navigating the open documents in 2005.
I have the "Close All" command on a button and I use it all the time. "Close All but this" works sometimes, but when I feel lost, I'm rarely on the one file I was looking for ;)
I also have faced this problem. This may be due to insufficient RAM.
One of my pet peeves with .NET is that the Message property of FileNotFoundException gets populated with the filename, rather than a message. It's just completely backwards. It means that if I'm writing code where, at the top level, I want to present the user with what went wrong when an exception happens (and in some cases, file I/O may fail for all sorts of reasons ranging from network drive unavailable to an invalid filename to lack of permission to file not found to... well, stuff I can't think of. So catching a higher level exception type is good here) I have to first check FileNotFoundException specifically and translate the Message into something human readable ("File " + ex.Message + " cannot be found"), then hope that every other exception type that might get thrown is not so stupid.
The particularly stupid thing is there's absolutely no reason FileNotFoundException shouldn't have had a FileName property to store the affected filename in so that the filename could be accessed programmatically. But since it doesn't, any program that needs to know the filename needs to use the Message property, which means that Message on this exception type can never be fixed.
Grr!
If only people actually followed your guidelines...
So what it your first reaction to using the Team System
Mike,
I use them in my Web Deployment projects to sync up any schema changes from my local box to the staging server.
I don't use the Data sync but yeah - unit testing is a fantastic use for them.
You could even: -
1. Backup what's on the staging server.
2. Overwrite with sample data
3. Delete sample data
4. Restore what was on the staging server.
Cool huh.
I totally agree.
As soon as I heard about AzMan I realised the potential it had (this is way back around the time it was released). At that time the documentation and examples available were limited and the tool seemed to gain little popularity.
Now, the documentation seems to have improved and more people are talking about AzMan. Net 2.0 added the AuthorizationStoreRoleProvider which is a start but this doesn't touch the full power of AzMan (eg operations are not supported IIRC).
I'd love to see more framework support for AzMan, especially along the lines of the attribute based approach you describe.
I think that Team System for Database Developers has this sort of functionality built in. Also allows you to run update and create scripts as part of the build so you can enforce that the 'one true' schema is the schema uses.
Ta.
Steve Porter
The YAGNI is there to remind you as a developer to invest time in the features that you need for the current iteration and stop wasting time on features you might need in the feature. Imho if a specific software factory generates several layers for you including code in 5 minutes it does not really violates the YAGNI principle. Also a software factory is not only about creating a project from A-Z at the start of a project, instead in a Software Factory there should be different stages. For example a Software Factory should be able to create a Data Access Layer for you (as far as you need it) with maybe some default classes. Next when you need to create a new Gateway class the software factory should do it for you. A nice example if Microsoft's implementation of Software Factories in the name of Guidance Audomation (GAT+GAX)
if the divide between what you use vs. what you get is so large ( 1k vs. 15k LOC), then your factory is made up of core assets that are too corse grained. Of course, that must mean you're including source code in your project, which isn't the real level that a SF is supposed to be used at.
A software factory should be at a much higher level then simple code generation. It should be made up of core assets and support development by assembly, not just a set of CodeSmith templates that create a ton of .cs files.
Also, this could have been an exception to his company's original software factory intent. A SF will only be valuable if there are 10's or 100's of the same type of application being produced. If not, you're just creating bloat, like Steve sees.
I remember seeing the "Developers vs Programmers" article on digg recently. I did think at
Well IMHO the developers vs programmers paradigm is not accuarte , it should be more like developers/programmers vs Software Engineers to be exact.
I would read PoEAA first. I, like you, read Nilsson's book before DDD (backwards ;>)... I think all of these books draw on the stuff in the Fowler book.
I just picked up Core J2EE patterns as Ted Neward suggested in his p&p book. Looks promising...
I totally agree with you that MS people is far behind the software architecturing in enterprise application. This won't change if MS people not read PoEAA and DDD but focusing on MSDN, software factory or new MS eva stuff. (wcf/wff..)
Great post, thanks for your perspective on this.
You might notice I specifically didn't include any programming technologies, more layout and effects technologies, and this is the angle I was coming from when I wrote the post.
The ecosystem as a whole is huge as you point out, there are areas of enterprise services provided by Database servers, Gateways and application logic tiers.
If you knock together a paint diagram I'm happy to Officify it (I think that's the right term? ;-) )
Cheers,
Phil.
Wait until you use Powergadgets, then you will reall be hooked to PowerShell.
There is a CR2 available for download at http://www.powergadgets.com/trial/
PD
Yeah, you would need to synergize your approch to the paradigm shifts and leverage the existing core competencies...
Thanks for sharing this manifesto, and please stop the PHB talk :|
The problem with manifestos, methodologies, and this whole business of software architectures is that they are all totally ignored by the people who actually write the bad code all of us have to suffer with.
No manifesto, no methodology, and no architecture is going to turn a bad coder into a good coder, and there are a lot more bad coders out there than good ones.
The section titled Writing Maintainable Code over Architecting for Reuse and the Future that had me jumping up and down screaming halle-f@%king-lujah.
Rob Howard asks "Which is more difficult?"Steve, if you liked the "Writing Maintainable
www.sadekdrobi.com
i am posting examples about further observations of the Model View Presenter pattern, with sample code soon...
the idea of a "some kind of SQL Server connector to Swivel" is an interesting one. I wonder what that might look like?
Brian Mulloy
CEO & Cofounder
www.swivel.com
PingBack from http://blog.roberthahn.ca/articles/2007/02/07/5-things-you-didnt-know-about-me
You can do better than that! I knew #2, #3, #4, and half of #1!
#5 - really? You must have much better classroom-management skills than I do (lack of which confirmed me as a non-teacher).
PingBack from http://addictinggameblogs.info/friday-april-13-is-msn-unicode-screen-name-day/
Pingback from Microsoft Business Intelligence Conference, Wednesday Keynote
Pingback from MS BI Conference 4: Best Practices for Migration to Microsoft BI
Довольно забавно слышать как старшее поколение называет всех, от геймера до разработчика баз данных...
Pingback from IT CAREER « Itcareer’s Weblog
Pingback from evastonline.com » Blog Archive » Computer programer
Great
Truncate skips the transaction log, so delete was most likely reading the table info to put info into transaction log, which is why it was taking so long.
Pingback from Twitter Trackbacks for SQL Table stored as a Heap - the dangers within - Mike Diehl's WebLog [asp.net] on Topsy.com
As far as I know, TRUNCATE TABLE statement actually drops the whole table altoghter, and re-creates it anew.
To comment on the comments on truncate (all are false).
According to books online:
* Less transaction log space is used.
The DELETE statement removes rows one at a time and records an entry in the transaction log for each deleted row. TRUNCATE TABLE removes the data by deallocating the data pages used to store the table data and records only the page deallocations in the transaction log.
* Fewer locks are typically used.
When the DELETE statement is executed using a row lock, each row in the table is locked for deletion. TRUNCATE TABLE always locks the table and page but not each row.
* Without exception, zero pages are left in the table
After a DELETE statement is executed, the table can still contain empty pages. For example, empty pages in a heap cannot be deallocated without at least an exclusive (LCK_M_X) table lock. If the delete operation does not use a table lock, the table (heap) will contain many empty pages. For indexes, the delete operation can leave empty pages behind, although these pages will be deallocated quickly by a background cleanup process.
Darren, see Paul Randall's blog, myth 19/30 from the month of April, www.sqlskills.com/.../A-SQL-Server-DBA-myth-a-day-(1930)-TRUNCATE-TABLE-is-non-logged.aspx
Truncate is indeed logged, it just doesn't have to log each individual record.
-Jon
And the URL to the company site is?
Hi,
I am interested for Database Admin
Pingback from progremmer | Andreperdana's Blog