Home MVC Storefront

... In Which We Discuss Proprietary Object Noise

Jeff wrote a good post today on languages within languages- wrapping up the post with

Embrace the idea of languages inside languages. In The Land of Strings, we speak regular expressions. In The Land of Data, we speak SQL. Oh sure, you can pretend those languages don't exist, and hide out in the Kingdom of Nouns-- but you're only cheating yourself out of a deeper understanding of how things really work in those other places. Fluent interface object wrappers may seem like a helpful convenience, but they're actually an ugly hack, and a terrible substitute for true language integration.

There are two points at work here:

  1. Developers should know their languages (he uses Regex and SQL to support his point) and
  2. We should be able to use these more clearly/closely in code

I left a comment on his blog, but thought it worth a post of my own to respond. No, I'm not cranky cause he mentioned SubSonic (and some not-so-flattering words) - that's just Jeff. What're you gonna do. He told me my blog sucked, too... but that's what you get with the guy - a cuddle or a kick, the claws or a lick - that's Jeff Atwood :). And I love him ...

Why Jeff Is High
Regex SUCKS. Someone please blow it up :). The old saying of "I solved a problem using Regex - now I have two problems" is dead on. I don't think using Regex to support any point you're trying to make is a good idea - let alone a sober one :):).

SQL is abstracted because it's a shotgun, cocked and loaded. It's locked in the gun closet so it doesn't blow the foot off your application when you screw up. .NET isn't a Query Analyzer or a spreadsheet. Their are two powerful systems at work here - they don't need to sleep together, their lovechild would eat us all and crap out Regex.

How many weird little holes would open up in your app if your Database was, essentially, IN YR APP? Consider Jeff's response to my comment:

IDataReader rdr = QueryDb("SELECT * FROM Customer WHERE Country = 'USA' ORDER BY CompanyName"); Which is more likely-- developers that understand Subsonic, or developers that understand SQL? Which is more desirable?

WIthout asking him what "QueryDB" is (nor telling him that you can actually do that very thing with SubSonic), my response to him:

Jeff - how would you write this example (from your comment), taking in an argument from a variable to avoid injection: "IDataReader rdr = QueryDb("SELECT * FROM Customer WHERE Country = '"+KILLMYAPPPLZKTHX+"' ORDER BY CompanyName");"... Which is more probable? A developer that learns SubSonic, or a developer who writes inline SQL ripe for injection? Which is more desirable?

Things like SQL Injection, Concurrency, Locking, Connection Pooling, and most importantly: Repeating Yourself. Frameworks are around so we can focus on the job at hand, not writing SQL and Regex all day. I'll take the Framework please, with a side of Going Home Early. I'll read my Regex books when I get home tonite, I promise.

All of this joking aside, I do find a lot of common ground here with Jeff - I don't like the nasty nasty API calls. It's been one of my goals to make SubSonic as readable as possible so you know whats going on, or can at least figure it out. I'm assuming you don't want to write inline SQL... right?

This is the point of this post (buried deep in the bottom of it) - I agree with Jeff about readability, and I'd like to make our next query tool a little more readable SQL-wise. I don't think the answer is hauling SQL into C# though :p.

To me, his example above, and mine:

IDataReader=new Query("Customer").WHERE("Country = 'USA'").OrderByAsc("CompanyName");

Is about as close as you can get.

And finally - a small clarification I think is in order :). It's not

proprietary SubSonic object noise

It's MPL'd Open Source code (which you're welcome to help us with Atwood!) and belongs to everyone :).

Kent Sharkey avatar
Kent Sharkey says:
Wednesday, October 31, 2007
I'd also add (I would have commented on Jeff's blog, but I'm lazy) that two of his examples (RegEx in Perl and LINQ) are really only possible if you control the compiler (or through extension methods, but I imagine you're already ahead of me there).

