Overview
Features
Download
Documentation
Community
Add-Ons & Services
The POCO C++ Libraries Blog

Archive

POCO Stable Release 1.4.6p2 and Development Release 1.5.2 Available

Filed under: News by guenter at 21:45

The waiting is over — we finally have the new releases out, available for download. Stable release 1.4.6p2 contains mostly bugfixes, upgrades to some bundled libraries (expat, zlib and sqlite) and a few new features (e.g. ColorConsoleChannel). As usual, the CHANGELOG has all details. Upgrading is recommended for everyone using 1.4.x releases.

Development release 1.5.2 adds the MongoDB client library, contains significant updates to the JSON library, adds all changes from 1.4.6p2 and a whole lot of other improvements and fixes. The CHANGELOG has it all. Please note that there are still a few rough edges — it’s still a development release after all. Most importantly, embedded and mobile platforms (iOS, Android, Embedded Linux, WinCE, QNX) have not been tested and (as is the case for WinCE) may not even build.

POCO 1.5.2 Release Candidate 2 Available

Filed under: Development,News by alex at 02:02

Due to a significant amount of fixes during the last week, 1.5.2 Release Candidate 2 is now tagged on GitHub.

Please report any problems back to this list or as a GitHub issue.

To allow for more testing, release projection was pushed forward a week, to June 24 2013.

POCO Team

POCO 1.5.2 Release Candidate 1 Available

Filed under: Development,News by alex at 06:26

1.5.2 Release Candidate 1 is now tagged on GitHub:

Please report any problems back to this list or as a GitHub issue.

Release is projected for June 17 2013.

POCO Team

Overload “Dynamic C++, Part I” Article

Filed under: Events,News by alex at 03:16

The first part of “Dynamic C++” article has been published in the
ACCU Overload Journal.
Overload115

“C++ Now” Presentations

Filed under: Events,News by alex at 06:10

On Thursday, May 16 2013, there will be two POCO-related presentations at the
C++ Now conference in Aspen, Colorado:





DB2HTML5



Code is in GitHub repository, stay tuned for slides and videos …

Dynamic C++ in a nutshell

Filed under: Events,News by alex at 10:23

Slides are available on SlideShare

Courtesy of Schalk Cronjé tweet – his notes on the ACCU 2013 Dynamic C++ presentation:

Dynamic C++ in a nutshell

Dynamic C++ in a nutshell

Release 1.4.6p1 Available

Filed under: News by guenter at 22:41

Stable release 1.4.6p1 contains various bugfixes and a few minor new features. See the CHANGELOG for the details.

Get the source code from the download page or directly from GitHub.

Library AutoiNEATialization

Filed under: Development,Tips & Tricks by alex at 18:00

In some of POCO libraries (Net on Windows, Data back-ends, Crypto, NetSSL …), there is a need for early library initialization. This task has been done so far in a couple of ways (neither elegant) – we either

  • (1) call initialization (repeatedly) from some strategic points in the library (Net, SSL) that we know will get hit early, or
  • (2) mandate early explicit call (un)initialization (Data back-ends) early from user code.

So, the question here is: can we (and, if the answer is yes, how?) improve the current state?

  • Problem: do tasks early at application init or shared library load, ensuring they are executed prior to any other activity depending on them.
  • Examples: Windows network initialization, DB back-end registration with front-end registry …
  • Solution: looks simple at first, then not so simple when the reality of (1) dynamic/static linkage (on Windows in particular), (2) static variable initialization timing/order and (3) dynamic library loading order (e.g. Data and back-end libraries) hits.

At first, one would think this (SQLite back-end with abbreviated names used as an example here) will do the trick:

// Connector.h:
struct SQLite_API SQLiteRegistrator
{

SQLiteRegistrator()
{
SQLite::Connector::registerConnector();
}

~SQLiteRegistrator()
{
SQLite::Connector::unregisterConnector();
}

};

extern "C" struct SQLite_API SQLiteRegistrator sqliteRegistrator;

// Connector.cpp:
SQLiteRegistrator sqliteRegistrator;

Alas, MSVC will disregard your wishes in both static and dynamic library builds when it sees that the registrator is “not used” anywhere. Luckily, there’s a way to force the linkage:

#pragma(comment (linker, "/include:_sqliteRegistrator")

With some ifdef-ing for 64-bit (no underscore decoration) and dynamic exports, it turns out that the task is achievable:

#pragma(comment (linker, "/export:sqliteRegistrator")

So, now we have a way to force initialization without having to explicitly call registerConnector from user code (or peppering library with initialization code).

Details are in GitHub repo (Net and Data back-ends only at the time of this writing).

This modification was tested on Windows, Mac and Linux, static and shared builds; I’m putting a word out to hear comments and make sure I did not miss something important, so suggestions are more than welcome. I’d like to have this in the upcoming 1.5.2.

New Applied Informatics Blog

Filed under: News by guenter at 14:18

Over at the Applied Informatics website we have a new blog. The articles posted so far have covered topics like the Internet of Things, using POCO on Windows CE and iOS and Implementing UPnP Control Points on the iPhone.

Dynamic C++ at ACCU 2013

Filed under: Events,News by alex at 05:17

On April 11 2013, at the ACCU 2013 conference in Bristol (UK), a 90 minute “Dynamic C++” tutorial  will be presented:

Data from external sources comes in diverse types and brings along the need for datatype conversion. How can a C++ programmer accurately and efficiently transfer data from relational or XML database to JSON or HTML without stumbling over the C++ type checking mechanism? The answer is by using type erasure techniques; session will enumerate, explore and compare the most popular C++ type erasure solutions.

Given the above problem as well as both historical (ANSI C union and void*, MS COM Variant, boost::[variant, any, lexical_cast]) and recent (boost::type_erasure, Facebook folly::dynamic) development trends (including pending boost::any C++ standard proposal), it is obvious that there is a need for a way around the static nature of C++ language. There is also more than one solution to this problem; session will explore the internals of boost::[variant, any, type_erasure], folly::dynamic and Poco::Dynamic. Design, capabilities as well as pros and cons of each solution will be examined. Performance benchmark comparisons will be reviewed as well.

Type safety is an important feature of C++; type erasure is a necessary technique for modern software development. Session examines and compares existing solutions to these important concerns.

Stop by if you happen to be in the area or attending the conference.

« Previous PageNext Page »