dlib C++ Library - Release notes

The Library

- Algorithms
- API Wrappers
- Compression
- Containers
- Imaging
- Metaprogramming
- Miscellaneous
- Network
- Parsing

Help/Info

- Examples
  - Base64_Encoder
  - Bayesian_Network
  - Bayesian_Network_From_Disk
  - Bayesian_Network_GUI
  - Cmd_Line_Parser
  - Compress_Stream
  - Directory_Navigation
  - GUI
  - HTTP_Server
  - Image
  - Kernel_Centroid
  - Kernel_K-Means_Clustering
  - Kernel_RLS_Filtering
  - Kernel_RLS_Regression
  - Logger
  - Logger_Advanced
  - Matrix
  - Member_Function_Pointer
  - Multithreaded_Object
  - Neural_Network
  - Pipe
  - Queue
  - Rank_Features
  - Relevance_Vector_Classification
  - Relevance_Vector_Regression
  - Sockets
  - Sockets_2
  - Sockstreambuf
  - Std_C++_Allocator
  - Support_Vector_Machine
  - Threaded_Object
  - Threads
  - Thread_Function
  - Thread_Pool
  - Timer
  - XML_Parser
- Home
- How to compile
- Index
- Introduction
- License

Current Release

- Change Log
- Release Notes
- Version: 17.12

Last Modified: Nov 10, 2008

# Release notes

# Release 17.12

Release date: Nov 10, 2008
Major Changes in this Release:

    New Stuff:
       - Added user settable styles to most of the gui widgets
       - Added the diagm(), svd2() and svd3() matrix functions
       - Added the thread_pool object

    Non-Backwards Compatible Changes:
       - Removed the arrow_button widget and moved its functionality into the
         button widget.
       - Renamed the dragable class to draggable
       - Removed the confusing and unnecessary hidden bool argument to the
         gui widget style drawing functions.
       - Changed some of the events that are about the mouse leaving a widget so
         that they still trigger even if the widget has been disabled or hidden.

    Bug fixes:
       - Added some missing mutex locks to the scroll_bar widget
       - Fixed a bug in the fill_gradient_rounded() function. It didn't always
         draw the entire rectangle.
       - Fixed a compile time bug in the pinv() function.  It didn't compile
         when used on statically sized matrices when they weren't square.

    Other:
       - The member_function_pointer object now never calls new or delete.
         So it is safe to use in a real time environment.

# Release 17.11

Release date: Oct 20, 2008
Major Changes in this Release:

    New Stuff:
       - Added the sort_columns() and rsort_columns() functions
       - Added the vector_normalizer object
       - Added the normalized_function object.
       - Added a tensor_product() function for the matrix object.

    Non-Backwards Compatible Changes:

    Bug fixes:
       - Made it so that the gui event handler thread isn't created at all
         unless some part of an application calls some of the gui_core code.
         In the previous release the event handler thread was executed
         briefly during program termination and could cause problems if no
         windowing environment was available.
       - Fixed an #include statement in the matrix utilities so that it works
         even if you don't specify an include path argument to your compiler.

    Other:

# Release 17.10

Release date: Oct 09, 2008
Major Changes in this Release:

    New Stuff:
       - Added a thread safe shared pointer object
       - Added the popup_menu_region widget.

    Non-Backwards Compatible Changes:
       - The on_wheel_up() and on_wheel_down() gui events now take an unsigned long
         argument.
       - Removed the register_program_ending_handler() function from the threading
         API and also changed the dlib thread pool so that it no longer causes
         a terminating program to wait for any outstanding threads to finish
         before allowing the application to end.
       - Changed the serialization format of the linearly_independent_subset_finder
         class.
       - Changed all the font pointers in the gui API's interfaces
         to shared_ptr_thread_safe objects.

    Bug fixes:
       - Made the kkmeans class actually use the min_change parameter.
       - Fixed a bug in the linearly_independent_subset_finder object.  Also
         added a way to set a minimum tolerance.
       - Fixed a bug in the scrollable_region widget that caused it to scroll in an
         unpleasant way when the horizontal and vertical scroll increments weren't
         set to the same value.
       - Made one of the arguments to font::draw_string() not be a reference because
         some versions of gcc don't end up doing the right thing when -O3 is
         supplied.
       - Fixed a bug in the covariance() function that prevented it from compiling
         sometimes.

    Other:
       - Changed the gui core code around so that it should be safe to make window
         objects at the global scope.
       - Added more control over how the scrollable_region scrolls its region.
         You can now adjust how much it scrolls when the mouse wheel is scrolled
         as well as enabling scrolling via a mouse drag.
       - Modified the library so that it compiles with the Intel compiler.
       - Added some example programs that use the relevance vector machine