Evan avatar
Evan says:
Wednesday, October 31, 2007
I've had good luck starting with the WHERE clause first (as have others).. IDataReader dr = gateway.Select(Where.Field("Country").Equals("USA").Query.OrderBy("CompanyName")); or slightly more readable IQuery query = Where.Field("Country").Equals("USA"); IDataReader dr = gateway.Select(query.OrderBy("CompanyName")); or with overloads.. IQuery query = Where.Field("Country") == "USA"; IDataReader dr = gateway.Select(query.OrderBy("CompanyName")); I don't disagree with Jeff, but until MS opens up CSC, a lot of this stuff is going to have to stay with fluent interfaces (unless you wanna dig up ANTLR, etc). As for readability, beauty is in the eye of the beholder. Honestly, I'd trade a bit of readability for intellisense as well. (And there's nothing wrong with the SubSonic query implementation, I just thought I'd share my experiences. Although I'd be happy to donate if you do like it).

Evan avatar
Evan says:
Wednesday, October 31, 2007
(Note: the generics got eaten as html, the gateway.Select is a generic method--using Customer as the generic type in that example)

Steve Trefethen avatar
Steve Trefethen says:
Wednesday, October 31, 2007
Rob, great response. To be honest, I'm a bit surprised by Jeff's approach on this one. I think the argument was somewhat superficial and as you commented lacked sufficient depth to really get at the heart of the matter and seems a bit out of character for Jeff. Btw, congrats on the blue badge.

Shawn Oster avatar
Shawn Oster says:
Wednesday, October 31, 2007
I just got done commenting over on Jeff's blog, should have known you'd have a nice ripe response on your blog as well. While I get what he was going for I think he picked some horrible examples and instead sounded like some cranky, old-guy programmer that thinks everything should be hand-coded in ASM and that C is the upstart kid on the block with all it's bloated objects. RegEx is like code herpes, there is this horrible outbreak where you spend an hour or two learning the syntax and testing your expression and then for months you never have to touch it or look at it again until suddenly it's back and worse than ever because not only do you have to relearn the syntax but also figure out what in the hell was wrong with the original expression. My bottom line for any code I write these days is what will make it more maintainable, readable and discoverable by future me or jr. mini-me that inherits it. As you point out, embedded SQL isn't really maintainable without a lot of boring, mind-numbing effort and that's where Query steps in nicely.

you've been HAACKED avatar
you've been HAACKED says:
Wednesday, October 31, 2007
DevConnections and OpenForce 2007 in Vegas... DevConnections and OpenForce 2007 in Vegas...

Joe Brinkman avatar
Joe Brinkman says:
Wednesday, October 31, 2007
In this day and age I believe developers, and Web developers in particular, are forced to make a choice, you can either be a generalist or a specialist. If you are a specialist, then by all means learn everything you can about how to write the most optimzed SQL queries. Of course your stupid customers are not going to be satisfied when you hand them a bunch of SQL scripts and say here is your app - so you will probably need to enlist the aid of an HTML/CSS designer, and a JavaScript expert, and also someone who knows how to write really great C#/VB (your choice). Now you may actually be able to create a useable app. However, what is more likely is that you will have a developer who is a generalist. They will have a really good grasp of their primary GPL and will have moderate knowledge of SQL, JavaScript and HTML/CSS. This developer will lean heavily on frameworks and abstractions to make up for not having a huge team of experts at his disposal. Yes his programs will not be as performant as they could be... but quite honestly, if it isn't written and optimized at the machine code level, is it ever as performant as it could be? Haven't we gotten past the point of caring whether my "hello world" app takes 20 clock cycles or 500 clock cycles? Either one is so fast that you will not notice the difference. I know I know... your "hello world" built in Utopia by the programming gods can scale to 20 billion users while I can only run 1 billion users before I max out my hardware. But of course your app took 10 times the amount of time and money just to complete it, and I captured the entire hello world market long before you even had a buggy Alpha release (or is that CTP, or CTP Futures Alpha Pre-release, I am so confused anymore) of Uber Hello World. So even though your hello world scales to 20 billion users, you only ended up with 1 user (and he just downloaded the trial version at that). So yes in Jeff's fantasy land every developer knows every low level DSL and hand-codes everything. Those of us in what I like to refer to as "The Real World" are forced to rely heavily on our favorite general purpose language along with a handful of frameworks and class libraries to get our apps built and we are happier AND richer for it.

