Click here to Skip to main content
15,881,856 members

CodeProject - Professional Profile



Summary

   
75,356
Author
60
Authority
2
Debator
20
Editor
109
Participant
0
Enquirer
0
Organiser
The CodeProject team have been writing software, building communities, and hosting CodeProject.com for over 20 years. We are passionate about helping developers share knowledge, learn new skills, and connect. We believe everyone can code, and every contribution, no matter how small, helps.

The CodeProject team is currently focussing on CodeProject.AI Server, a stand-alone, self-hosted server that provides AI inferencing services on any platform for any language. Learn AI by jumping in the deep end with us: codeproject.com/AI.

Groups

Below is the list of members of this group

Software Developer (Senior) CodeProject
Canada Canada
As Senior Architect, Matthew is responsible for the Architecture, Design, and Coding of the CodeProject software as well as Manager of the Infrastructure that runs the web site.

Matthew works on improving the performance and experience of the Code Project site for users, clients, and administrators.

Matthew has more years of software development, QA and architecture experience under his belt than he likes to admit. He graduated from the University of Waterloo with a B.Sc. in Electrical Engineering. He started out developing micro-processor based hardware and software including compilers and operating systems.
His current focus is on .NET web development including jQuery, Webforms, MVC, AJAX, and patterns and practices for creating better websites.
He is the author of the Munq IOC, the fastest ASP.NET focused IOC Container.
His non-programming passions include golf, pool, curling, reading and building stuff for the house.
Technical Writer CodeProject
Canada Canada
Sean Ewington is the Content Manager for CodeProject.

His background in programming is primarily C++ and HTML, but has experience in other, "unsavoury" languages.

He loves movies, and likes to say inconceivable often, even if it does not mean what he thinks it means.
Founder CodeProject
Canada Canada
I started photo-etching circuit boards when I was 8, and at 11 was haunting the halls and computer science labs at the local university so much that I was invited by Professor Wayne Ayott to audit his software and hardware design courses.

Over my career I have used C# , C++, Win32, MFC, Assembler, Basic, and Clipper, on applications for the military, commercial ventures, medical research and the labour movement. Through my medical informatics work I came to know what real-time and mission-critical really mean… just try being part of the critical path when a woman goes into labor.

I have been honoured to receive many business, industry and leadership awards including being named an Exceptional Young Entrepreneur (Profit Magazine) and to the list of Who's Who in Canadian Business. The companies I started have been recognized as the Fastest Growing companies in Canada (Profit Magazine), as the Fastest Growing North American Technology Companies (Deloitte & Touché) and named as a Top 100 Innovator and Leader by SDTimes 6 years in a row. I serve on the boards of the Ontario Center for Innovation, and Umbra a leading international home goods company.

Here's my professional profile on LinkedIn: http://www.linkedin.com/in/davidcunningham

In 2007 Microsoft acquired the technology assets, IP and development team of my company Dundas Software and rolled it into SQL Server. After the Microsoft deal we recapitalized Dundas and grew it again into Dundas Data Visualization a leading Embedded BI company which was acquired by insightsoftware in 2022.

I live in Toronto and enjoy photography, scuba, food, and motorcycle riding.
Founder CodeProject
Canada Canada
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.

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.

Privileges for a group account are based on the priviliges of the administrators of that account.

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.


 
GeneralCodeProject.AI Server API is now on .NET 7 Pin
Matthew Dennis6-Dec-22 4:19
sysadminMatthew Dennis6-Dec-22 4:19 
GeneralBlue Iris Not Detecting Motion at Night Pin
Sean Ewington28-Nov-22 5:02
staffSean Ewington28-Nov-22 5:02 
GeneralCodeProject.AI Server hits 50,000 downloads! Pin
Sean Ewington10-Nov-22 11:39
staffSean Ewington10-Nov-22 11:39 
GeneralDisabling Half Precision Processing for Older GPUs in CodeProject AI Server Pin
Matthew Dennis4-Nov-22 7:08
sysadminMatthew Dennis4-Nov-22 7:08 
GeneralCodeProject.AI Server in Docker on a Raspberry Pi 400 64bit Arm Pin
Chris Maunder31-Oct-22 14:29
cofounderChris Maunder31-Oct-22 14:29 
GeneralTrying to Speed up CodeProject.AI Server with SignalR Pin
Matthew Dennis28-Oct-22 4:45
sysadminMatthew Dennis28-Oct-22 4:45 
GeneralRe: Trying to Speed up CodeProject.AI Server with SignalR Pin
Peter Shaw1-Nov-22 2:13
professionalPeter Shaw1-Nov-22 2:13 
GeneralDocker and Arm64 Pin
Chris Maunder22-Oct-22 10:06
cofounderChris Maunder22-Oct-22 10:06 
Last week was Docker week.

Last week was meant to be, "Let's completely revamp the installer in preparation for new modules," but we're all software developers so we know how that goes.

