Click here to Skip to main content
15,885,366 members

Chris Maunder - Professional Profile



Summary

Follow on Twitter LinkedIn      Blog RSS
421,407
Author
24,203
Authority
255,426
Debator
18,921
Editor
6,825
Enquirer
31,844
Organiser
14,184
Participant
Chris Maunder is the co-founder of CodeProject and ContentLab.com, and has been a prominent figure in the software development community for nearly 30 years. Hailing from Australia, Chris has a background in Mathematics, Astrophysics, Environmental Engineering and Defence Research. His programming endeavours span everything from FORTRAN on Super Computers, C++/MFC on Windows, through to to high-load .NET web applications and Python AI applications on everything from macOS to a Raspberry Pi. Chris is a full-stack developer who is as comfortable with SQL as he is with CSS.

In the late 1990s, he and his business partner David Cunningham recognized the need for a platform that would facilitate knowledge-sharing among developers, leading to the establishment of CodeProject.com in 1999. Chris's expertise in programming and his passion for fostering a collaborative environment have played a pivotal role in the success of CodeProject.com. Over the years, the website has grown into a vibrant community where programmers worldwide can connect, exchange ideas, and find solutions to coding challenges. Chris is a prolific contributor to the developer community through his articles and tutorials, and his latest passion project, CodeProject.AI.

In addition to his work with CodeProject.com, Chris co-founded ContentLab and DeveloperMedia, two projects focussed on helping companies make their Software Projects a success. Chris's roles included Product Development, Content Creation, Client Satisfaction and Systems Automation.
31 Dec 2004 CodeProject MVP 2005

   
Articles 130 (Legend)
Tech Blogs 0
Messages 39,375 (Master)
Q&A Questions 24
Q&A Answers 95
Tips/Tricks 12
Reference 2
Projects 0
Comments 267

Groups

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

United States United States
The ASP.NET Wiki was started by Scott Hanselman in February of 2008. The idea is that folks spend a lot of time trolling the blogs, googlinglive-searching for answers to common "How To" questions. There's piles of fantastic community-created and MSFT-created content out there, but if it's not found by a search engine and the right combination of keywords, it's often lost.

The ASP.NET Wiki articles moved to CodeProject in October 2013 and will live on, loved, protected and updated by the community.
This is a Collaborative Group
This member has Member status in this group

754 members
United States United States
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.
This is a Collaborative Group
This member has Administrator, Manager, Author, Member status in this group

1 members
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.
This is a Collaborative Group
This member has Administrator, Manager, Author, Member status in this group

2 members
The CodeProject focus group is an informal and changeable group of long-suffering CodeProject members willing to give their time and patience to discussing product, branding and marketing ideas with those looking to actually understand what developers think.

To apply to join this group simply hit the "Apply to join this group" button.

To seek the wisdom, guidance, and hopefully a little enlightenment, email focus@codeproject.com and we'll work out a time to discuss your thoughts.
This is a Collaborative Group
This member has Administrator, Manager, Author, Member status in this group

39 members
United States United States
You may know us for our processors. But we do so much more. Intel invents at the boundaries of technology to make amazing experiences possible for business and society, and for every person on Earth.

Harnessing the capability of the cloud, the ubiquity of the Internet of Things, the latest advances in memory and programmable solutions, and the promise of always-on 5G connectivity, Intel is disrupting industries and solving global challenges. Leading on policy, diversity, inclusion, education and sustainability, we create value for our stockholders, customers and society.
This is a Organisation
This member has Administrator, Manager, Author, Member status in this group

42 members
The CodeProject Authors are a group of talented technical writers who create articles and whitepapers for some of the biggest companies in the industry. Under our ContentLab.io unit we reach out to those who need content written but lack the time, expertise or resources to complete the work.

Looking to earn a little extra and get connected to, and be featured on, the websites of the companies whose technologies you know and love? If you can write well and are efficient with time then send us an email at info@contentlab.io.
This is a Collaborative Group
This member has Administrator, Manager, Author, Member status in this group

90 members
Publisher CodeProject
Canada Canada
The CodeProject Advisors group is comprised of CodeProject members specifically chosen to advise the CodeProject on new products related to helping the community answer technical questions. This group participates in beta testing and feedback of products designed to help connect members with experts.
This is a Collaborative Group
This member has Administrator, Manager, Author, Member status in this group

28 members
Publisher The Code Project
United States United States
Sign up to get the news you didn't even know you needed to know in the most valuable 5 minutes of reading of your day.