DotNetKicks.com avatar
DotNetKicks.com says:
Wednesday, October 31, 2007
In Which We Discuss Proprietary Object Noise... You've been kicked (a good thing) - Trackback from DotNetKicks.com...

Mike D avatar
Mike D says:
Wednesday, October 31, 2007
Jeff makes a valid argument, he is missing the IMHO the real problem that fluent interfaces solve. A string has no compile time checks and therefore is more prone to errors and I would consider this a language deficiency, similar to life before generics. So until we have compile checks of a language within a language stick with the fluent interface.

Ibleif avatar
Ibleif says:
Wednesday, October 31, 2007
Just a little sidenote. I think all that uses SubSonic should use the Struct Columns instead of writing the column-name directly in your code. .OrderByAsc(”CompanyName”) I think it should be: .OrderByAsc(Customers.Columns.CompanyName) Yes; it is more code to write but you will get intellisense on this, and you are sure that the fields exist according to you latest code-generation. If you change a column-name in your system, then you will get compile errors on all the queries using that field. Thats just a beauty. Just my 0.02$ about this - even though its a bit off-topic. :-)

Kadir Pekel avatar
Kadir Pekel says:
Wednesday, October 31, 2007
Except the machine code, all programming languages are abstraction layer of zeroes and ones 10101100 :P already. It's not all about readability, in fact it's about encapsulation of time consuming repetitions by wrapping them around to use again and again within an understandable logic. Jeff could use machine code to understand things cleaner maybe. It's not the way. Asbtraction is the aim of programming, we are all abstracting our real world needs and problems by computers to solve our problems easier. It's some absurdity that Jeff writes on SQL sql string against to SubSonic way :) He simply skips the rest. LoL

Patrick avatar
Patrick says:
Wednesday, October 31, 2007
Hey Rob, btw I'm a fan of your blog since you called DHH on their attitude problem. I'm also a fan of Jeff's blog too. I agree with Jeff on the point that the small DSL languages are just as important as frameworks. I'm one of the weirdos who love regex and who've created programs that use regex extensively (shameless plug for http://www.notamace.com). I think if I had to go rewrite those applications using a framework object approach the app would be harder and more complicated to mantain (and not nearly as expressive). I think developers need to have a basic grasp of regex and sql and some of the domain specific languages though. Just so they can have an idea of what the framework is trying to produce. This debate also reminds me of ASP.NET's horrible implementation of styles. I mean does anybody really use the "style" property of ASP.NET controls and build them programmatically (or in the designer) or do you use CSS? CSS is a DSL just like regex and sql. I think it boils down to the right tool for the job, you can't have a framework that gives you 100%, sometimes you have to bust out the little ugly language from time to time. BTW - I love nHibernate and ORM, not a fan of stored procs for CRUD. But even as ORM lover I have to admit there are times when you have to bust out some SQL (batch updates, batch deletes, searches that need to return a datatable not objects). Also, here's a great tool for regex called Expresso, you can build regex by selecting options and they even show their pattern symbol. Its a great learning tool. http://www.ultrapico.com/Expresso.htm Anyway keep up the good posts! I love it when two great writers debate these kinds of issues intelligently on their blogs!

Eric Kemp's Blog avatar
Eric Kemp's Blog says:
Wednesday, October 31, 2007
Query me this...... Query me this......

The Other Steve avatar
The Other Steve says:
Wednesday, October 31, 2007
I do happen to like RegEx in certain circumstances. I agree that every time I have to touch it, I have to relearn RegEx language, but the fact is, I can do things more concisely and more reliably with a RegEx than trying to code it out with string searches. I agree that one should understand the underlying mechanisms. I was in a recent MSDN presentation by Microsoft where they showed off linq and some of these other tools. My friends and I commented that the reason this looked nice is because you'd done it the hard way and as a result you understood what it was doing. Without that underlying understanding, it's probably more difficult to even understand the easy way of doing it. With that being said, the RegEx complaint he has, of that readable alternative, I don't buy. Yes, I could code up the RegEx in a single line, but six months from now when I have to reread it to fix something, that alternative syntax is a whole lot easier to look at and go "Oh, I see, we need this over here." I can see where it'd be useful. The code I write has to be maintained.

