|
Sorry about that. I had read the comments everyone else had posted and the wife just got home, and wanted to eat, so I was pressed for time. I had only briefly scanned the document, but am about to give it a good read.
.45 ACP - because shooting twice is just silly ----- "Why don't you tie a kerosene-soaked rag around your ankles so the ants won't climb up and eat your candy ass..." - Dale Earnhardt, 1997 ----- "The staggering layers of obscenity in your statement make it a work of art on so many levels." - J. Jystad, 2001
|
|
|
|
|
OK, thanks. Take your time and enjoy.
|
|
|
|
|
0) The GetMembersByXXXX methods should impose some sane limit on the number of users returned. Otherwise, someone could bog down the site with a request for all members.
1) The name GetMembersByID seems redundant. I think it would be more useful if it were GetMembers(int startingID, int count).
2) I don't personally see a need to return a user's name with HTML decoration, but that's just me.
3) The Articles struct needs a DownloadCount field
4) I think the web service should have a single method that accepts a dynamic list of parameters, which includes the name of the stored proc to be called. This REALLY helps in terms of maintainability. All returned data should be in XML format. The programmer can then deserialize the returned data in any way he sees fit.
.45 ACP - because shooting twice is just silly ----- "Why don't you tie a kerosene-soaked rag around your ankles so the ants won't climb up and eat your candy ass..." - Dale Earnhardt, 1997 ----- "The staggering layers of obscenity in your statement make it a work of art on so many levels." - J. Jystad, 2001
|
|
|
|
|
Hi Luc,
Great news that this may actually get implemented
I thought about this a while back, and have a few suggestions for your proposal. Just my 2c
1) I presume you mean PascalCase ( EndOfFile ) instead of camelCase ( endOfFile ). We are .NET devs, after all
2) Reputation levels ( Bronze, Silver, Gold, Platinum, ? ) should be handled separately from the CP UI colours returned by GetColors .
enum ReputationLevel
{
Bronze,
Silver,
Gold,
Platinum,
...
}
ReputationLevel[] GetAllReputationLevels();
This enum should be used everywhere a reputation level is specified.
And possibly ( Chris: are the weights the same throughout the site? )
struct ReputationLevelDetails
{
ReputationLevel Level;
ColorDef Color;
int Weight;
}
ReputationLevelDetails[] GetAllReputationLevelDetails();
3) Is the .NET DateTime type portable? I mean, would non-.NET clients have problems consuming this type? Or is it handled by the binding?
4) For performance, I would also add a binary tcp/ip endpoint for .NET clients ( presuming this will be implemented using WCF ).
5) On page 13 "A note on data types". For a .NET client, you can "Add Service Reference" and it will match up .NET types in the WSDL with the correct framework class on the client. Obviously, non-.NET clients will have to work with just the plain data objects. Also, you can choose how to materialize collections on the client: Array, List<T>, ...
6) All DateTime 's should be in UTC.
I am mainly interested in votes for my own articles. I would like a method that retrieves a collection of summaries for all my articles, and then a method that gets the voting details for a particular article.
Your Article structure looks ok, but I would add: DownloadCount and LastVoteCast .
The method would just be:
Article[] GetArticleSummaries( int memberId )
For the votes, there are 3 possibilities: new, changed and deleted.
So I would declare a class for describing a vote ( which could be used across the site ):
class Vote
{
int ObjectTypeId;
int ObjectId;
DateTime DateTime;
int Rating;
ReputationLevel ReputationLevel;
int ReputationWeight;
int ReputationPoints;
}
Then a class that holds a pair of Votes :
class VoteCast
{
Vote Old;
Vote Now;
}
The 3 possibilities would be handled like this:
- New: Old = null, Now is populated
- Changed: both populated
- Deleted: Old is populated, Now = null
The method would be:
VoteCast[] GetVotes( int objectTypeId, int objectId, DateTime fromDateTime )
The overall rating and popularity at any point in time can be calculated from this data.
BTW: I've just finished a contract using WCF. I'm not an expert ( maybe Roman Kiss could help ), but I'll help if I can
Cheers,
Nick
|
|
|
|
|
Hi Nick,
thanks for your input.
1. yes PascalCase it should be.
2. I had been refraining from using enums to avoid potential comm problems; I know now returning enum values is no problem whatsoever, so I will propose to modify all ColorName by a color enum.
3. DateTime values get ToStringed in SOAP/HTTP, my test says it is now 2010-10-06T12:43:11.939Z; that looks sufficiently portable to me.
4. I'm not familiar with it; I think I'll open the proposal up to multiple communication schemes, with the SOAP/HTTP one as the primary.
5. I'm not familiar with it, will look into it.
6. I already spec'd UTC everywhere.
7. Voting info: you're not the only one asking such, I'll add it to "Possible Extensions". As a rule I did not add new functionality, everything could be gotten through HTTP/HTML as is, with one exception: Members by total rep, something we should have had for a long time.
BTW: IMO there are two major obstacles to voting info: privacy, and volatility of the system.
Thanks again. Shall I add you to my little mailing list?
Cheers.
|
|
|
|
|
Hi Luc,
Luc Pattyn wrote: thanks for your input
No problem
About voting: this information is obtainable at the moment, but you need to poll the site and catch every vote. For me this would be the most important part of a CP API.
Luc Pattyn wrote: Shall I add you to my little mailing list?
Yes please My email address is cp [at] my CP profile Homepage domain.
Nick
|
|
|
|
|
Okay, I went through the proposed methods and would like to suggest these :
(1) There needs to be a way to get a member's last 1000 posts along with forum information.
Collection<SomeStruct> GetPosts(int memberId, int count);
struct SomeStruct
{
Url MessageUrl;
String Forum;
IsThreadStarter;
DateTime TimeStamp;
. . .
}
(2) There needs to be a way to get a forum's last 1000 posts with the reverse info to (1) above:
Collection<AnotherStruct> GetPosts(string forum, int count);
or
Collection<AnotherStruct> GetPosts(ForumEnum forum, int count);
struct AnotherStruct
{
Url MessageUrl;
int memberId;
IsThreadStarter;
DateTime TimeStamp;
. . .
}
(3) Similar to (2), but gets threads instead of posts
Collection<ThreadStruct> GetThreads(ForumEnum forum, int count);
struct ThreadStruct
{
int UniqueThreadId,
Url MessageUrl;
int MemberId;
int Count;
DateTime TimeStamp;
}
(4) A method to get all thread messages:
Collection<AnotherStruct> GetThreadPosts(int threadId);
At this point, these are the major omissions I noticed in Luc's spec document, if I think of more, I'll post them here again. Meanwhile Luc and others, do let me know what you think.
|
|
|
|
|
Hmm. Do we need all this?
So far I tried to formalize what had been used (by scraping) in the existing apps, while keeping things pretty general, not excluding future extensions, not tailoring to exactly what would be used today.
We can ask for message information, OK, no problem. Not sure what use it would have. Do you want to create your own forum viewer?
We can ask for extensive voting information, I did not even consider that, as it is not available on the web site as is, and I do not really want to ask for information the web pages themselves aren't offering. The voting system is a delicate system, it is partially anonymous, etc. I don't feel like offering a second view on it, deviating from the first view, which is the web pages themselves. It would open a truckload of cans of worms IMO.
I could come up with a lot more ideas, but do we want them? do we need them?
My wants (not the needs from existing apps) would include:
- give me all threads where members M1 and M2 participate.
- give me all threads where "xyz" is in the subject line.
- give me arbitrary search facilities.
That is because I'm convinced the CP database is a gold mine, and we can barely scratch the surface with the current search facilities. However, here too, I would prefer the web site itself to offer better functionality (just like you would prefer MSDN help to work extremely well inside Visual Studio).
In summary: convince me I want your app, the one that needs these extra functions, right now. Do you have the concept for such a killer app? and will you offer it provided the info is available?
I'm a bit pragmatic here. I don't mind adding functionality if it increases the attractiveness of the proposal, and not just makes it bigger and less likely to get realized any time soon...
How about this: lets agree on some functionality with limited scope (e.g. similar to V1.0, with minor adjustments, based on existing feedback), get that approved, implemented, adopted by some apps, and enjoyed. Then perhaps consider a V2.0 with new features added. Rationale: we can dream up all kinds of things, is it worth delaying everything? Initially we had no scraping apps; then there was one, not enough to warrant a web service. Now there are four. I studied them all, saw similarities and possible synergy. I would like to grab the opportunity, right now.
|
|
|
|
|
Luc,
I was about to start work on a new CP-app that would have needed those. So no, I didn't think these up as future requirements but rather as immediate needs. None of those will be extra load on the servers since all the info I want can be obtained with SELECT TOP queries and perhaps CP already has wrapper layers around it (since we already have a paged message retrieval functionality on the website).
Of course if you think that asking too many features would put Chris off from doing this, I am fine with getting some minimal functionality now and then asking him to add stuff whenever he gets a chance or whenever we think it will majorly help one of these meta-applications.
|
|
|
|
|
OK, no problem. I'll take a couple of days and amend my proposal, trying to keep a balance. I'll include your little wish list.
|
|
|
|
|
Thank you
|
|
|
|
|
Luc Pattyn [Forum Guidelines] [My Articles] Nil Volentibus Arduum
Please use <PRE> tags for code snippets, they preserve indentation, improve readability, and make me actually look at the code.
Luc Pattyn [Forum Guidelines] [My Articles] [My CP bug tracking] Nil Volentibus Arduum
Season's Greetings to all CPians.
Luc Pattyn [Forum Guidelines] [Why QA sucks] [My Articles] Nil Volentibus Arduum
Please use <PRE> tags for code snippets, and update CP Vanity to V2.0 if you haven't already.
Luc Pattyn [Forum Guidelines] [Why QA sucks] [My Articles] Nil Volentibus Arduum
Please use <PRE> tags for code snippets, they preserve indentation, improve readability, and make me actually look at the code.
Luc Pattyn [Forum Guidelines] [Why QA sucks] [My Articles] Nil Volentibus Arduum
Please use < PRE > tags for code snippets, it preserves indentation, and improves readability.
Luc Pattyn [My Articles] Nil Volentibus Arduum
The quality and detail of your question reflects on the effectiveness of the help you are likely to get. Please use <PRE> tags for code snippets, they improve readability. CP Vanity has been updated to V2.4
modified on Friday, July 8, 2011 1:31 PM
|
|
|
|
|
Hi Luc! Something must be wrong with your Twitter account, I can't subscribe....
|
|
|
|
|
|
|
|
|
|
The programming forums are very well organized; they are the result of years of experience, feedback, and improvement. Now CP plans to replace all of them by the QA subsystem, which focuses entirely on looks, and not at all on user comfort. Here is a selection of issues:
1.
others can modify text that I have published and signed my name to. IMO this is unacceptable; the only concession I am willing to make is when someone with a significantly higher reputation adds to and/or strikes through my text (without deletions nor changes), and such additions/strikeouts are marked in a different color and mention name and datetime in loco; and I then would prefer to have an opportunity to amend my text to include the new material (with proper acknowledgment) or remove it when I don't agree. The choice is clear, either it is my text with my name under it; or it is something else. If it is to be a wiki, then it should be anonymous.
2.
page efficiency is gone; a forum shows 25 messages by default. With an average of 5 messages per thread, this means 5 threads are available, within a single page. If you want to read them all in QA, it takes more than 5 pages (1 per thread, and a fraction of the list page). So you wait much longer to get it all, you get the ads every time, you have to click and wait, and you loose the overview. And yes I have DSL (and my mobile PC hasn't).
3.
visual memory no longer works; on forums, within those 25 messages, you see the names, the scores, the modifications to the subject lines, etc all at once. In the QA list page, you don't see who has answered, what votes the answers got, etc. So you end up reloading and reading the same thread because you don't recognize it in the list page.
4.
The so called "WYSIWYG" editor stinks
for one, it is not a WYSIWYG editor, as it still needs a preview mode to show how it really looks (with proper page width, syntax coloring, ...)
[ADDED 27-NOV] there have been several remarks/complaints in the forums; and now it got removed, and replaced by the good old message editor on 27-NOV-2009 [/ADDED]
5.
SIGs are gone. no SIG, no fun.
6.
cross-post problem (a minor issue: someone asking the same question in more than one forum) replaced by reread problem (a major issue: how to read messages with a specific tag (e.g. C#), later read messages with another tag (e.g. databases) without getting a lot of messages more than once?)
7.
repost problem (a minor issue: someone asking the same question in the same forum, just starting a new thread to get higher up on the first page) not solved; some kinds of edits (on the question or on an answer) are sufficient to bump the message.
8.
The guidelines have been shortened, most of the valuable content is gone.
item 3 ("Keep the question as brief as possible. If you have to include code, include the smallest snippet of code you can.") is completely wrong, it stimulates people to withhold essential information.
9.
I don't understand the function of the question, answers, and threaded discussion parts, and so do lots of other users. How can one react to an answer? ask additional questions? It is a mess.
[ADDED 30-NOV] Here is a simple example[^] of a poster adding an answer because he wants to ask something about a reply he has got.[/ADDED]
10.
Lots of bugs and minor issues; I trust those will be ironed out eventually.
PS: no need to react here, I will remove all replies; if you want some of this discussed, move it to the appropriate forum (probably the QA forum).
Luc Pattyn [Forum Guidelines] [My Articles]
I only read code that is properly indented, and rendered in a non-proportional font; hint: use PRE tags in forum messages
modified on Monday, November 30, 2009 8:29 PM
|
|
|
|
|
Have you ever seen Stack Overflow? Currently it kicks CP's ass. If people rank answers well, then all the bullshit answers and other irrelevant posts will drop below the radar. QA has much more potential than forums.
--
Kein Mitleid Für Die Mehrheit
|
|
|
|
|
I dissagree.
Stack overflow does have thread availability but the QA format leaves a lot to be desired. Also all the cruft is fine on a discussion like CP, it gives more flavour to see what kind of person is asking/answering questions, and the division of forums is great on CP.
It would be nice to have some sort of MERGEIT function to merge crosspost threads, so when one is spotted, don't remove it, just combine the threads into one, but appearing in both places. Or maybe allow cross posting explicitly, by tagging your question to appear in multiple forums. A question may be equally relevant to .NET Framework, C#, Web Developmnent and General Database, with the best answer coming from a mixture of problem domains. Common problem, I have a web app in C# making a SQL call. Which forum?
I would suggest a hybrid. Keep the forums for the actual discussions but have some mechanism for promoting an answered question (minus the cruft) into some sort of QA repository with tagging for quick querying.
|
|
|
|
|
Hi there!
I agree that QA is flawed in so many ways... concept, usability, implementation... you name it. Saying that, I find it also extremely enjoying to help people there (compared to e.g. editing on Wikipedia) and it's fun to report those little bugs from time to time. Btw I "secretly" use the Humor tag for the most enjoyable oddities I can find.
M
|
|
|
|
|
Helping people out in the forums is fine, in Q&A it is not IMO. They should have revamped the forums a little, rather than reinventing half of everything and omitting some essentials.
Luc Pattyn [Forum Guidelines] [Why QA sucks] [My Articles]
I only read formatted code with indentation, so please use PRE tags for code snippets.
I'm not participating in frackin' Q&A, so if you want my opinion, ask away in a real forum (or on my profile page).
|
|
|
|
|
Luc how can I join your club?
|
|
|
|
|
You already have!
|
|
|
|
|