Skip to main content

Posts

C++ Development Environment

Trolling through some forums today, I found some great resources for C++, so I expanded on it and inserted some annotations. Categories are Integrated Development Environment (IDE), UML Interface, Team Collaboration, Coding Standards, Bug Tracking, Version Control, Unit Test Library, and Performance Testing. A bracket sits next to the resource which contains a W for Windows support, L for Linux, and M for Mac. A $ indicates that a standard version of the software will require a purchased license. IDE: Eclipse CDT ( eclipse.org ) [WLM] Visual SlickEdit ( slickedit.com ) [WLM$] UML: Eclipse MDT ( eclipse.org ) [WLM] Team Collaboration: Skype [WLM] Zoho [WLM] Sharepoint [W$] SourceForge [WLM] Coding Standards (Platform Agnostic): The Lockheed Martin Joint Strike Fighter C++ coding standards ( att.com ) The MISRA C++ coding standards [$] ( misra-cpp.org ) Bug Tracking: Bugzilla ( bugzilla.org ) [WLM] Unfuddle ( unfuddle.com ) [WLM] Version Control: mercurial subversion mercurial git cvs ...

The C++ Standard Library: First 8 Sections

"At some point you have to stop introducing features and focus on the details. Otherwise, you never finish the work." - Nicolai Josuttis Key points throughout these sections: - The C++ standard template library containers were designed with value semantics in mind. It is also not possible to store auto_ptrs in the containers due to the effect of the assignment operator. For reference semantics, the Boost pointer array should come in handy. - The STL was also designed for performance rather than safety. There are some containers that throw exceptions, but not many. The burden of safety falls on the code that uses the STL. - There are sequential containers and associative containers. Which container to use depends on the behavior of the software because containers behavior differently. - Associative containers are represented internally by binary (Red-Black) trees. - Container traversal must be done through iterators. Iterators have their own hierarchy of traits: i...

Effective C++, Third Edition

"...much as in real life, friends are often more trouble than they're worth." - Scott Meyers The C++ type definition that declares an external function of a class as one that can access private or protected data members also defines an individual in which one confides. But are programming books less trouble than friends? I'd like to think so. This book opened my eyes to angles of C++ that I had not considered in the past. In a summarized list, here were the parts I found most useful: RAII (Resource Acquisition Is Initialization), defined in Item 13, states that it is easier to allocate resources simply by allowing their critical work to occur in the constructor/destructor rather than their functions. The example is the Mutex class, which is defined at the top of critical section functions, and that's it. It's easier than a call to it's lock() function and will clean itself up when the function completes. Smart pointers, like std::auto_ptr or tr1::sha...

Robots!

I finally managed to get my Google Wave Robot up: http://rabidrunner.appspot.com Of course, this is just the hello world example written in Python. I am trying to come up with less trivial examples, but first I want to use this application to try out a database access, a file upload, a headline capture (RSS reader), and some other nifty little tricks that will prove to be useful. Google Wave still looks like it has a way to go. Using the sandbox build, it still is a bit slow, but that may be due to the massive amount of posting and replying that is going on. I kind of wish there was an easier way to filter out certain waves instead of loading the most recent. I'm also anxiously looking forward to these items once the real build comes out: - Google Wave server - Robots from places other than AppEngine - Integration with other databases besides GQL - Security features

Effective C++ - First 5 Items

In my copious free time, I am tackling "Effective C++, Third Edition" by Scott Meyers. The book is organized into 55 items which detail ways in which C++ code can be more effectively written. Through the first five items, there are two glaring deficiencies I've noticed with my own code: lack of use of const, and functions returning references to objects. This is one of those books that is starting to look like a fantastic collection of years of C++ and object-oriented experiences from many different engineers and reviewers, all mashed into one book. Could this book be a keeper? Also on deck: "Effective Java, Second Edition" by Joshua Bloch.

Google App Engine

I have become quite interested in how this whole cloud computing thing is going, so I'm giving Google App Engine a shot. I guess the major support right now is in Python, with Java support now coming online. Of interest is how App Engine can provide all the same functions as Java EE without the need of hosting and with the ability to swap out components where needed. Ultimately, what will probably happen is that development could be restricted to what is provided on the App Engine server; for example, App Engine's database, certificates, and API's. Another reason to use App Engine is that currently Google Wave can only communicate to robots created from App Engine. I'm sure that any Wave protocol implementation can act as a robot, but it would require detailed development to the standards. Of course, none of this can be tested until I get my sandbox account!

Best SVN Linux GUI?

I've been searching for a good SVN front end for Linux to replace the command line check in. I want the capability to choose a subset of modified files from which to commit, rather than having to check in the entire directory structure each time by doing a "svn commit .". This feature comes standard with Tortoise, but Tortoise is Windows-only. I first tried out RapidSVN. This is a GTK front end that stores bookmarks on working directories. However, it did not have what I wanted. I also tried eSVN. This is a front end built on qt. Initially, I tried "File -> Open Working Directory..." and this hung. I ran the esvn binary from the directory containing my svn checkout and I was finally able to select a working directory. The GUI also allowed a selectable subset of files! I understand there is a subversion plugin for Eclipse. I will give this a try on my Ubuntu box. All of these attempts were made on a RHEL 5.0 machine.