Dave Savage avatar
Dave Savage says:
Wednesday, October 31, 2007
IDataReader rdr = QueryDb(”SELECT * FROM Customer WHERE Country = ‘USA’ ORDER BY CompanyName”); Which is more likely– developers that understand Subsonic, or developers that understand SQL? Which is more desirable? -------------------------- Perhaps the better question is, which is more realistic?

Steven avatar
Steven says:
Wednesday, October 31, 2007
"SQL is abstracted because it’s a shotgun, cocked and loaded. It’s locked in the gun closet so it doesn’t blow the foot off your application when you screw up. .NET isn’t a Query Analyzer or a spreadsheet. Their are two powerful systems at work here - they don’t need to sleep together, their lovechild would eat us all and crap out Regex." I nearly pissed myself laughing while reading this. :)

Rob Conery avatar
Rob Conery says:
Wednesday, October 31, 2007
@Patrick - agreed completely. HTML, CSS, Javascript, etc - tools of the trade we all need to know at some level. Joe's point is dead on - only the truly geeky can master more than 5 or so. A lot of people like Regex - i have 3 books on the stuff and each time I think to myself "why O why can't we just have a library that does the 80%"? In fact this is why I made the whole Sugar class - (which a lot of people scratch their heads at). See, I build SubSonic for ME... if you like it, great! Just kiddin :). @Steven: do what I can for ya!

foobar avatar
foobar says:
Wednesday, October 31, 2007
I'm not one to really agree with Jeff Atwood (I think he's a pretty mediocre programmer, and an absolutely pitiful analyst), but I'm more inclined to believe him than you. He didn't invent SQL or regular expressions, so he's just a little less biased than you. Instead of taking his comments as insults, maybe you need to step back a bit and try to see if his comments have any merit at all to make your product better. Shocking, I know.

Rob Conery avatar
Rob Conery says:
Wednesday, October 31, 2007
@foobar: Leave your name if you want me to take you seriously. Here, I don't think you actually read the post, so lemme help you out: "No, I’m not cranky cause he mentioned SubSonic" and (I bolded this one): "I agree with Jeff..." Whatever- as I say to everyone who leaves anonymous comments: I'm right, you're wrong :p

Steven Rogers avatar
Steven Rogers says:
Wednesday, October 31, 2007
Just like the "inline vs. code behind" debate, it's really all a matter of personal preference. What is easiest for your team to get the product out on time? What will be easiest to maintain after the release of the product? *By the way, Rob... I downloaded SubSonic out of pure curiosity. I'll give it some eval time this weekend. We'll see if "all that". :)

Steven Rogers avatar
Steven Rogers says:
Thursday, November 01, 2007
Grammar correction: *We'll see if it's "all that".* I think faster than I type.

Jeff Atwood avatar
Jeff Atwood says:
Thursday, November 01, 2007
> RegEx is like code herpes, there is this horrible outbreak where you spend an hour or two learning the syntax and testing your expression and then for months you never have to touch it or look at it again until suddenly it’s back and worse than ever because not only do you have to relearn the syntax but also figure out what in the hell was wrong with the original expression. That's why I use this thing I call a "tool" to help me with it -- RegexBuddy. It's sort of like the IDE you use now, but one that understands Regex. Ditto for SQL Management Studio. It's a tool that understands SQL and databases. If you're wondering why your IDE doesn't have this kind of understanding of the Regex language built in, hey-- me too! We have quad-core machines and 4 GB of RAM, and our IDEs have no clue what SQL syntax is, or Regex syntax is? So instead, we have to invent these dreadful, hacky object notation wrappers just so the compiler can give us intellisense and detect errors in our syntax? What's wrong with this picture? > IDataReader=new Query(”Customer”).WHERE(”Country = ‘USA’”).OrderByAsc(”CompanyName”); This notation is like nails on a chalkboard to me. I find the original SQL far more readable-- and much more standard, e.g., SQL-92, and not some notation that Rob just invented one day (uppercase WHERE and all). I just can't deal with the embedded ObjectJunk noise -- to me, it's another explosion at the parens and periods factory. To be fair, the LINQ syntax is quite readable as well. As Kent Sharkey pointed out in the first comment, this ultimately boils down to the very real competitive advantages of languages where you can define your own keywords and do this the right way without the ObjectJunk wrapper overhead. Not quite Lisp, but perhaps Ruby.