Some back story:

CodeProject.AI Server is, well, a server. It's deployed as a standalone service, doesn't need a built-in UI, and is perfect for Docker. Especially since those who employ CodeProject.AI Server will often have other services in other Docker containers alongside.

For those new to Docker, Docker is a system that allows you to create an entire system - OS, applications, data, the lot - inside a single container. That container can then be run anywhere Docker runs, which is almost everywhere. So I build a Docker container that has Ubuntu installed as the base OS, add CodeProject.AI Server, the analysis modules, the AI models, and drivers if needed, and then I can run that Docker image on my PC, my Mac, my Raspberry Pi, or my QNAP storage device. One container, any platform.

Tip 1. It's important to note that when running Docker, performance depends on the difference between the OS and architecture in the container and the OS and architecture of the system upon which you run that container. This is called foreshadowing.

We want our CodeProject.AI system to be able to add and update modules at runtime. That's not too hard. But we need it to be fast and efficient. We also need it to work on the hardware many users will have. And we want to use the tools we know and love.

Tip 2: Tools for cross platform development will work perfectly well for most, but not all, environments. This is also foreshadowing.

The first step in improving the installer is that we need to ensure CodeProject.AI Server runs in Docker nicely. CPU only is perfect on Intel Mac, Linux and Windows. Our Nvidia GPU Docker image works on Windows and Linux perfectly (macOS doesn't support Nvidia anymore. It's a long sordid story...). M1 / M2 macOS... doesn't work.

Tip 3: When building cross-platform solutions with cross-platform aware tools and compilers you generally shouldn't need to worry about the hardware and OS architectures you're targeting. The tools should be self-aware enough to handle that for you. Yeah, foreshadowing.

So we want to
  • allow CodeProject.AI Server to be updateable at runtime
  • ...and to do this while running in a Docker container
  • ...on any platform
  • ...using the tools generally availble to developers
Which means
  • Our code should work with Visual Studio Code and VS 2022
  • ... in Linux, macOS, and Windows, both x64 and Arm64
  • ... and be able to generate Docker images that work on these platforms
  • ... and allow updates and installs to happen at runtime.
See how the goal of the week has been pushed to the bottom?

