The POCO C++ Libraries Blog

POCO Usage Survey – Results

Filed under: Development by guenter at 22:01

After having it open for 20 days, I have closed our POCO Usage survey today. We’ve collected 53 responses in total which is not really that much but at least something to work with. So, without further ado, here are the results:

Question 1: Which POCO libraries are you currently using in your project?

We clearly see Foundation, Net and Util being the most popular libraries.

survey1_chart

survey1_table

Question 2: Which POCO version are you using?

Release 1.6.0 dominates with over 50 %, followed by 1.4.7 and 1.6.0.

survey2_chart

survey2_table

Question 3: What platforms are you using POCO on?

Linux (79 %) narrowly beats Windows (~70 %), followed by OS X. We also have Android, iOS and Embedded Linux.

survey3_chart

survey3_table

Question 4: Which compilers are you using with POCO?

The POCO user community prefers current compiler versions. On Windows, Visual Studio 2013 dominates followed by Visual Studio 2015. Interestingly, Visual Studio 2010 is used by twice as many as Visual Studio 2012. Regarding GCC, 4.9 and 4.8 are top, as well as Clang/LLVM 3.6.

survey4_chart

survey4_table

Question 5: How do you like POCO?

We get a good 1.4 average. Most users find POCO great, one finds it sucks…

survey5_table

Question 6: Please tell us in what kind of project you are using POCO

Here we see everything from games, cross-platform desktop software, big data to different kinds of devices.

Question 7: What feature(s) would you like to see in POCO?

Unsurprisingly, top requests are for better C++11/C++14 support and asynchronous programming (go Alex!). Some people also would like to see better documentation.

Conclusions

For me, there weren’t really any surprises in the answers. It shows that we’re on a good path.
With upcoming release 1.7, we’re starting to move towards full C++11 and C++14 support. Given that most POCO users are on recent compiler versions, I also think we can specify minimum supported compiler versions for 1.7 to Visual Studio 2013, GCC 4.8 and Clang/LLVM 3.6, which will make our way towards C++11/14 much easier. Support for asynchronous programming has been on our roadmap for quite some time now, and if time and resources permit, we may have something coming this fall.

POCO Usage Survey – Please Help

Filed under: Development by guenter at 19:52

I’ve created a short survey on SurveyMonkey
to get some insights how POCO is being used. Please take it – should not take more than three minutes. Your input will help us make future POCO releases better. Thank you!

Release 1.6.1 is available

Filed under: News by guenter at 16:12

Release 1.6.1 of the POCO C++ Libraries is available. This is a maintenance release and contains fixes for issues found in 1.6.0. We’ve also added support for Visual Studio 2015. Please refer to the CHANGELOG for the details.

POCO on CppCast

Filed under: Events,News,Videos and Screencasts by alex at 01:38

POCO was featured in the Episode 18 on CppCast.

Trip Report: Sierra Wireless Innovation Summit and NDC Oslo

Filed under: Events by guenter at 11:49

I spent the last week traveling, first to Paris, to attend the Sierra Wireless Innovation Summit, then to Oslo for NDC.
At the Innovation Summit in Paris, Sierra Wireless introduced a new open hardware project called Project mangOH. This is basically a base board for Sierra Wireless (and also other manufacturer’s) embedded modules, based on CF3 connectors. However, what makes this board different from other boards is that it has three so-called IoT connectors, which allow you to easily add new capabilities to the board, e.g. I/O modules, ZigBee, Bluetooth, etc. Furthermore, the board has an integrated Arduino Leonardo including support for Arduino shields, which should make it very popular in the Maker scene. Very cool.

Paris

I was showing macchina.io running on the mangOH with the new WP8548 module running Yocto Linux.

macchina.io at Innovation Summit

After the Innovation Summit I traveled to Norway, where I gave a talk at NDC Oslo. This year, NDC Oslo, which is historically focused on Microsoft technologies, included an IoT and C++ track, so this was a good opportunity to talk about macchina.io. Of the 20-30 people in my talk only two had heard about the POCO C++ Libraries, so we definitely have to do much more in terms of getting known in the C++ community. POCO is still seems to be the best kept secret in the C++ world.

Oslo

NDC is a great conference. From a speaker’s point of view: they have full HD projectors (or screens), and speakers have their own monitor showing what’s being displayed on the big screen(s) behind. Great for doing demos, as I don’t have to switch my MacBook to mirror mode and back when I switch from the presentation to the demo. Another cool feature they have is the “overflow area” where they display simultaneous live video streams from all nine parallel tracks. Audio is provided via wireless headphones that can be switched to the track you want to listen to. Also, they cover speaker’s travel costs (flight and hotel), which is very cool.

Two of the more popular issues at the conference were security (great keynote by Bruce Schneier) and functional programming. Functional programming seems to be the hot new answer to all software development issues that have been plaguing us for the last 50 years or so. As someone who’s been doing this for 20+ years, I’m a bit sceptical… we’ll see what how new paradigm will come along in 10 years or so. I mean, functional programming certainly has its advantages, but I see it as just another tool in my toolbox.

After NDC I had some time to enjoy Oslo, which is a fantastic city.