leppie avatar
leppie says:
Thursday, November 01, 2007
"Regex SUCKS" Most things suck if you dont understand it, without Regex (or at least the fundamentals of it), you wouldnt even have a compiler. Saying it sucks without backing up your opinion, that really sucks. Your comment about making a 'sugar' class for Regex, simply enforces the fact that you dont really understand it. Then why use it in the first place if you cant even maintain it?

Steven Rogers avatar
Steven Rogers says:
Thursday, November 01, 2007
This is why I like Jeff Atwood. He always introduces me to little side-apps like "RegexBuddy".

LarryB avatar
LarryB says:
Thursday, November 01, 2007
I guess one of the things that we are missing here is the fact that subsonic isn't just wrapping one variety of sql. The beauty of this library for me and what drove me to contribute to it is that I can write virtually the same code in my app and plop what ever database I want behind it. I couldn't take a query like this: SELECT TOP 20 * FROM table1 and plop it on MYSQL and get results, but I can do Query qry = new Query("table1"); qry.top = 20; and get the same results with subsonic. NOTE: my syntax may be off as I'm writing quickly and I would never use select *

Rob Conery avatar
Rob Conery says:
Thursday, November 01, 2007
@leppie: All over the map with that comment - I know Regex very well. I hate it like I hate VB - and it comes from using both way to much. It's not the syntax, it's the built-in "gotcha" that only gets squeezed out as you add more syntax. Even then it's a slipper slope and I'll throw this out there: There is no such thing as a complete Regex. You can only get 99.9999999%, and then all of a sudden BOOM! It breaks. Ask Phil about email validators. That guy's pretty smart :). @Jeff: I wouldn't want the polish to come off those pretty nails of yours :). Let's do it this way - you tell me what you want to see, and I'll build it. I won't do inline SQL, and I'll back up Galloway and say your post was irresponsible for suggesting it's use.

Scott Peterson avatar
Scott Peterson says:
Thursday, November 01, 2007
Wow, talk about stirring the pot! Maybe RegEx doesn't suck, as it is very powerful, but it's so cumbersome to use that I always gave up on it. Had I known about RegexBuddy I might have tried harder. However, I think it all gets down, as others have said, to personal preference. If you can read straight SQL code and understand it, more power to ya! If objects are more readable, then great, use them. I always run into what Larry B wrote about; supporting databases from different vendors I have an app that has to talk to ASA Anywhere, Oracle and SQL Server, and, possibly, MySQL. I don't want to spend alot of time dealing with the particular nuances of each product's SQL implementation. If I can stuff a table name into an object and get predictable results, so be it. Just because I'm using an object instead of SQL object doesn't mean I'm somehow misguided. Plus, so what if Rob did "invent" some notation? It was alot of effort, and has the potential to save me some serious time. I'd rather use the occasional uppercase WHERE then a lot of SQL where one missed space can cause your app to crap transistors...

Buck Pyland avatar
Buck Pyland says:
Friday, November 02, 2007
Embedded SQL? Eww! 8) To be honest I wouldn't use either embedded SQL or an object wrapper. It would be better to use stored procedures. No SQL injection problems. Strong typing. Try it, you'll like it. 8)

LarryB avatar
LarryB says:
Friday, November 02, 2007
Try porting those wonderful, end-all be-all stored procedures to a different database system.