Long story short is that we hit these issues:
  1. VSCode works really well cross platform, except when it comes to Intel macOS vs Apple Silicon macOS. You have to do some workarounds

    Your tasks.json file, for instance, allows you to apply conditionals based on whether you're in Windows, Linux or OSX. But OSX is now split between Intel and Apple Silicon. No real drama, but it means you can no longer have a one-task-fits-all solution. Break it up into Intel and M1 and make sure you choose the right one each time.


  2. Docker containers built using x64 OSs don't run efficiently on the Apple Silicon Arm64 (and we assume, any Arm64 OS like Raspberry Pi OS)

    Again not a terrible hassle because there are Arm64 base Docker images for Ubuntu available. Instead of "from ubuntu:22.04" you do "from arm64v8/ubuntu:22.04" and your image will start off on the right footing.


  3. When you build for a given platform you need to include the correct libraries (eg Nuget) for your platform, and for this you need your compilers to get the correct information from their environment. For .NET this means ensuring the correct Runtime Identifier is specified in the project file.

    This killed us. Some features simply aren't available on some platforms, or available as dev builds, so you need to specify different packages based on different OSs and hardware. You also need to ensure (in .NET) your RuntimeIdentifiers are correct so the package managers will hook up the correct builds of the packages.

    What we did was include the following in each project file:
    XML
    <!-- Platform and architecture defines -->
    <PropertyGroup>
        <IsWindows Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Windows)))' == 'true'">true</IsWindows>
        <IsLinux   Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Linux)))' == 'true'">true</IsLinux>
        <IsOsx     Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::OSX)))' == 'true'">true</IsOsx>
        <IsArm64   Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::OSArchitecture)' == 'Arm64'">true</IsArm64>
    </PropertyGroup>
    <PropertyGroup>
        <RuntimeIdentifier Condition="'$(IsArm64)'!='true' And '$(IsWindows)'=='true'">win-x64</RuntimeIdentifier>
        <RuntimeIdentifier Condition="'$(IsArm64)'=='true' And '$(IsWindows)'=='true'">win-arm64</RuntimeIdentifier>
        <RuntimeIdentifier Condition="'$(IsArm64)'!='true' And '$(IsLinux)'=='true'">linux-x64</RuntimeIdentifier>
        <RuntimeIdentifier Condition="'$(IsArm64)'=='true' And '$(IsLinux)'=='true'">linux-arm64</RuntimeIdentifier>
        <RuntimeIdentifier Condition="'$(IsArm64)'!='true' And '$(IsOsx)'=='true'">osx-x64</RuntimeIdentifier>
        <RuntimeIdentifier Condition="'$(IsArm64)'=='true' And '$(IsOsx)'=='true'">osx.12-arm64</RuntimeIdentifier>
    </PropertyGroup>
    <!-- Windows vs not Windows properties -->
    <PropertyGroup>
        <TargetFramework>net6.0</TargetFramework>
        <TargetFramework Condition="'$(IsWindows)'!='true'">net6.0-windows</TargetFramework>
    </PropertyGroup>    
    
    <!-- Output the settings based on what we've determined above -->
    <Target Name="SettingsCheck" AfterTargets="BeforeBuild">
        <Message Importance="High" Text="TargetFramework:   $(TargetFramework)" />
    </Target>
    `

    This gives us the platform (Windows, Linux or OSX, and the hardware (Arm64 or x64).

    For the Microsoft.ML.OnnxRuntime package we know that it's compatible everywhere using the basic Microsoft.ML.OnnxRuntime. For general GPU support on Windows, use Microsoft.ML.OnnxRuntime.DirectML, and for CUDA GPU support (Windows and Linux) use Microsoft.ML.OnnxRuntime.Gpu. For Docker we're running Linux, x64, except for M1 chips where we use Linux, Arm64.

    So to handle running our code natively as well as handling Docker builds, we get
    XML
    <PackageReference Include="Microsoft.ML.OnnxRuntime.DirectML" Version="1.12.1" Condition="'$(IsWindows)'=='true'" />
    <PackageReference Include="Microsoft.ML.OnnxRuntime.Gpu"      Version="1.12.1" Condition="'$(IsLinux)'=='true' And '$(IsArm64)'!='true'" />
    <PackageReference Include="Microsoft.ML.OnnxRuntime"          Version="1.12.1" Condition="'$(IsLinux)'=='true' And '$(IsArm64)'=='true'" />
    <PackageReference Include="Microsoft.ML.OnnxRuntime"          Version="1.12.1" Condition="'$(IsOsx)'=='true'" />
We're not quite there yet for the M1 Docker image, but we're close. Once we have that done we can get back to starting our goal from 9AM last Monday morning.
cheers
Chris Maunder


modified 23-Oct-22 9:26am.

GeneralCodeProject.AI Server integration in Blue Iris is even better! Pin
Sean Ewington19-Oct-22 11:45
staffSean Ewington19-Oct-22 11:45 
GeneralApple Silicon and AI Pin
Chris Maunder21-Sep-22 8:01
cofounderChris Maunder21-Sep-22 8:01 
GeneralPython virtual environments Pin
Chris Maunder4-Jul-22 6:49
cofounderChris Maunder4-Jul-22 6:49 
NewsCodeProject's AI server now has custom models Pin
Chris Maunder18-Jun-22 8:39
cofounderChris Maunder18-Jun-22 8:39 
NewsSenseAI Integrations Pin
Chris Maunder15-Jun-22 10:20
cofounderChris Maunder15-Jun-22 10:20 
GeneralsenseAI on macOS and Windows Pin
Chris Maunder8-Jun-22 16:35
cofounderChris Maunder8-Jun-22 16:35 
GeneralWhen's a good time to release? Pin
Chris Maunder6-Jun-22 11:12
cofounderChris Maunder6-Jun-22 11:12 
GeneralInstallers and VS 2022 Pin
Chris Maunder25-Feb-22 10:41
cofounderChris Maunder25-Feb-22 10:41 
GeneralInstallers, again, and providing your users with choice. Pin
Chris Maunder14-Feb-22 7:49
cofounderChris Maunder14-Feb-22 7:49 
GeneralInstallers Pin
Chris Maunder8-Feb-22 7:00
cofounderChris Maunder8-Feb-22 7:00 
GeneralCodeProject SenseAI Pin
Chris Maunder25-Jan-22 7:10
cofounderChris Maunder25-Jan-22 7:10 
NewsThe CodeProject MVPs of 2022 Pin
Chris Maunder7-Jan-22 16:21
cofounderChris Maunder7-Jan-22 16:21 
NewsAnnouncing: The CodeProject Python3 Reference Pin
Chris Maunder10-Nov-21 11:06
cofounderChris Maunder10-Nov-21 11:06 
GeneralWhy is AI so hard? Pin
Matthew Dennis21-Oct-21 8:34
sysadminMatthew Dennis21-Oct-21 8:34 
GeneralPython, Python everywhere Pin
Chris Maunder20-Oct-21 12:13
cofounderChris Maunder20-Oct-21 12:13 
GeneralWindows 8 Developer Preview: A First Perspective Pin
Terrence Dorsey14-Sep-11 7:17
sitebuilderTerrence Dorsey14-Sep-11 7:17 
GeneralBUILD 2011 day 1 notes Pin
Terrence Dorsey13-Sep-11 13:49
sitebuilderTerrence Dorsey13-Sep-11 13:49 

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.