# Release 17.9

Release date: Sep 06, 2008
Major Changes in this Release:

    New Stuff:

    Non-Backwards Compatible Changes:

    Bug fixes:
       - Fixed a bug in the tooltip widget
       - Fixed the cmake option to toggle the ENABLE_ASSERTS macro
       - Fixed some bugs in the rvm
       - Fixed the serialization code for the kkmeans object so that it actually
         works
       - Fixed a bug that can trigger when the thread_specific_data object is
         destructed
       - Fixed a bug in the directory navigation gui.  If you tried to go
         into a drive on windows that wasn't mounted you got an error.
         This is now fixed.

    Other:
       - Made the dir_nav stuff work with std::vector and dlib::std_vector_c
         as well as dlib::queue objects.
       - Generally cleaned up a bunch of things

# Release 17.8

Release date: Aug 14, 2008
Major Changes in this Release:

    New Stuff:
       - Added relevance vector machine regression and classification support.
       - Added the cross_validate_trainer_threaded() function
       - Added the length and length_squared matrix functions.

    Non-Backwards Compatible Changes:

    Bug fixes:
       - Changed gui code a little so that windows don't popup in funny
         places when used with the cygwin X windows system.

    Other:
       - Made it easier to use the scoped_ptr with the TCP connection object
       - Optimized the matrix object a little

# Release 17.7

Release date: Jul 25, 2008
Major Changes in this Release:

    New Stuff:
       - Machine Learning
          - Added the ability to compare kcentroid objects to each other
          - Added the rank_features() function
          - Added the distance_function object
          - Added the reduced_decision_function_trainer object and
            reduced() function
          - Added the reduced_decision_function_trainer2 object and
            reduced2() function
          - Added a radial basis function network trainer
          - Added the linearly_independent_subset_finder object
          - Added the sigmoid_kernel
       - Matrix Utilities
          - Added the inv_upper_triangular() and inv_upper_triangular()
            functions.

    Non-Backwards Compatible Changes:
       - Refactored a bunch of the kernel learning code into a much cleaner form.
         But this does change the interface to all the training functions.

    Bug fixes:
       - Fixed a bug in the min and max calculation in the running_stats object
       - Removed a bug in the sum() and variance() functions that
         caused them to seg fault when they were used on certain
         matrix of matrix objects.
       - Added a missing check for division by zero to the conjugate gradient
         optimization functions.
       - Added some missing member variables to the .swap and serialization
         functions for the kcentroid object.  So now they should work right.

    Other:
       - Added an option to the cmake file to toggle the DLIB_ASSERT macro
       - Added an option to the cmake file to toggle the dlib stack trace macros
       - Made the library compile in Cygwin

# Release 17.6