The Code Project Daily Insider keeps you up to date with what is happening around the industry. From the continue saga of the Big Boys to Scott Guthrie's blog ramblings and Steve Jobs' latest, you will find it here.
This is a Collaborative Group
This member has Administrator, Manager, Author, Member status in this group

3 members
Web Developer
Canada Canada
In January 2005, David Cunningham and Chris Maunder created TheUltimateToolbox.com, a new group dedicated to the continued development, support and growth of Dundas Software’s award winning line of MFC, C++ and ActiveX control products.

Ultimate Grid for MFC, Ultimate Toolbox for MFC, and Ultimate TCP/IP have been stalwarts of C++/MFC development for a decade. Thousands of developers have used these products to speed their time to market, improve the quality of their finished products, and enhance the reliability and flexibility of their software.
This is a Organisation
This member has Administrator, Manager, Author, Member status in this group

476 members
United States United States
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.
This is a Collaborative Group
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.


 
GeneralThe Gentle Art of Upgrading Pin
Chris Maunder6-Oct-05 9:08
cofounderChris Maunder6-Oct-05 9:08 
GeneralCodeProject upgrades Pin
Chris Maunder12-Sep-05 16:13
cofounderChris Maunder12-Sep-05 16:13 
GeneralRe: CodeProject upgrades Pin
MoustafaS11-Nov-05 19:35
MoustafaS11-Nov-05 19:35 
GeneralRe: CodeProject upgrades Pin
Kelly Cristina Mara9-Feb-08 2:58
Kelly Cristina Mara9-Feb-08 2:58 
GeneralKVMs and Firewalls Pin
Chris Maunder8-Jun-05 9:53
cofounderChris Maunder8-Jun-05 9:53 
GeneralTo Stored Procedure or not... Pin
Chris Maunder31-Mar-05 3:41
cofounderChris Maunder31-Mar-05 3:41 
GeneralRe: To Stored Procedure or not... Pin
Douglas Troy3-May-05 6:36
Douglas Troy3-May-05 6:36 
GeneralPerformance Tuning Pin
Chris Maunder12-Mar-05 15:49
cofounderChris Maunder12-Mar-05 15:49 
Over the past few weeks performance has been the major focus of attention. The work was two-fold: upgrading hardware to ensure we're not limited in that regard, and reworking the code and database to ensure we use that hardware with the greatest efficiency. Our operations guy slipped in a nice new shiny database server that should have enough capacity to see us good for a while. The code upgrades were a bit more involved.

I've received a lot of helpful suggestions from many readers on their experiences, the things that worked for them and major gotchas. Sensible things like removing unnecessary queries, caching as much as possible, using firehose cursors, providing lock hints to minimise locking issues and making sure indices are correct. I would like to give special thanks to Andy Brummer for taking the time to analyse our SQL profile traces and make recommendations. This has been an on-going iterative process and the results have been impressive.

The initial step was to perform a SQL trace to see what queries were the most expensive and which could be reworked or removed. It may seem obvious but there's no use in removing or reworking something if it's not a problem. Likewise, if we find a query that is a big problem but an absolute necessity then at least we have a starting point from which to measure subsequent improvements.