Steven Rogers avatar
Steven Rogers says:
Saturday, November 03, 2007
@LarryB: How often will you be changing database systems where it effects your decision on if you should use stored procs?

LarryB avatar
LarryB says:
Saturday, November 03, 2007
Being that just about everything I work on I end up wanting to target an open source environment, all of my projects. Plus even the commercial products I have worked on target multi-database environments. Generally targeting mysql & mssql.

LarryB avatar
LarryB says:
Saturday, November 03, 2007
Bah. Hit submit too soon. To be honest. I just get tired of seeing the old stand-by of "use stored procs they are better, faster and more secure". Truth is if you know what you are doing you can make embedded sql just as secure and on the new mssql 2005 system it has been shown that speed is not affected by embedded vs stored procs if you are using the same queries. It just gets tiring that we are willing to shoe string ourselves just because we don't want to use some type of embedded sql. Personally the last few apps before I started using subsonic in my apps, I have been using resource files with parameterized queries. I find that approach to be easier than having to maintain stored procs and touch the database everytime something is updated. I would beg to say replacing a dll on a customers machine is a little faster/easier than updating their db. My personal experience anyhow.

Steven Rogers avatar
Steven Rogers says:
Saturday, November 03, 2007
@LarryB: I understand what you're saying. As for SubSonic, I haven't evaluated it yet, but I DL-ed it recently and plan to do so soon. I'm looking forward to that actually. My experience showed me several things about stored procedures. Sprocs are modular which means they're easier to maintain verses digging through GUI source code. You can also tune a stored procedure for better performance which removes the need to improve the GUI to achieve better performance for the inline-sql. Also, from a more personal stand-point, abstracting the sql expressions away from the GUI to sprocs just feels more...clean and correct. Sure, writing sprocs involves a bit more dev time, but that time overhead just doesn't outweigh the rewards of using sprocs. This is all my personal preference and doesn't mean it's "right". Maybe someone can show me the error of my ways.

LarryB avatar
LarryB says:
Sunday, November 04, 2007
I feel I obtain the same amount of abstraction by placing the sql statements in to resource files. To each their own. In my consulting work I am generally stuck doing everything in sprocs, whether I agree with it or not. In my personal and side work where I have the choice I put them in resource files.

Steven Rogers avatar
Steven Rogers says:
Sunday, November 04, 2007
@LarryB: Yeah, you are obtaining a certain degree of abstraction by placing them in resource files, but the sql queries are still embedded into the GUI DLL. I am a firm believer in the idea that you keep sql statements where they belong... on the database as sprocs. To each their own though and if your method gets the work done and the client happy, how can anyone complain?

Henrik Sarvell avatar
Henrik Sarvell says:
Monday, November 05, 2007
I work in Thailand in an environment with an extreme employee turnover. I have recently started using the Zend Framework and don't really write SQL anymore. I can finish projects in half the time it took me before when I made websites without abstracting the SQL, awesome. And yes I also have to brush up on the regex from time to time (we don't use software that costs money here and last time I checked regexbuddy wasn't free). The problem is that we get a lot of new graduates all the time and they have no knowledge of frameworks whatsoever. The problem with this is that the people that will inherit my projects will have a very hard time trying to get into all these abstractions. People might actually be relieved that I at least didn't abstract the regexes at some point in the future. At the moment people in the mothership in Europe are happy with my efficiency, we will see what they say when I pass along my projects to the next guy charged with maintaining them and expanding them. I was an ITC teacher once, might be I have to practice my old skills again. Hopefully I can be a good enough teacher to prevent any lazerbeams from hitting me. I realize I have to brush up my Thai, it sucks. Or maybe I should start doing things the old way instead?

