Jump to content
Xtreme .Net Talk

bri189a

Avatar/Signature
  • Posts

    1014
  • Joined

  • Last visited

Everything posted by bri189a

  1. Okay, then I retract my statement. :)
  2. If you don't know what FURPS+ is, or at least requirement modeling then this discussion might be a little above you. Most of my references in this post will come from Craig Larman's book 'Applying UML and Patterns' which by the way is an excellent book and should be in your library along with GoF's Design Patterns and several others mentioned on other post throughout the forum. For review many companies out there only have two types of requirements - Functional and Non-Functional. I don't like that black and white/broad generalization labeling; I prefer the FURPS+ model which stands for the following requirements types: Functional Usability Reliability Performance Supportability The '+' stands for everything else: Interface, Implementation, Operations, Packaging, Legal, etc. Now arguably several things outside of 'Functional' <i>may</i> be better placed in a SSD (Supplemental Specification Document), but I think that would be dependent upon the requirement. For instance 'Application must be section 508 compliant' - by definition, that's a usability requirement, but that's a system wide requirement and should be applied as a part of the SSD, not as a part of the requirements document. What I've come to ask opinion about is in particular a case of Functional Requirement or Usability Requirement? First let me start by saying that I disagree that Usability Requirements are things like 'Application must be section 508 compliant', or 'Text must be visible up to 1 meter away' - these are things of accessibility - in your Windows control panel you have Accessibilty settings, not Usability settings. To me Usability are things that make an application more usable - or user friendly; things that in themseleves do not make the application - the application would function within the specifications of the AVS (Application Vision Statement) without them, but they provide a better user experiance. To support my arguement about usability this is dictionary.com definition of usability <programming> The effectiveness, efficiency, and satisfaction with which users can achieve tasks in a particular environment of a product. High usability means a system is: easy to learn and remember; efficient, visually pleasing and fun to use; and quick to recover from errors. Having said that the application I'm working on has a new business requirement - it's not quite a find feature, but it's similiar; I can't really discuss openly. We are having a lot of discussion on whether this is a functional or usability requirement...and before you knee-jerk post a reply, finish reading. I know that traditionally a functional requirement is any system feature, while true, I believe a functional requirement should be something that is required by the system to perform the FUNCTIONS for which it was developed (are critical to the system performing as was envisioned in the AVS), not just any old feature - that is too broad of a statement to me. Having said that now I ask you, how can <i>the system</i> finding something add functionallity to the system? The user of the system is more than capable of finding it themselves - they know where too look - it just does the work for them (consider it to how smart navigation scrolls the window to wherever you desire it to be). The overall vision or purpose of this application will not fail because of this 'search' feature not being implemented; in fact it's existed for quite sometime without it. What it does do is provide a better user experiance and make the system more user friendly, which increases it's USABILITY...it does not increase it's FUNCTIONALITY...the core system still functions the same. Now I know I'm stretching the meaning of 'Functionallity' and 'Usability' in context to how it's general defined as in FURPS+ documents, I know this, and I know there are 'by the book' people out there who will feverantly disagree with my use of Usability Requirements and downgrading of 'Functionality' Requirements, but I really think what is defined in FURPS+ documents as usability falls under Accessibility and that functionality is too broad. So now let's move on to the use case. Most people will say a use case is a positive sign that something is a functional requirement, not a usability requirement. Not so; Larman plainly states that while a use case usually is tied to functional requirements, they can also be used for other types (of requirements), especially when those other types strongly relate back to a functional requirement - which this one does for our application, and I think we would all agree that a Find feature is indeed something deserving of a use case, because if the feature is complex, or has the cability of becoming complex, then there needs to be a main success scenerio and execptional (alternative) flows, and even though it may not. There are also who will say it shouldn't have a use case at all because it doesn't meet EBP (Elementary Business Process) guidelines (it doesn't help the company make money), however it closely realtes to a use case that does meet EBP guidelines, which is an acceptable violation of the EBP guidelines in order to write a use case. I wish I could get in touch with Larman directly to settle the debate, but I think he's unreachable :), but we have a lot of good people here on this forum and I'm interested in their experiances and their thoughts on this particular matter.
  3. I'm not big on LINQ...yes, for the lazy programmer it's great. But think about what it must be doing under the hood...how can it possibly perform as great as well generated for or while statement? Also, how many of us are use to doing things the way we are? Now they throw in this syntax to almost 'make' us do things differantly...do we have to? Of coarse not, but will all the newbie's who don't understand the differances in performance using differant type of loops understand why they're program crawls because they used this new syntax? I mean if it compiles to the same IL that a indexed for loop compiles to; great - but I just don't like it... it doesn't sit right with me...but it is a cool idea. But it all goes back to the theory of just because something can be done, should it?
  4. My only *gripe* about partial classes is that for the life of me I can't figure out where Microsoft is hiding it's designer generated code. But to be honest I haven't had a lot of time to play in Beta 2.0 - too busy pulling my hair out on the Enterprise Blocks - so it's probably very simple to find if I take the time. Generics are a great idea - and sorely needed. I'm on the fence about the null types - I agree with the data base issue - but I too am finding it hard to find a place for it elsewhere.
  5. Yes, I read some posts that you can't just XCOPY...but this is a virtual server...they aren't going to install anything that isn't there by default in the framework. I'm very surprised and disappointed that the makers of the library didn't think about this when developing the library. Do you know if this is going to become an issue when I try to use the other blocks? If it's just the logging block then I'll make my own application execption handling and logging, but if it bleeds into the data, security, or caching block then the whole library is useless to me; which is quite disappointing.
  6. I hope someone on this forum is familiar with these blocks. I downloaded, read, and set up an Exception block for a web app that I'm working on that resides on a virtual server. Well the block did it's job; problem is, that for whatever reason it's trying to read and create a key to the registry on the virtual machine - which won't happen - they keep it locked down and it's not going to change. The only sink I have for error logging is Email - and it sends the email like it should. I don't know why; and what kind of stupid design you would have to have Email messages try to access or create a new key in the registry but for whatever reason it's trying to which means I raise an error inside my catch which leads to the error page rather than it just writing the log like it should and the page continuing; regardless though there's something I'm either not doing right or the Application block wasn't well designed - I hoping the former but I'm thinking the latter - so for me to use this block I have to wrap my calls to the block in a try catch of it's own - which is just stupid... I may as well as right my own custom error handling block which is what I was trying to avoid by downloading this one from MSDN. Does anyone know if the same sort of stupid logic exists in the other blocks (ie. something that should by nature not come within 1000 miles of the registry, trying to access the registry - such as my 'Email' sink for exception handling.)
  7. Yeah... if anyone can put that in plain english that would be great. You know the old robot anology for OOP? That's kind of the level I grasp on to better.
  8. Your string names need to be: VALUES('Joe') not VALUES("Joe") Also, you are leave yourself wide open for SQL Injection attacks. If you use parameters (and you can use them on in-line SQL too; not just stored procedures), you won't have to worry about these syntaxtical errors or SQL injection attacks.
  9. Is this just a buzz word for using attributes smartly? That's what I gather.
  10. Enterprise Application Block v1.0 - didn't realize how much it had in it. :)
  11. Just curious how some of you other guys handle unhandled errors in your ASP.NET applications... 1. Just throw the error and show a custom error page? Or worse the default error page? 2. Do a stack trace and put it in a log, or db, or email it? (What I do; however in release mode doesn't do a lot of good since I have no line numbers) and then do #1 or something else? 3. Catch all errors and just do nothing and leave the user thinking something was accomplished that wasn't? I hope not. 4. Redirect to a start page? Not very user friendly. Reason I ask is I'm not really happy with my methods and wanted to do some personal research from the folks that visit here on what they do. Then while I wait on answer here I'll be Googling to see what suggestions I can find out there on the web?
  12. Not by best work, but one of my favorites (funnest to do) was SMS like app that went across an enterprise network pulling hardware and software information off remote computers without installed software on those target computers. Had a nice GUI, remote installing, etc.
  13. bri189a

    Functions?

    VB is like most (probably all) programming languages...you can use the variable passed into a function... ditto marble_eater remarks.
  14. I mean use that registry hive using the Registry namespace.
  15. Refresh can be an issue if you press F5 - and back if you hit 'Backspace'. Don't know if you catch these keys in all browsers - if any; never researched it. It's best just to be aware these things are possible while designing your application and code for them.
  16. Set the registry setting I believe...under HKEY_CLASSES_ROOT
  17. Database Paging I'm trying to page data that comes back from a cursor on the db (AS400) - but it's a generic problem on all databases I think. The reason for needing the database to handle the paging is that the complete resultant dataset is too large to cache, multiple by users and you'd crash server (because each one has individual results). I've come up with two working models, but both leave that bad taste in your mouth that let you know it's not right. If you have ideas keep in mind that the user can set the rows per page, jump into the application at page X (it remembers where they were last at), and sort (acs and desc) on any column in the cursor returned (too large of a number to think indexing each one would be efficient). The first method I have is the equivelant of the SQL Sever of (this is psuedo, not actual SQL): --For clarification --@RowsPerPage = 2 (number or rows per page) --@Total = @RowsPerPage * 5 (5 is the requested page number) --@SortDirection = ASC --@OppositeSortDirection = DESC --@ColumnX is whatever column the user is sorting by. --End clarification SELECT TOP @RowsPerPage * FROM ( SELECT TOP @RowsPerPage * FROM ( SELECT TOP @Total * FROM SomeTable SORT BY @ColumnX @SortDirection) AS TEMP1 ) AS TEMP2 SORT BY @ColumnX @OppositeSortDirection) SORT BY ColumnX @SortDirection On the following test set of data: ID-Name 1 - Bob 2 - Joe 3 - Tom 4 - Earl 5 - Jack 6 - John 7 - Mark 8 - Matthew 9 - Luke 10 - David 11 - Mike 12 - Dan If we want rows 9 and 10 we pass in page 5 as the page we want to navigate to and 2 as the rows per page, this causes the inner most select top to get the first 10 (2*5 = 10). Now we reverse sort that so that we now have: 10 9 8 7 6 5 4 3 2 1 We select the top 2 to get: 10 9 And then reverse sort that to get: 9 10 Which is the equivelant of page 5. It works but WHAT A MESS!!!!! :) Not to mention if you run this in query analyzer your using 48% of your processing in the two outer sorts...not good. Also the further down the page - the more data that has to be sifted through - for example in this we immediately threw out 8 of the 10 rows returned (80%). Now it was suggested that I sort by the input column with a secondary sort on the primary key (numeric). Then whenever I need the next page I just do the save sort but include in my where clause 'where id > @lastID' - where last id equals the primary key on the last row of the previous returned cursor. Then I would do the opposite for the getting the previous page. Problem is that the user doesn't do next and previous only. As stated to earlier they can jump from page 3 to page 18. This means I would initially have to return all the records, get the end points of each page (the first row primary key and the last row primary key), and carry those around me through the application. This will cause a lot of extra logic in the stored procedure, plus I carring around a bunch if information in Session in order to navigate more than one page at a time - which I'm trying to avoid overloading session with a bunch of information, and while this may be significantly less than carrying around the whole dataset, it's still a lot of information, and some coding that leaves me with the same pit in my stomach as the contrived crap I had above. I'm not an ANSI SQL expert to begin with, and the particulars of AS400 with it's FETCH statement and working directly with cursor only makes it more difficult for me to come up with an elegant solution... If any one has a good solution, please pass it on. Again, storing the entire dataset in session or cache isn't an option because of size.
  18. I think if you follow what I have above you should be able to make one. I could of swore there was a native way to do it, but I can't seem to find it now. Maybe someone else will chime in with the answer.
  19. Well if these aren't native types you'll have to do some reflection to make sure that the type you're trying to convert from can be converted to the specified type (use IConvertible). Then I'd simply make a loop and through each original item and use the ToType method of the IConvertible interface and assign that to the same indexed item of the new item.
  20. Sounds like your using cache instead of session. No two users will EVER share the same session.
  21. Good point; wasn't doubting your methods, just trying to understand the reasoning. Out of curiousity how did the comparissions turn out? I'm interested to see exactly where the cut off would be - where the axis' cross between recursively going through child controls versus using reflection as you said...the x axis being time, and the y axis being number of controls.
  22. Sorry to jump in with a question mid-thread, but reflection is slow and indexed loops are fast. Have you done any comparissions that show this is faster?
  23. That's a very broad question with very little explanation. If you talking about emulating an 'explorer' like window where the contents of a folder are displayed (the sub folders and files) then just use a ListView control and use the large or small icons or detail view accordingly.
  24. Actually it's quite easy to remove a column from a DataGrid if your talking ASP.NET - windows, don't know - but probably similiar: this.dataGrid1.Columns[x].Visible = false; where x is the column you want to hide. Or if the windows control supports it, don't use that column as one of the columns to bind to (ASP supports that, so I imagine in some facit the windows version of the control does too).
  25. I agree for all the same reasons; and as far as his brash comments - 99% of the time they are warranted and if people don't like the truth that too bad - comments like that is what drives my competive nature to become a better programmer; and as they say - if you can't take the heat get out of the kitchen. This is a cut throat industry and people who aren't serious about there work, or can't take 5 minutes to research on Google or MSDN (and literally that all it would take sometimes), need to find a new line of work.
×
×
  • Create New...