Meet me at NDC Oslo

Filed under: Events by guenter at 18:51

I’ll be giving a talk at this year’s NDC Oslo on Thursday, June 18. My talk is titled “Building IoT Device Applications in JavaScript and C++” and I’ll speak about my experience in building macchina.io, combining POCO with the V8 JavaScript engine and a couple of other really cool C++ frameworks. I’ll be at the conference Thursday to Friday and leave Oslo on Saturday, so if anyone wants to meet in or out of the conference, you are welcome!

Meet me at Sierra Wireless Innovation Summit, June 17, in Paris

Filed under: Events,News by guenter at 18:38

I’ll be at the Sierra Wireless Innovation Summit, a full-day IoT Innovation conference in Paris on June 17. Meet me there to see a demo of macchina.io, my new really cool POCO-based platform for building IoT gateways and devices.

The event features technical and business tracks, plenty of real-life use cases, an exciting showroom with 15+ live IoT demos, and of course ample networking opportunities. Register now to join me there!

POCO C++ Libraries in biicode

Filed under: Development,News by guenter at 15:58

biicode-logo.29235e86

The POCO C++ Libraries are now available via biicode, in the following versions:

The following post has been contributed by Fran Ramírez from the biicode team. You can also find the original post on the biicode blog.

Benefits

biicode is a file based dependency manager, which has many advantages:

  • Save time reusing from any POCO library (Foundation, Net, NetSSL_OpenSSL, etc.) such times as you need and avoid to configure and build out the libraries first. biicode’ll only retrieve the necessary files to build your project.
  • POCO depends on external libraries like zlib, PCRE (Perl Compatible Regular Expressions), HPDF, 7-Zip, OpenSSL and SQLite that they’re uploaded on biicode and maintained by our users.
  • It’s been tested on biicode in Windows with Visual Studio 10 and Visual Studio 12, Linux with GCC and Apple with CLang.

I recommend you to use Visual Studio to configure your project because with MinGW you could get some errors.

POCO External Dependencies

These libraries have many external and third party dependencies to build some of them, e.g., Foundation depends on PCRE and ZLib. Without biicode PCRE and ZLib source files must be present in POCO project, but with biicode it’s not needed. The following table shows all the dependencies for every version uploaded which biicode’ll find if you use all the modules in a project:

So, you’ll not have to worry about to install or build them, biicode does all the effort for you 😉 . These are the depending blocks in biicode:

  • PCRE(v8.36): fenix/pcre
  • PCRE(v7.8): fenix/pcre(v7.8)
  • HPDF: fenix/hpdf
  • zlib: zlib/zlib
  • 7-Zip: fenix/7z
  • OpenSSL: lasote/openSSL(v1.0.2)
  • SQLite: fenix/sqlite

Using POCO C++ Libraries In Your Project

1. Create a new project and an empty block:

$ bii init poco_sample
$ cd poco_sample
$ bii new myuser/myblock

2. Add your sample code (orignal code from Net/samples/dict.cpp) into ./blocks/myuser/myblock/sample.cpp:

// dict.cpp
//
// $Id: //poco/1.4/Net/samples/dict/src/dict.cpp#1 $
//
// This sample demonstrates the StreamSocket and SocketStream classes.
//
// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH.
// and Contributors.
//
// SPDX-License-Identifier:	BSL-1.0
 
#include "fenix/poco/Net/include/Poco/Net/StreamSocket.h"
#include "fenix/poco/Net/include/Poco/Net/SocketStream.h"
#include "fenix/poco/Net/include/Poco/Net/SocketAddress.h"
#include "fenix/poco/Foundation/include/Poco/StreamCopier.h"
#include "fenix/poco/Foundation/include/Poco/Path.h"
#include "fenix/poco/Foundation/include/Poco/Exception.h"
#include 
 
using Poco::Net::StreamSocket;
using Poco::Net::SocketStream;
using Poco::Net::SocketAddress;
using Poco::StreamCopier;
using Poco::Path;
using Poco::Exception;
 
int main(int argc, char** argv)
{
      const std::string HOST("dict.org");
      const unsigned short PORT = 2628;
 
      if (argc != 2)
      {
            Path p(argv[0]);
            std::cout << "usage: " << p.getBaseName() << " " << std::endl;
            std::cout << "       looks up  in dict.org and prints the results" << std::endl;
            return 1;
      }
      std::string term(argv[1]);
 
      try
      {
            SocketAddress sa(HOST, PORT);
            StreamSocket sock(sa);
            SocketStream str(sock);
 
            str << "DEFINE ! " << term << "\r\n" << std::flush;
            str << "QUIT\r\n" << std::flush;
 
            sock.shutdownSend();
            StreamCopier::copyStream(str, std::cout);
      }
      catch (Exception& exc)
      {
            std::cerr << exc.displayText() << std::endl;
            return 1;
      }
      return 0;
}

3. Choose which uploaded POCO version you want to depend on, configure it through your ./blocks/myuser/myblock/biicode.conf file. Create it and copy the following:

[requirements]
   fenix/poco(v1.6.0): 0

4. Finally, you’d only have to retrieve your POCO dependencies and build your sample.cpp. For it, use this command:

