Click here to Skip to main content
15,888,461 members

Jon Person - Professional Profile



Summary

    Blog RSS
43,194
Author
294
Authority
283
Debator
25
Organiser
1,179
Participant
0
Editor
0
Enquirer
Hi there! From 2004 to 2009 I ran a company called "GeoFrameworks," publishing two components called GPS.NET and GIS.NET which helped developers quickly write location-based services. Now, I've released the source code for GPS.NET to CodePlex for you to use as you see fit.

GPS.NET 2.0 on CodePlex
GPS.NET 3.0 on CodePlex

... I've also released the source code of a library called the "GeoFramework," a collection of commonly used classes such as Latitude, Longitude, Distance, Speed, and Position:

GeoFramework 1.0 on CodePlex
GeoFramework 2.0 on CodePlex

I'm now taking a break from programming, but I really appreciate the positive feedback from readers!
31 Dec 2004 CodeProject MVP 2005

Groups

Below is the list of groups in which the member is participating

Unknown

GeoFrameworks is a privately-held software design and development firm in Denver, Colorado, specializing in the creation of software components for Microsoft's .NET platform. Our products help developers vastly reduce their development time, save money, and quickly become experts with GPS and GIS technologies.



This is a Organisation
This member has Administrator, Manager, Author, Member status in this group

1 members

Reputation

Weekly Data. Recent events may not appear immediately. For information on Reputation please see the FAQ.

Privileges

Members need to achieve at least one of the given member levels in the given reputation categories in order to perform a given action. For example, to store personal files in your account area you will need to achieve Platinum level in either the Author or Authority category. The "If Owner" column means that owners of an item automatically have the privilege. The member types column lists member types who gain the privilege regardless of their reputation level.

ActionAuthorAuthorityDebatorEditorEnquirerOrganiserParticipantIf OwnerMember Types
Have no restrictions on voting frequencysilversilversilversilver
Bypass spam checks when posting contentsilversilversilversilversilversilvergoldSubEditor, Mentor, Protector, Editor
Store personal files in your account areaplatinumplatinumSubEditor, Editor
Have live hyperlinks in your profilebronzebronzebronzebronzebronzebronzesilverSubEditor, Protector, Editor
Have the ability to include a biography in your profilebronzebronzebronzebronzebronzebronzesilverSubEditor, Protector, Editor
Edit a Question in Q&AsilversilversilversilverYesSubEditor, Protector, Editor
Edit an Answer in Q&AsilversilversilversilverYesSubEditor, Protector, Editor
Delete a Question in Q&AYesSubEditor, Protector, Editor
Delete an Answer in Q&AYesSubEditor, Protector, Editor
Report an ArticlesilversilversilversilverSubEditor, Mentor, Protector, Editor
Approve/Disapprove a pending ArticlegoldgoldgoldgoldSubEditor, Mentor, Protector, Editor
Edit other members' articlesSubEditor, Protector, Editor
Create an article without requiring moderationplatinumSubEditor, Mentor, Protector, Editor
Approve/Disapprove a pending QuestionProtector
Approve/Disapprove a pending AnswerProtector
Report a forum messagesilversilverbronzeProtector, Editor
Approve/Disapprove a pending Forum MessageProtector
Have the ability to send direct emails to members in the forumsProtector
Create a new tagsilversilversilversilver
Modify a tagsilversilversilversilver

Actions with a green tick can be performed by this member.


 
GeneralBetter Living Through Immutable Objects Pin
Jon Person14-Feb-05 13:22
Jon Person14-Feb-05 13:22 
GeneralSolving bad form validation with your own Parse method Pin
Jon Person14-Feb-05 13:20
Jon Person14-Feb-05 13:20 
GeneralRe: Solving bad form validation with your own Parse method Pin
jblewis2-May-05 8:57
jblewis2-May-05 8:57 
GeneralWhy the Equals Method Has Different Meanings in Value Types Versus Reference Types Pin
Jon Person14-Feb-05 13:19
Jon Person14-Feb-05 13:19 
Overloading the Equals method in reference types is one of the most confusing guidelines to me because there is no concrete "when to do it" rule for reference types, and there are contradictions that come up when I try to do it. For example:

* When overriding Equals in a reference type to compare values, you should make the equality operator (==) do the same thing.
* Most reference types, even those that implement the Equals method, should not override ==.

So, once you finish implementing Equals, also implement ==, then comment out the code for == because it's really not allowed :P. I think that the two rules above should be rephrased into the following:

"Equals and the equality operator must be synonymous in value types, but have separate meanings in reference types. Override Equals in reference types to compare values only if sufficiently documented and the equality operator is left alone."

I've wrestled with this a lot with the "Angle" class in GPS.NET (http://www.gpsdotnet.com/Support/Documentation/StormSource.Gps.Angle.html) because it is by all accounts a value type. It stores a single value, a double, between 0 and 360 degrees, and is immutable, making it a great candidate as a value type. The only reason it's *not* is that it must be inherited from, and value types cannot be inherited from.

Turning a value type into a base type is a disappointing process because of the sacrifices that must be made. First, since (==) can no longer be overloaded to compare values, all math operators (+, -, +, /) must also be abandoned, which, according to FxCop, requires that the (==) operator be overloaded to test for value. See what I mean? Ouch. Goodbye elegance. Still, I can't help being tempted to break this rule and implement math operators. For example, this looks perfectly fine to me:

Angle Angle1 = new Angle(45);
Angle Angle2 = new Angle(180);
Angle Sum = Angle1 + Angle2; // 180 + 45

... yet it is not allowed!

After a lot of waffling, the Angle class now has what may be the best FxCop-compliant compromise. Mathematical operators are not overloaded (which makes FxCop happy), but mathematical methods "Add," "Subtract," which typically accompany overloaded math operators, are present, allowing for still-readable code:

Angle Angle1 = new Angle(45);
Angle Angle2 = new Angle(180);
Angle Result = Angle1.Add(Angle2); // 180 + 45

... which I guess is reasonable. It's just that Rule Number One of successful component development, in my opinion, is to "Facilitate Efficiency With the Simplest Possible Solution for The Developer, Not the Author." This rule would demand that "+" is better than "Add" because it saves developers the most time, but it's just not allowed, even when a base class is 99.9% similar to a value type.

If I was working on a private project, I would probably ignore FxCop and go ahead with overloading mathematical operators on a reference type, twisting my mustache as I go, but a reusable component is a much larger audience to appeal to. Has anyone ever overloaded mathematical operators in a reusable reference type with favorable feedback? I'm guessing "No."

GeneralWelcome! Pin
Jon Person14-Feb-05 13:19
Jon Person14-Feb-05 13:19 
QuestionRe: GIS article. Pin
Monomachus2-Nov-08 0:55
Monomachus2-Nov-08 0:55 
AnswerRe: GIS article. Pin
Jon Person6-Nov-08 9:42
Jon Person6-Nov-08 9:42 
GeneralRe: GIS article. Pin
Monomachus4-Dec-08 6:17
Monomachus4-Dec-08 6:17 
GeneralRe: GIS article. Pin
Shooker5610-Jun-10 9:15
Shooker5610-Jun-10 9:15 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.