After our initial tests I reworked the infrastructure as follows:
  1. Removal of features that are high load

    Viewing the messages posted by a given member, the birthday list, the number of new messages in each forum since last visit, the 'last page' button in the forums (fora?*), and removal of the link to the members list page in the lounge all contributed to a reduction in load. Some of these features were of interest to only a very few people so I felt justified in nuking them. Other features, such as the number of messages since the last visit are useful, but expensive. In the end a simple compromise was made whereby fora with new messages are listed in bold. It's not so much how many new messages have been posted, but whether that number is greater than zero.

    As well, removing links to high load features discourages abuse of these features and reduces the number of site crawlers that inadvertantly hit a page. As a resource site, we are spidered and indexed frequently.

  2. Forum caching

    Each forum can now have its top N messages cached at the webserver level, and I can turn on and off caching for individual fora and change the number of messages cached on a per-forum level. Caching only works when the user has selected 'messages in the last 3 months' (since setting the date to anything else changes the messages to display, and the caching isn't smart enough for that). This setting is the default setting so spiders and crawlers will experience (and contribute) little load.

    The caching is a generic webclass and as such it can be applied to other features. The number of members and number of articles on the homepage have also been cached alongside the other homepage items.

  3. Lock hints

    Lock hints were added to the article search query. Most of the data we need to display is not time-critical so if it's displayed 10 seconds out of date no one will notice. By adding local hints to queries we were able to reduce the number of lock waits.
At this point we had a nice boost. Many of the worst offenders had simply been removed. We had essentially torn out the bigger weeds from the garden and could now concentrate on more insidious creepy-crawlies. More traces were done and the results used to fine-tune:

  1. Firehose cursors

    A server-side cursor was hiding in the search page. This was converted to firehose and resulted in a a nice boost. Actually not so much a boost, but the removal of a slow point.

  2. Updated indices

    Important indices on many tables were lacking, even after careful and repeated use of the SQL Server Index Tuner. This has significantly reduced the number of massive table scans and so has reduced load spikes.

  3. Reworking queries

    Reworking queries and adding indices go hand in hand. In my soul I'm a C++ programmer and sometimes forget that I'm not programming against a chip with a math-coprocessor, but against a SQL interpreter that has to first seek out the data on which to operate before doing the actual operations. A great example was a search for a specific forum type. ForumType is a bitmask and I wanted forum types 16 and 32. Hence:
    SELECT * FROM Forums WHERE (ForumType & 48) > 0
    However, this means every row in the Forums table needs to have the (ForumType & 48) operation applied, meaning a full table scan. Replace this with
    SELECT * FROM Forums WHERE (ForumType & 48) > 0 and (ForumType >= 16)
    And now you can take advantage of an index on ForumType and reduce the number of rows to which the (ForumType & 48) need be applied. This can result in a significant performance improvement.


Todo:

Still to do are a number of important steps:

  • Reduce page and site features based on the visitor. If it's a search engine spider then expose the articles and information in a simple manner that reduces database load
  • Improve spider and stripper recognition. Recognised site strippers are already banished but most pretend they are IE and slip through.
  • Rework the table structure to minimise joins. This will involve careful denormalisation of some tables, while reducing flexibility in others. The point being that the flexibilty built into the current system isn't being used so it won't be missed, nor will the current performance hit caused by the current schema.
  • Reduce the physical size of tables by archiving old data or vertically partioning data into separate tables.
  • Offload some of the logging work to a separate database server to free up the database server for more immediate tasks.



*Yes, this is the correct pluralisation. Sounds a little weird, but who am I to argue


cheers,
Chris Maunder
GeneralRe: Performance Tuning Pin
Shog914-Mar-05 8:33
sitebuilderShog914-Mar-05 8:33 
GeneralRe: Performance Tuning Pin
Chris Maunder14-Mar-05 16:05
cofounderChris Maunder14-Mar-05 16:05 
GeneralRe: Performance Tuning Pin
ACorbs15-Mar-05 11:07
ACorbs15-Mar-05 11:07 
GeneralRe: Performance Tuning Pin
Chris Maunder17-Mar-05 5:16
cofounderChris Maunder17-Mar-05 5:16 
GeneralRe: Performance Tuning Pin
Chris Richardson23-Mar-05 22:01
Chris Richardson23-Mar-05 22:01 
GeneralRe: Performance Tuning Pin
SinbaQL13-Jan-06 1:40
SinbaQL13-Jan-06 1:40 
GeneralDiary of a rewrite: Prioritising efforts Pin
Chris Maunder13-Jan-05 14:46
cofounderChris Maunder13-Jan-05 14:46 
GeneralRe: Diary of a rewrite: Prioritising efforts Pin
Mike Dimmick20-Jan-05 0:16
Mike Dimmick20-Jan-05 0:16 
GeneralRe: Diary of a rewrite: Prioritising efforts Pin
Mike Dimmick2-Feb-05 3:32
Mike Dimmick2-Feb-05 3:32 
GeneralRe: Diary of a rewrite: Prioritising efforts Pin
Chris Maunder2-Feb-05 15:52
cofounderChris Maunder2-Feb-05 15:52 
GeneralWhat's been happening here? Pin
Chris Maunder20-Dec-04 23:33
cofounderChris Maunder20-Dec-04 23:33 
GeneralRe: What's been happening here? Pin
Brian Delahunty21-Dec-04 4:33
Brian Delahunty21-Dec-04 4:33 
GeneralRe: What's been happening here? Pin
Shog912-Jan-05 5:17
sitebuilderShog912-Jan-05 5:17 
GeneralDecisions, decisions Pin
Chris Maunder12-Dec-04 14:11
cofounderChris Maunder12-Dec-04 14:11 
GeneralRe: Decisions, decisions Pin
Michael P Butler12-Dec-04 21:43
Michael P Butler12-Dec-04 21:43 
GeneralVS.NET Debug issues + new features Pin
Chris Maunder11-Dec-04 18:10
cofounderChris Maunder11-Dec-04 18:10 
GeneralRe: VS.NET Debug issues + new features Pin
Paul Watson12-Dec-04 5:18
sitebuilderPaul Watson12-Dec-04 5:18 

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.