bii cpp:build

Note: for Windows users, to configure your project with Visual Studio, e.g., 10 version, execute:

$ bii cpp:configure -G "Visual Studio 10"
$ bii cpp:build

So, biicode’ll download all the dependencies from release version 1.6.0 and compile the project. Now, you can run the binary created in your ./bin/ folder.

Use The Original #include's

Change all the includes from the previous sample.cpp code to:

...
#include "Poco/Net/StreamSocket.h"
#include "Poco/Net/SocketStream.h"
#include "Poco/Net/SocketAddress.h"
#include "Poco/StreamCopier.h"
#include "Poco/Path.h"
#include "Poco/Exception.h"
...

Now, tell biicode how to find this dependencies, so, modify again the biicode.conf and add the following:

[includes]
    Poco/Net/*.h: fenix/poco/Net/include
    Poco/*.h: fenix/poco/Foundation/include

Warning: take care with Poco/*.h: fenix/poco/Foundation/include because it should always be at the end of [includes] section for being a really wide search pattern.

Finally, clean the metadata and build again the project:

$ bii clean
$ bii cpp:build

Creating A Project With NetSSL_OpenSSL or NetSSL_Win

Making a project using these libraries is a special use case of original includes. Why? Take a look at the following example:

#include "Poco/URIStreamOpener.h"
#include "Poco/StreamCopier.h"
#include "Poco/Path.h"
#include "Poco/URI.h"
#include "Poco/SharedPtr.h"
#include "Poco/Exception.h"
 
/* headers in Net library */
#include "Poco/Net/HTTPStreamFactory.h" 
#include "Poco/Net/FTPStreamFactory.h"
 
/* headers in NetSSL_OpenSSL and NetSSL_Win libraries */
#include "Poco/Net/HTTPSStreamFactory.h" 
#include "Poco/Net/SSLManager.h" 
#include "Poco/Net/KeyConsoleHandler.h" 
#include "Poco/Net/ConsoleCertificateHandler.h"
 
#include 
#include 
 
/* Main code */

Like you see, NetSSL_OpenSSL and NetSSL_Win have the same relative inlcude headers, so, the only way to resolve successfully your dependencies is writing the full path for them.

#include "Poco/URIStreamOpener.h"
#include "Poco/StreamCopier.h"
#include "Poco/Path.h"
#include "Poco/URI.h"
#include "Poco/SharedPtr.h"
#include "Poco/Exception.h"
 
/* headers in Net library */
#include "Poco/Net/HTTPStreamFactory.h" 
#include "Poco/Net/FTPStreamFactory.h"
 
/* headers in NetSSL_OpenSSL library */
#include "fenix/poco/NetSSL_OpenSSL/include/Poco/Net/HTTPSStreamFactory.h" 
#include "fenix/poco/NetSSL_OpenSSL/include/Poco/Net/SSLManager.h" 
#include "fenix/poco/NetSSL_OpenSSL/include/Poco/Net/KeyConsoleHandler.h" 
#include "fenix/poco/NetSSL_OpenSSL/include/Poco/Net/ConsoleCertificateHandler.h"
 
#include 
#include 
 
/* Main code */

The biicode.conf would be like the previous one.

Build All POCO Samples

Try to build all the available samples Poco brings us with each release. Create a project, open any examples/poco block and build it, e.g., examples from 1.4.7p1 version:

$ bii init samples_1_4_7p1
$ bii open "examples/poco(v1.4.7p1)"
$ bii cpp:build

So, that’s all! POCO C++ Libraries are amazing and I strongly recommend you to start using them for your network projects.

I hope you enjoy with this post and don’t forget check our complete C++ documentation! If you’ve any doubt, contact us through our forum or ask directly in Stackoverflow.

10 Years of POCO

Filed under: Events by guenter at 11:16

Today is the 10th anniversary of the first public release of POCO on SourceForge.
Here’s my first entry from the CHANGELOG:

Release 0.91.1 (2005-02-21)
===========================

This is the first public release of the C++ Portable Components.
The release does not contain all features planned for the later 1.0 release
(the NET library is missing, for example), but is already quite usable.
Please refer to the README file for more information and instructions for
building the libraries.

We’ve come quite far in this 10 years. From the first contributions by Alex a few weeks after the first release (I received his first email on March 24), to the 1.0 release in January 2006, to the move to GitHub in November 2012, which tremendously helped POCO’s popularity and also brought many new contributors.

Today, POCO is used in countless projects, ranging from desktop applications, iOS and Android apps, enterprise applications and embedded devices. Although there’s still some work to do in becoming known to an even wider audience (apparently, there are still C++ developers out there who haven’t heard of POCO), I’m quite happy how everything has turned out.

A big Thank You to everyone who has contributed to POCO, via code, donations or bug reports.
Here’s to the next 10 years!

Embedded World 2015

Filed under: Events,News by guenter at 08:44

Günter Obiltschnig will be at Embedded World February 24 to 25. We don’t have a booth, but Günter would be happy to meet for lunch, coffee or a drink. Please get in touch if you’d like to schedule a meeting.

Next Page »