 |

|
right from the start I got confused by all the options that where offered (4 radio buttons, 1 check box) under the edit box in Q&A as well as in T&T. I never understood what they were meant to do, and why they all were required.
Today I investigated a bit and I don't like it at all. There are two problems:
1. the functionality is wrong IMO.
2. the wording is short and unclear.
OBSERVATIONS ON RADIO BUTTONS
I used two samples, shown here (warning: I did not HTML-escape the samples while composing this message so one needs to look at the message source to see what is really there, i.e. a real BOLD tag, and a plain for with less-than test):
for (i=0; i<10; i++) log(i);
string rating="";
m=rRatng.Match(article);
if (m.Success) {
idx=m.Value.LastIndexOf(":")+2;
rating=m.Value.Substring(idx);
if (rating.StartsWith("0")) rating=""; }
Lorem Ipsum is simply dummy text of the printing and typesetting industry.
Lorem Ipsum has been the industry's standard dummy text ever since the 1500s,
when an unknown printer took a galley of type and scrambled it to make a type specimen book.
// this is a bold statement
// does it HTML-encode?
for (i=0; i<10; i++) log(i);
It has survived not only five centuries, but also the leap into electronic typesetting,
remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset
sheets containing Lorem Ipsum passages, and more recently with desktop publishing software
like Aldus PageMaker including versions of Lorem Ipsum.
Both samples have all lines starting with a TAB; they both include an HTML tag and a less-than operator.
The four radiobuttons are numbered 1-4 left-to-right.
For the C# code sample the results were:
adds PRE tags with lang moves left HTML encodes preserves HTML
1 yes yes yes yes no
2 no no no yes no
3 no no no no yes
4 yes yes yes yes no
For the text sample the results were:
adds PRE tags with lang moves left HTML encodes preserves HTML
1 no no no yes no
2 no no no yes no
3 no no no no yes
4 no no no yes no
CONCLUSION ON FUNCTIONALITY:
it is all wrong IMO, for several reasons:
- 1 and 4 do exactly the same; I cannot force the adding of PRE tags (which 1 is supposed to do).
- the HTML encoding (handling of < > &) should be independent of the PRE choices. As is, I can't get it to
paste code that has HTML (say in comments), it will HTML encode or not give PRE tags.
- when HTML tags are to be preserved, the HTML encoding still needs to be applied, hence more intelligence seems required (which I was told is available in the forum message editor!)
- when PRE tags are present, none should be added (I tried paste code, cut the result which now has PRE tags, paste that again, and the outcome got its PRE tags doubled).
THE CHECKBOX
I haven't looked into the checkbox yet; I'm not happy it exists at all. One reason is: after all the attempts to make intelligent choices about PRE, HTML encoding, and preserving HTML tags, it looks like a main switch that turns it all off. Do we really want that? I have a feeling it relates to the way a forum message, its signature, and its "modified on..." remark are all stored in one field.
SUGGESTION
- list all relevant use cases
- then come up with the logical user interface that deals with those use cases
WORDING
as long as functionality isn't clear and settled, it is too early to discuss wording.
Once we agree on what it does, I could easily come up with wording that is both clear and concise (although I'm sure I will suggest a tooltip approach to allow for an alternative less-than-concise-but-absolutely-clear wording.
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.3
|
|
|
|

|
The broken functionality has been fixed, the wording clarified, and your code sniffer is now in the forums.
My apologies for the delay.
cheers,
Chris Maunder
The Code Project | Co-founder
Microsoft C++ MVP
|
|
|
|

|
Chris Maunder wrote: The broken functionality has been fixed
Really? There is at least one show stopping bug right now. Took me two tries and less than a minute to get it. Why do you release untested stuff?
The functionality offered is still a bit of a mystery, some features ought to be orthogonal: when I paste something, I should be able to decide always-PRE/auto-PRE/never-PRE, and HTML escape on/off. That looks like two independent three/two-way decisions, not a single four-way decision. If you only offer all or some combinations, please list all aspects of each choice; if you offer several groups of choices, please use GroupBoxes or something equivalent to make that obvious.
|
|
|
|

|
Apart from having a separation between "wrap in PRE" and "encode" (which I agree would be nice and I will try and find more spare time to add) I can't replicate exactly what is broken based on the UI provided.
If you're saying the system / UI itself is broken (and untested) because I don't offer separate options that's a different story.
In any case, thanks as always for the feedback
[Apologies for the double notification: I had two windows open in Reply mode while testing and hit the wrong "Submit" button ]
cheers,
Chris Maunder
The Code Project | Co-founder
Microsoft C++ MVP
|
|
|
|
| |

|
#1# recent additions/changes (11-JAN-2011) got flagged with #1#.
#2# recent additions/changes (12-JAN-2011) got flagged with #2# and apply to "beta 2".
#3# recent additions/changes (also 12-JAN-2011) got flagged with #3# and also apply to "beta 2".
#4# recent additions/changes (13-JAN-2011) got flagged with #4# and apply to "beta 3".
#5# recent additions/changes (16-JAN-2011) got flagged with #5# and apply to version cb4/sb4.
the alpha looks promising, startswith functionality looks great.
Comments on the search engine
101. seems not to see today's forum messages
#1# OK, it is seeing the latest additions to regular forums, albeit with some (unknown) delay, might be a couple of minutes. So adding messages for test purposes still does not work well, one never knows whether they are included yet or not, and hence should or shouldn't pass the search filters.
102. seems to use OR instead of AND when two words are searched for
(more hits for fourth estate than for fourth)
#1# this is wrong in that it deviates from what popular engines do (Google, Bing, the current CP search engine,
i.e. everything CP members use continuously), I have no doubt the community will have you change this!
#3# Has been fixed on 12-JAN-2011.
103. seems not to accept operators such as AND
#1# AND operator seems to work now, thanks
12+13 makes it hard to test the search engine! please fix at least one of them ASAP so I can
perform tests that search a lot but return only very few results.
104. I did not investigate relevance yet
#1# please show the relevance score (either permanently, or at least in the test/evaluation phase) As a tester, it would be really useful; as a user, I would use the information too. And when you show it, make sure it stands out more than the current "rating", which is the voting score of articles/messages, and, while useful, it rather confuses me (I would bold relevance, not bold rating).
105. I did not investigate performance yet.
#1# I will use the tool regularly to get a feeling about performance.
106. suggestion: show a version number, so I can refer to it when reporting back to you.
#2# is OK now, I see "beta 2"
#3# not quite OK yet, as both server and client have a version, only client version gets shown so far.
107. #2# I'm experimenting with this message[^]. It has a single digit 2 in it.
OK: I can find the message looking for: "logging implemented"
strange: I also find it looking for: "logging implemented" AND 2 (as if numbers do startswith automatically?)
bad: I also find it looking for: "logging implemented" AND 29 (there is no 29 at all!)
bad: I also find it looking for: "logging implemented" AND "29" (there is no 29 at all!)
Looks like a bug. My wild guess: something is removing unwanted characters (digits and more) from the filter text, resulting in an empty string, which is always present. IMO we do need a way (an intuitive one at best) to search for pretty normal, as well as, pretty strange special characters.
#3# OK, I learned numbers are not indexed; that is fine, it needs to be mentioned in the documentation though. Digits inside words are treated like letters, so "log4net" does not pose any problems.
108. #4# bad: I can't find it looking for: "logging implemented" AND programs (there is ->Programs-> in the body text)
#2# At best I'd like to search for "->Programs->" and find the message!
I still have to experiment with searches containing special characters.
109. #4# BUG I'm getting one hit for "backgroundwo" (Any date), can't explain why. Note: the snippet shown happens to end on backgroundwo. http://www.codeproject.com/Script/Forums/view.aspx?msg=2675648[^]
110. #4# BUG Periods are treated (somewhat?) as letters, so object.field is one word and gives no hit when searching for object. I created a number of test messages in C# forum, they all contain "LPXYZ" and then some specials I'm trying to search for.
111. #4# BUG I have a message that contains object.method(parameter) which I find with object.method* (OK), not with object.method (so the "word" is longer) and not with object.method(* (so what is the word??)
Comments on processing
201. sortedby seems not to work reliably; performing the same search
with a different sort spec often gives the same result list.
#1# Problem not seen today.
#3# Seems OK
202. #2# "filter by" does not work; when "any date" gives a number of results, any other
filterby choice returns nothing. Tried "logging implemented" again. Please fix.
#3# Seems OK now (provided I allow for a sufficient time window!)
Comments on GUI
301. #1# I'm sure already I want one of these two:
- either change the default (or topmost) item to be "Date Created DESC" and "Last Month"
- or, better yet (less subjective), remember the last setting of each combobox (sortedby, filteredby, ...)
#3# Thanks, createddesc and 1month are comfortable.
#4# It is great the way it is now, for my testing (and my use), however I think the community will prefer you remember the last setting for each of the comboboxes.
302. #1# I often overshoot the search bar, end up in the main menu bar, and have a menu roll down,
covering the search box I'm after. Quite annoying. In fact I have always disliked the hover menus,
but now I have good reasons to want click menus instead of hover menus. In my books, hovering should only cause minimal change, say a bolding or slight color change, and not open something.
303. #1# I would very much prefer a date format with a non-numeric month, as the American way is confusing to large parts of the world; the way the forums do it would be just fine.
304. #1#Of lesser importance right now, but mentioning it already anyway: I keep prefering a real grid-like display, with actual columns, and click-to-sort-me headers.
305. #2# In the result list, I saw some author names with HTML-escaped HTML tags. You probably want a text-only member name there.
#4# Example: search for "logging implemented in your service" (with quotes; last year)
306. I'd like a wider textbox for the "for" parameter. Twice as wide would be good.
#4# Solved in beta 3.
307. #2# The "for" textbox doesn't auto-scroll when dragging the mouse; say it contains more text than can be visible at a time, and is unscrolled (hence showing the leftmost content), I now click leftmost and drag to the right, attempting to select all (which I could do with CTRL/A as well), it does not scroll at all; regular WinForms textboxes do that, apparently web textboxes (such as Google's search box) don't. That is a pain. Probably nothing reasonable you can do about that.
#4# Solved by the larger search box.
308. #4# I would suggest a help ("?") button on the search page, leading to a full-page description of what it does, how it works, what special operators are available, etc.
309. #4# I would make the result hyperlinks of the new-tab variety, so multiple hits can be looked at without querying the database again.
310. #4# I would swap the order of "sorted by" and "filtered by" on the query entry line as that seems more logical (the query summary line is fine already). Also there is some casing inconsistency.
311. #4# Rather than a simple "Go" button, I'd make it an icon, with Bob holding a magnifying glass, maybe a Sherlock Holmes cap, and a CP orange background.
312. #4# Rather than "All documents" I'd call it "All of Code Project" (even when that is not strictly correct; the documentation could clarify), as "documents" isn't an adequate term for most of the database content IMO.
313. #4# I think there better be a way to tell the user something is wrong when there is.
Example: you're not supporting "endswith" functionality (that is perfectly OK, just an example!) so searching for *urth estate is bound to fail. I suggest you don't even try the search, instead give a specific error message. (At the moment such failing search takes 10 seconds to complete, my FF progress bar fills 80% right away, then sits idle).
314. #4# I think I would not show any rating information for a hit when there aren't any votes yet, same as you do in forum messages (articles themselves always showing a rating is different, and OK IMO, the list of hits doesn't need distractors though).
315. #4# BUG It broke down completely: "All documents" has disappeared. This is bad. Messages that were found earlier are not found any longer (e.g. no LPXYZ). I still do find my "PRE tags" in Tips&Ticks.
316. #5# VERY BAD UI The default state of a search filter should be either "no filter" or wathever it was before. Having checkboxes getting cleared all the time is unworkable. And the query status line needs to show the full query, including the checkbox settings when the search was ran.
|
|
|
|