Release date: Jun 22, 2008
Major Changes in this Release:

    New Stuff:
       - Merged in Keita Mochizuki's unicode patches to the GUI components.  So
         the dlib GUI now has better unicode support.
       - Added the remove_row and remove_col matrix functions.  Also made all
         three of the above functions capable of taking arguments at run time
         as well as compile time.
       - Added the ability to cap the number of dictionary vectors used by the krls
         and kcentroid object at a user specified number.
       - Added the pick_initial_centers() function
       - Added the running_stats object

    Non-Backwards Compatible Changes:
       - Changed the interface to the krls and kcentroid objects somewhat.
       - All of the style objects in the GUI part of the library now use
         dlib::ustring instead of std::string.  This only matters to you if
         you have made your own style objects.
       - Changed the serialization format of the krls, kcentroid, and
         directed_graph_drawer objects.  Note that is also means that the
         files saved by previous versions of the bayes_net_gui_ex program
         won't load with the current version.

    Bug fixes:
       - Fixed an aliasing bug in the set_subm(), set_rowm(), and set_colm()
         functions.  It was possible that you could get incorrect results
         if you used these functions to copy one part of a matrix to another
         part of the same matrix if the two areas overlapped.
       - Fixed a minor numerical error in the krls code so now it gets slightly
         better results.

    Other:
       - Made the types generated by the matrix operations a lot shorter.  This
         avoids some compiler warnings from visual studio and even some potential
         internal compiler errors in some instances.

# Release 17.5

Release date: Jun 2, 2008
Major Changes in this Release:

    New Stuff:
       - Added some macros that allow dlib to create a stack trace
       - Added the wrap_function and is_function templates.
       - Added two new events to the text_field object.  One for detecting when the
         user hits enter and another for detecting when input focus is lost.
       - Machine Learning
          - Added a kernel based centroid estimator/novelty detector
          - Added a kernel based k-means clustering algorithm
       - Numerical
          - Added an identity_matrix() function that can take a runtime defined size.
          - Added a bunch of unconstrained optimization stuff to the library.
            It now has a conjugate gradient optimization algorithm as well as
            a quasi-newton algorithm.
          - Added the set_subm, set_rowm, and set_colm functions.

    Non-Backwards Compatible Changes:
       - In the krls object:  Added a requires clause to the set_tolerance() member
         function and renamed clear() to clear_dictionary().

    Bug fixes:
       - Fixed a bug in the requires clause of the subm() function.  It was
         more restrictive than it should have been.

    Other:
       - Added example programs for the krls object as well as the new
         kcentroid and kkmeans objects.

# Release 17.4

Release date: May 12, 2008
Major Changes in this Release:

    New Stuff:
       - Added an implementation of the kernel recursive least squares algorithm

    Non-Backwards Compatible Changes:
       - Broke backwards compatibility in the directed_graph_drawer's serialization
         format when I fixed the bug below.

    Bug fixes:
       - Fixed two bugs in the directed_graph_drawer widget.  First, it sometimes
         threw a dlib::fatal_error due to a race condition.  Second, the color of
         the nodes wasn't being serialized when save_graph() was called.
       - Made vector_to_matrix() work for std::vector objects that have non-default
         allocators.

    Other:
       - Added some stuff to make people get a really obvious error message
         when they set up the include path incorrectly.

# Release 17.3

Release date: Apr 28, 2008
Major Changes in this Release:

    New Stuff:
       - Added the vector_to_matrix() function.
       - Added a cholesky_decomposition() function.
       - Added the toggle_button GUI widget
          - Added a default toggle button style as well as check box and
            radio button styles.
       - Added a single click event to list_box
       - Added a save_file_box() and open_existing_file_box() function.

    Non-Backwards Compatible Changes:
       - Changed the check_box and radio_button widgets to be specializations of
         the new toggle_button object.  This is a nearly backwards compatible
         change except that the events registered to check_box and radio_button
         clicks must now take the form void event(toggle_button&) or
         void event(void) instead of the previous void event(check_box&) and
         void event(radio_button&).
       - Removed the is_mouse_over bool from the button_style::draw_button()
         function.

    Bug fixes:
       - Fixed a compiler error in mingw.
       - Changed the preprocessor checks for the wchar_t overload of
         is_built_in_scalar_type so that it works properly with visual studio.

    Other:
       - Added a Bayesian Network GUI that allows you to create a network
         and serialize it to disk.

Old Release Notes