Jordan Brough avatar
Jordan Brough says:
Tuesday, November 06, 2007
90%, 90%, 90%!!! Jeff, why the SubSonic hate? Rob, why the Regex hate? Why not use them where they're appropriate? 1) I want SubSonic to turn 90% of my Database needs into easy one-liners. 2) For everything else, I want SubSonic to get out of my way. SubSonic does a pretty good job of both things. Beautiful: Order o = Order.FetchByID(orderID); foreach (Product p in order.Products) doSomeCoolThing(p.price, p.weight, p.title); (plus intellisense and compile-time errors) Waste-of-my-time: IDataReader rdr = QueryDb("SELECT * FROM Products WHERE OrderID = '" sqlEscaper(orderID) "'); while (reader.Read()) doSomeCoolThing( reader.GetFloat(reader.GetOrdinal("price")), reader.GetInt32(reader.GetOrdinal("weight")), reader.GetTitle(reader.GetOrdinal("title")) ); (yikes.) That right there is 90% of the SQL queries for 90% of DB applications out there. Look at how much more beautiful SubSonic can make the world. Jeff is right though, people get their hands on a tool like SubSonic and suddenly think it will do their laundry and solve world hunger too. SubSonic's fluent interface *doesn't cut it* for complex data queries (and is often ugly when you try). But it shouldn't *try* to cut it, and it doesn't. When you want to do complex data queries, drop down to SQL, or wrap your queries in Views, etc. Either way, you gotta know SQL, so don't try to hide it in a Kingdom of Nouns. When you want to parse something out of a string, use a short, concise Regex. People usually hate Regex because they get so excited by it that they try to write a single indecipherable Regex string that encapsulates the complete parsing structure of a entire programming language. Bad idea, but they blame it on Regex. You don't need an IDE for Regex's, you need to divide and conquer and separate your concerns, just like you approach every programming challenge in your favorite language: Wrap your whole program into one method and you will die. Period. Domain Specific Languages are fun and useful. SubSonic is fun and useful. They both need to stay out of each other's territories. Why the hate?

Whatever-ishere avatar
Whatever-ishere says:
Wednesday, November 21, 2007
thanks for the GREAT post! Very useful...

Offerojar avatar
Offerojar says:
Tuesday, November 27, 2007
Hi, hello, privet toyota priuso f

serifikat avatar
serifikat says:
Wednesday, December 12, 2007
Сертификация программного обеспечения Сертификация программных продуктов с выдачей Сертификата на программный продукт и внесением в реестр сертифицированного ПО serifikat@mail.ru а также метрологическая аттестация ПО все вопросы на е-мейл serifikat@mail.ru Сертификация и Метрологическая аттестация программного обеспечения serifikat@mail.ru Сертификация ПО ОФИЦИАЛЬНО! Порядок проведения сертификации программного обеспечения в СДС ПО СИИИС включает: - подачу заявки на сертификацию; - принятие решения по заявке на сертификацию, в том числе назначение экспертов на проведение основных работ по сертификации из числа экспертов органа по сертификации; - оформление договора на проведение работ по сертификации; - проведение сертификационной проверки ПО СИИИС, в том числе при необходимости проведение испытаний ПО (ПП) по согласованным с заказчиком методикам; - принятие решения о выдаче Сертификата соответствия и разрешения использования знака соответствия либо об отказе в выдаче Сертификата соответствия; - выдача Сертификата соответствия и разрешения использования знака соответствия; - занесение юридического лица или индивидуального предпринимателя и перечня сертифицированного ПО (ПП) в Реестр СДС ПО СИИИС; - проведение инспекционного контроля сертифицированного ПО (ПП).


Search Me
Subscribe

Popular Posts
 
My Tweets
  • @codinghorror: I may be weird but I don't ask my cats to write my blog entries :p.
  • @blowdart sure! Wanna come on and do a webcast with me - plugging CardSpace in?
  • People are very, very weird. Skypecasts are creepy.
  • Is Rob Howard trying to tell us something? http://www.rob-howard.net/
  • New storefront posted- all about OpenID :) http://tinyurl.com/5rkgux
  About Me



Hi! My name is Rob Conery and I work at Microsoft on the ASP.NET team. I am the Creator of SubSonic and was the Chief Architect of the Commerce Starter Kit (a free, Open Source eCommerce platform for .NET)

I live in Kauai, HI with my family, and when my clients aren't looking, I sometimes write things on my blog (giving away secrets of incalculable value).