|
I was mistaken. AND is the default for google. I will change the default
|
|
|
|

|
Any updates to this, Luc?
cheers,
Chris Maunder
The Code Project | Co-founder
Microsoft C++ MVP
|
|
|
|

|
I stopped updating my list as the development seemed to have come to a stand still too soon, and I wasn't getting any signals. The list was getting too long to retest everything all the time without feedback.
remaining known problems in my descending priority: 301, 110, 309, 313, search page GUI inconsistencies, overall site search confusion, ...
please fix 301 ASAP, I want "order by creation date desc" in over 90% of my searches, so I want it either sticky or as (my) default.
I have a hunch 110 is bigger than what I described, your "letter and word definitions" are mysterious, maybe wrong (maybe it can't even be constant, i.e. it may have to depend on language or context), anyway it should be documented.
missing features:
- I sometimes need a "search literally, no matter what, even with symbols" so I could locate "@#$%", not just "abcd", if that is what I am looking for.
- search CP member list
- search downloads could be useful at times.
- The help balloon is insufficient.
conclusion: much better than the old search, it finds more; I am not satisfied yet; it is still rather unreliable, i.e. it does not find all there is that matches the user's interest. The GUI should be improved. The last mile would add the most value.
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.
|
|
|
|

|
Our saved searches should help with 301, and Matthew has been working on 110.
"Search literally" has been the bugbear of searches. We will continue.
cheers,
Chris Maunder
The Code Project | Co-founder
Microsoft C++ MVP
|
|
|
|

|
Thanks for the update.
I tried saved searches yesterday (read about it in newsletter); it didn't work for me, I never seemed able to save more than one. It does work today. I think I would prefer the saved search widgets to be on a single horizontal row, above the search box.
However, 301 isn't urgent any longer, I installed a little browser bookmark button that links to the search page with ?sort=createddesc in the URL and that works just fine (as long as I don't reach the page in another way).
110 is very relevant when searching for code examples on a class. The way it is now, a statement such as Button.Font=new Font(...) is not matched by Button which is, er, not good.
I understand literal search is either expensive or hard; on rare occasions it is the only way to retrieve something, say an example of the ?? or ?: operators in C#.
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.
|
|
|
|
| |

