Archive for September, 2009

GPL just means your code probably won’t be used

Thursday, September 24th, 2009

I ran into a guy recently who was well qualified for a contract I was offering and even already had code to do it. The only thing preventing me from hiring him was that his code was under the GPL. When asked if he would do a dual license, he flatly refused at any price.

I appreciate what the GPL stands for, which is that source code should be available. But as a practical matter the best code generally comes from people who are paid, and businesses able to pay for code tend to want to maximize profits on what they have done. And one possible tool to maximize profit is to not have the software open-source.

RakNet is open-source because it helps me make money. More users, fewer support costs, contributions from users, and market appeal count among the benefits of being open-source. I’m not worried about theft because the businesses capable of paying license fees have so much to lose were they to violate copyright that it doesn’t make financial sense for them to not pay.

On the other hand, if I were to make a commercial game, open source means I’d be unable to discourage piracy. People would release for free games based on my source which would compete with my own sales. While it’s relatively easy to enforce copyright against major companies, that’s not true against the entire internet.

In the game industry you’re basically forbidden from using any GPL code. From time to time this means I haven’t used code I otherwise would. It’s never been the case, nor do I expect it to be, that because I used a GPL component I was forced to release my source where I wouldn’t have otherwise. It just means I won’t use the GPL code to begin with.

How to build QWT-5.2 with Visual Studio 2005

Monday, September 7th, 2009

I posted instructions here

In case it’s deleted or lost:

1. Make sure that Qt\2009.03\bin is in your PATH environment settings. %QTDIR%\bin\ was already in my path, but didn’t work, so I also added C:\Qt\2009.03\qt\bin
2. Edit qwt-5.2/qwtconfig.pri to build both release and debug, and you probably also want it not to build a dll
3. Open Start / All Programs / Microsoft Visual Studio 2005 / Visual Studio Tools / Visual Studio 2005 Command Prompt
4. Go to qwt-5.2/qwtconfig.pri
5. Type qmake qwt.pro
6. Type nmake
7. The static libraries will be in qwt-5.2\lib . Link these into your Visual Studio project
8. Header files are in qwt-5.2\src . Add this path to your Visual Studio project
9. Copy qwt-5.2\designer\plugins\designer\qwt_designer_plugin5 .dll to Qt\2009.03\qt\plugins\designer
10. Copy qwt-5.2\designer\plugins\designer\qwt_designer_plugin5 .exp to Qt\2009.03\qt\plugins\designer
11. Copy qwt-5.2\designer\plugins\designer\qwt_designer_plugin5 .lib to Qt\2009.03\qt\plugins\designer
12. Run Qt Designer
13. Click Help / About Plugins
14. Make sure qwt_designer_plugin5.dll is listed there

Just saved $5,000

Friday, September 4th, 2009

I had a project I was sending out to potential contractors, to display a 320×200 video feed based off images from SQL. My performance requirement was 30 FPS for 4 videos, 15 FPS for 8. One company wrote:

“For $5000, we can
implement the proof of concept suggested by my senior engineers (see below)…

For example, I had two of my senior engineers review the RFP. They both zeroed in on a possible bottleneck between animating the user interface at 30fps vs. retrieval from the database. It is their recommendation that a *proof of concept* be implemented that indentified the bottleneck (if any) so that the appropriate infrastructure could be implemented to achieve your performance goals.”

Up until that point, I had only used QT for a few days, had never written OpenGL before. I’m not a graphics programmer.

I did it myself, in a day, by reading the SQL in a thread, buffering multiple rows at a time, bypassing the QT calls to skip code that doesn’t apply for single frame videos, and using glTexImage2D to generate the texture and glTexSubImage2D to update the texture.

I didn’t have to modify the QT source, or come up with new data structures, or call an expert. Just pick the low hanging fruit. For all I know it could be twice as fast again if I really knew what I was doing.

Take it as a word of warning when dealing with fat contracting firms, more used to dealing with Cisco than small businesses. These guys think nothing of asking for 2K a day, spending a week on what would take a motivated hungry programmer a few hours. Meeting after meeting, week after week, charging you for that time, just to come up with a price you’d reject out of hand.