|
Keeping track of some CP bugs I encountered. All entries have a unique ID; they are in no particular order. Bugs that have been solved will be removed.
My current top priority is: F112
#1# new text (11-JAN-2011) has been flagged #1#
#2# new text (20-JAN-2011) has been flagged #2#
categories:
easy: should be simple to fix
medium: needs some work
hard: probably needs major effort
swa: a simple work-around would improve the situation right away
status:
SB: reported in Suggestions&Bugs forum
Articles
ID Cat Status Description
A101 easy SB 16-DEC-2010 Browse Code gives no indication which file is currently being watched
#1# CP task #1917
A102 medium SB 16-DEC-2010 Browse Code often cuts the viewed file short (doesn't occur on simple files)
solved 17-JAN-2011
A103 easy SB 16-DEC-2010 Browse Code shows gibberish for PNG files
#1# Seems fixed
Tips/Tricks
ID Cat Status Description
T101 easy SB 01-JAN-2011 There is an attempt to prevent multiple alternatives by the same author; it is a bad idea to forbid
this as there could easily be two or more ways to do better than the original. And the attempt
to prevent extra alternatives is flawed. Proof is
here[^].
T102 easy SB 01-JAN-2011 Alternatives aren't listed on the home page when the original is less than 3 hours old.
That is unfair as their value does not depend on the age of the original.
My two alternatives never showed on the home page, while another one added later did show.
I have a screenshot showing John's original and the third-party alternative, its all about
this.[^]
Forum messages
ID Cat Status Description
F101 easy SB 25-APR-2010 An HTML tag at the end of a line eats the next NewLine (reported many times)
#1# CP task #1918
#2# fixed ca 17-JAN-2011
F102 easy SB 17-JUL-2010 Modifying a message several times, at larger than 5 minute intervals, makes the
"Modified on..." message intrude in my (pretty full) sig. [See also F111]
F103 easy SB 19-JUN-2010 First right-arrow on a freshly loaded forum page goes wrong
#1# CP task #755
F104 easy SB 03-JUN-2010 Exiting "View thread" mode should bring us back to the page where the trhead was, not to page 1.
F105 easy SB 27-MAY-2010 When applying a style (bold, underline, ...) through a widget, if the selection ends on a space,
that space should not be considered selected.
F106 medium SB Replies to the enquirer should default to type "Answer" no matter at what nesting level they are.
#1# The replier can change it (e.g. to question) when appropriate, however "answer" is the
#1# most likely content (Note: it is replies to the enquirer, not to just anybody)
F107 easy SB The "Use HTML in this post" checkbox should apply to the message and not to the sig
(04-FEB-2010)
#1# Even when message and sig are stored together, this should be doable, as the edit page
#1# knows how to tell them apart again.
F108 easy SB Smileys should not include spaces, i.e. a simple ":(" should be sufficient to get the sad smiley.
#1# IMO this is most relevant for the sad smiley.
*** sad smiley lost its space (13-JAN-2011)
F109 easy SB Tags that have been left open accidentally should automatically be closed at the end of a message
(before the sig), so the sig never becomes part of say a PRE block
F110 easy new in forum messages like this one, hyperlinks don't work inside PRE blocks.
#1# CP task #1919
F111 medium SB The "Modified on..." message uses Toronto time, which is confusing as everything else
is using local time. IMO the message table should have a "Last modified on" field and
use that, rather than storing a "Modified on..." sentence inside the message.
F112 medium SB 11-JAN-2011 Bold is hardly noticeable inside a PRE block. Sometimes a question shows a nice snippet
#1# and the message text claims to have a problem in the bold line, which I can hardly discern.
Not sure what a good solution would be (automatically also underline? blink? ...)
F113 easy SB 11-JAN-2011 A thread starting question (or even any message in a thread), once it has gotten one or
#1# more replies, should not offer a "remove" widget at all, or its function should be
altered so only " [removed]" gets added to the subject line, leaving the body intact,
rather than mutilate the entire thread. The non-leaf starting question could instead
offer a "thread is done" widget which appends " [done]" to the subject line, and no more.
#2# partially dealt with
Varia
ID Cat Status Description
V101 hard SB Colorizer sometimes gets confused by quotes, double quotes, empty strings
#1# CP task #1895
V102 medium SB One cannot undo a vote (one can correct a vote, say replace 5 by 3, but that's about it;
especially bad on a good/bad vote.)
#1# suggestion: when already voted, don't show voting tools, just show the existing vote and
#1# an "unvote/revote" widget which cancels the vote and brings back the voting tools.
V103 hard SB Search functionality is insufficient (#1# I know this is WIP)
more here[^]
V104 hard SB 05-OCT-2010 There are discrepancies between rep numbers and rep graph (typically graph is a few points short)
The difference vanishes on a recalculation, then shows up pretty soon, without changing much.
#1# Not quite fixed yet, I now have a 200 Author discrepancy.
Reputation (not necessarily bugs)
ID Cat Status Description
R101 easy SB I still think "Post Comment" should not yield Participant points, Debator or Organizer yes,
it just does not fit amongst the other participation actions.
#1# irreconcilable differences
R102 easy SB 17-OCT-2010 Give extra (participant) points for S&B posts (always? those added to TODO?)
#1# If a new message type is used, make it the default there!
#1# I would settle for a bonus factor (all S&B messages get an extra factor of say 5), not the votes!
R103 easy SB 23-AUG-2010 Give extra (participant) points for approving an article
R104 easy SB FAQ does not explain which actions get points multiplied by some color weight factor.
#1# Fixed, FAQ says "Points are weighted by voting member's level."
#1# It might have been clearer by adding a "* VW" in the numeric columns (VW=voter weight)
#1# Well, not OK, neither of those specify which voter level matters.
And finally some suggestions (i.e. not bugs at all)
ID Cat Status Description
S101 medium SB Improve site documentation (01-OCT-2010: what is a group?)
#1# CP task #941
S102 easy SB 21-SEP-2010 Show server name also at the top of every page (only to gold+; to get better bug reports)
#1# Bottom only makes me scroll a lot of pages!
S103 medium SB provide CP web service
S104 medium SB add code sniffing to message editor (that is what I provided it for!)
#1# CP task #1808 is merging both editors
S105 easy SB 19-AUG-2010 provide widget for downloading a single file, and an entire zip, on the Browse Code tab
S106 medium SB more storage space for sig (say 1K char)
S107 medium SB accept IMG tags everywhere for CP-resident images, so platinums can use "My Uploads"
to show some illustration in forum message or sig.
#1# if you can't trust platinums, whom can you trust?
S108 hard SB 28-JUN-2010 I don't like my tip/tricks being edited without getting a message from the editor explaining
what has changed and why. And I rather get such message and do the edits myself.
#1# CP task #1921 will send e-mail
S109 medium new Can't we avoid most layout problem reports by renaming dependent files on an update,
hence forcing them being downloaded. I know that makes it a bit trickier for your source control,
however that must be solvable in a transparent way (e.g. copying their history)
S110 medium SB 24-MAR-2010 Article Wizard suggestions
see here[^]
#1# CP task #1103
S111 medium SB Actions that are only available for members with sufficient rep (e.g. edit tip) should be
visible but disabled for members not having the privilege, but with a tooltip explaining
what the feature would do and what would be required to get it enabled.
#1# A specific idea: add a help mode to the site, toggled on/off by the click of a button.
#1# Off = the page does what it does now; on would give tooltips for most buttons/widgets/etc
#1# with comprehensive text (both a short telex style, and full sentences giving all details)
PS: If and when comments were posted in response, I would read, process and probably delete them.
|
|
|
|

|
Jan 10, 2011:
A101 - added (#1917)
A102 - can you provide a repeatible example? Note: if the coloriser crashes then the file is shown without colorization. The bug is elsewhere.
A103 - PNG files should not be offered for viewing. Fixed
T101 - this is by design.
T102 - There is no 3hr limit. Alternatives are listed as soon as they are approved
F101 - Updated Task (now #1918)
F102 - See F111
F103 - task #755
F104 - Not always possible. I'll review, though
F105 - I'm fairly sure this is browser dependant
F106 - I disagree. A post that asks for clarification is not an answer.
F107 - Very tricky. We don't store the sig independantly so doing this would require serious replumbing.
F108 - Some smileys can be confused with technical terms. :( probably won't be, so I'll remove it for this this one.
F109 - This related to F107 in that we do not store sigs separately. We store the raw HTML and apply HTML -> XHTML conversion to the content on display, not on storage. This allows us to update our HTML correctors on the fly, but means that HTML correction will apply to the entire message.
F110 - Task #1919
F111 - This is because we hardcode the time into the message instead of adding a placeholder which would then need to be replaced on the fly. I'll add a task for this to display the modified time outside of the message. (#1920)
V101 - Task #1895
V102 - Suggest a UI.
V103 - New search in beta.
V104 - Fixed. The issue was we introduced an "active" flag on rep events and forgot to take that into account in one of the stored procs.
R101 - Discussed, and I disagree
R102 - Great idea. Not sure how to neatly implement this. Possibly a new message type?
R103 - Task #1915
R104 - Where this occurs the FAQ states "Points are weighted by voting member's level."
S101 - Task #941
S102 - Showing at the bottom isn't sufficient?
S103 - In progress
S104 - It's already in place in the general editor. Task 1808 will merge with the forum specific editor
S105 - part of the (much) larger project of getting download counts history from our IIS logs.
S106 - I think the sig size is an adequate compromise
S107 - The never ending debate I have with myself.
S108 - Task added (#1921) to alert the poster an edit was made. However, sending a message and hoping the poster will update their tip will in general result in few updates.
S109 - files already have a querystring "dt=<version>" to combat this.
S110 - Task #1103
S111 - I';ve decided against doing this in order to not clutter up the interface. Happy to be convinced otherwise though - even for a subset of tasks.
cheers,
Chris Maunder
The Code Project | Co-founder
Microsoft C++ MVP
|
|
|
|

|
I have processed your reply, and added your info to the original, as well as some clarifications you asked or triggered.
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.
|
|
|
|
| |

|
This is the thread that hosts the discussion about my proposal for a CP Web Service.
A proposal document is available here[^]. Its current version is 1.0; it will be replaced by a future version if and when it becomes available.
|
|
|
|

|
My initial comments, in no particular order, and based on myown personal goals for the API, are:
1. I want the API to start out focussing on an individual developer: you. The API (initially) is not something to allow members to trawl through thousands, or millions, of member records. It should, instead, provide information relevant to you, and to your profile and your experience on CodeProject.com.
2. I will be leveraging our Object References system which relies on an ObjectType ID / Object ID pair. Eg a member is ObjectTypeID = 1, so member #1 is identified uniquely across all objects using (1,1).
3. IsMVP should in fact be "MemberTypes" since a member could be Mentor, MVP, SubEditor etc.
4. You've made no mention of ratings, yet this is one of the things I see being a focus of many CP scrapers. I will be adding something along the lines of GetVotes(int ObjectTypeID, int ObjectID, DateTime startDate). This allows you to get all votes for all your items, filtered by ObjectType (eg articles, messages etc), a single object, or all votes past a given date. Vote info will be date, score and weight.
5. Do you really want GetXByY methods, or GetX(sortMethod) methods? My preference, in order to keep the API small and extendable, is the latter.
6. In your Article structure you have a list of member IDs. I would prefer to return usable objects (say, name, ID, profile URL) to save an expected followup lookup.
7. Protocol. You mention using Windows WebServices. I was thinking of starting with JSON data initially with XML to follow immediately afterwards.
cheers,
Chris Maunder
The Code Project | Co-founder
Microsoft C++ MVP
|
|
|
|

|
Thanks Chris. I'll await other inputs before reacting in extenso. Except this:
1. The need is wider than just for one member's info. CP Vanity lists the "highest achievers", i.e. all people appearing in the first 4 or 5 pages of Who's Who when sorted by article count or message count.
4. the proposal V1.0 has average ratings in the Member structure, and rating and voteCount in the Article and Message structures; it does not include more detailed voting info as that info is currently not available on the web site either.
|
|
|
|

|
I skimmed through it. It seems reasonable.
Have you tried passing a System.DateTimeOffset? (I haven't.)
|
|
|
|

|
Hi PIEBALD,
Thanks for your first reaction.
I haven't felt the need to pass a DateTimeOffset; in fact I never even used one. My thinking was to communicate UTC only, then a client could, and probably would, adjust everything for local time (i.e. I'm not going to ask CP what timezone I'm in). Do you see a need for DTO?
|
|
|
|
|
|

|
I still have no idea why one would use a DateTimeOffset at all, I didn't know it existed, and I don't understand it.
What is wrong with DateTime, it looks like WSDL serializes it properly.
|
|
|
|

|
Hi Luc,
Firstly, thanks for including me in your discussions, it an honour, and thanks for the reference on the document to my CPRepWatcher!
Looking a the document, you have put together some excellent methods for the webservice, some comments i would have are;
1) The member structure should be maybe be modified to remove some elements; e.g. the Twitter Name. There should be another method that can be called to get this information, if Chris adds other associations in the future, e.g. LinkedIn, Facebook, AnOther, then there would be a requirement for the structure to change. Perhaps have a GetMemberExternalAsscociations that returns a KeyValue Pair string dictionary, where each entry would have the site as the key, and the member name or reference url as the value e.g. Twitter=daveauld
2) I would also remove the things like the post counts average ratings etc, and have them associated with a separate method, for similar reasons to #1 above. Keep the GetMemberInfo to the basic info that is unlikely to ever change.
3) The GetMemberRating, should possibly also be changed to a dictionary list of key/value pairs, for the same reasom, as the site evolves, more items may be added, and the structure would have to change, by using a dictionary, the client would only then have to add another handler for the key value
4) I take it the count parameter in the GetMembersByxxxx returns the number of items being requested? Or is this also updated by the return call to return the number actually returned? Possibly need to limit this to MaxNumber internally per call, also, if you called 1000 and you started at 500 from the end, if it returned only 500, the client would know there are no more and to stop querying during recursive calls.
5) What about a GetMemberCount(); to return the number of site members.
Thats it for the moment!
Cheers.
Dave
Find Me On: Web| Facebook| Twitter| LinkedIn
CPRepWatcher now available as Packaged Chrome Extension, visit my articles for link.
|
|
|
|

|
Hi Dave,
you're one of the known HTML scrapers, so I included you in the review panel.
thanks for your feedback. I'll delay a full response till all have had the opportunity to provide their feedback.
Two clarifications though:
4. the methods returning a list of IDs have a count indicating how many results the caller hopes to get, and there is an imposed maximum (MAXCOUNT); no it isn't a ref parameter (I don't think Web Services can handle that), the returned results will contain count or fewer items; fewer implies end of list. This is in the doc already (principle 5, on page 3), I probably didn't formulate it well enough.
5. MAXCOUNT and the memberCount are returned by GetGeneralInfo(), see page 5.
Cheers.
|
|
|
|

|
I think we should consider implementing my tip/trick regarding web service access (one method returns all data as XML).
.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
|
|
|
|
|

|
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 bullsh*t 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!
|
|
|
|
 |
|