<!--toc--> | 
	
	
	
		 | 
	
	
	
		## Milestone Marks | 
	
	
	
		 | 
	
	
	
		Each task is marked with milestones: | 
	
	
	
		 | 
	
	
	
		- Mb - first beta version milestone. Task should be complete before first Beta release. | 
	
	
	
		- Mrc - first release candidate. Task should be complete before first release candidate. | 
	
	
	
		- Ms - first stable release. Task should be complete | 
	
	
	
		before first stable release (including ABI stable) | 
	
	
	
		- Mn - next stable release. | 
	
	
	
		 | 
	
	
	
		 | 
	
	
	
		Rationale: | 
	
	
	
		 | 
	
	
	
		- Task that require **changes** in public API should | 
	
	
	
		be completed before RC1 | 
	
	
	
		- Task that does not require changes in API at all may be done till stable or next release, depending on importance. | 
	
	
	
		- Task that extend API should be done either for RC1 so users can review changes or in next release so there would be time for beta testing between versions. | 
	
	
	
		 | 
	
	
	
		## Booster Tasks. | 
	
	
	
		 | 
	
	
	
		### AIO Tasks  | 
	
	
	
		 | 
	
	
	
		#### Implementing UDP Support for `booster::aio::socket` - Mn. | 
	
	
	
		 | 
	
	
	
		Booster.Aio socket supports well stream sockets but | 
	
	
	
		has very poor (if any) support of data-gram sockets. | 
	
	
	
		 | 
	
	
	
		You can open them, use them but there is no such operations | 
	
	
	
		like `sendto` or `recvfrom` that are data-gram oriented. | 
	
	
	
		 | 
	
	
	
		Add their implementation to Booster in analogy to  | 
	
	
	
		implementations of async/sync read/write operations. | 
	
	
	
		# CppCMS 0.999.1 - rc1 | 
	
	
	
		 | 
	
	
	
		#### Rewrite socket to better class design - Mrc. | 
	
	
	
		## Rewrite socket to better class design | 
	
	
	
		 | 
	
	
	
		At this point, socket does everything, accept, connects, | 
	
	
	
		read, writes, works with pipes and anything else. | 
	
	
	
		 | 
	
	
	
		Better class hierarchy needed, something like. | 
	
	
	
		 | 
	
	
	
		- `base_async_io_device` | 
	
	
	
		 | 
	
	
	
		    - `acceptor` | 
	
	
	
		    - `base_socket` | 
	
	
	
		     | 
	
	
	
		         - `stream_socket` | 
	
	
	
		         - `datagram_socket` | 
	
	
	
		    - `pipe` | 
	
	
	
		 | 
	
	
	
		It is good to fix this before first stable version. | 
	
	
	
		 | 
	
	
	
		#### Review Of Event Loop - Mrc | 
	
	
	
		 | 
	
	
	
		Do a code review by somebody who is not Artyom for the | 
	
	
	
		Booster.Aio Event Loop. | 
	
	
	
		 | 
	
	
	
		### System - Mrc | 
	
	
	
		## Booster.System | 
	
	
	
		 | 
	
	
	
		Booster.System misses `error_condition` class. | 
	
	
	
		 | 
	
	
	
		Fix `booster::system` to behave according to C++0x, or | 
	
	
	
		just copy the code from Boost. | 
	
	
	
		 | 
	
	
	
		### Filesystem - Mn | 
	
	
	
		 | 
	
	
	
		Implement Directory Iterator. | 
	
	
	
		 | 
	
	
	
		### General tasks - Mn. | 
	
	
	
		 | 
	
	
	
		- Extract/Reimplement `boost::bind` in Booster. | 
	
	
	
		- Extract/Reimplement `boost::iostreams` in Booster | 
	
	
	
		  and replace `cppcms_boost`'s zlib filter with Booster's one. | 
	
	
	
		- Extract/Reimplement `boost::unordered` in Booster. | 
	
	
	
		## Do changes required in Review Of Event Loop  | 
	
	
	
		 | 
	
	
	
		Implement code review results by Maxim in the code. | 
	
	
	
		 | 
	
	
	
		## CppCMS Core Tasks. | 
	
	
	
		 | 
	
	
	
		### Implement Pre-Upload file validation - Mrc. | 
	
	
	
		## Implement Pre-Upload file validation - Mrc. | 
	
	
	
		 | 
	
	
	
		In CppCMS application is created only once the request | 
	
	
	
		is fully ready. And after that use can validate | 
	
	
	
		the uploaded files. | 
	
	
	
		 | 
	
	
	
		This is quite bad in case of big ones. | 
	
	
	
		 | 
	
	
	
		Possible solution is store the validation requirements | 
	
	
	
		in the session and let `cppcms::impl::cgi_api`  | 
	
	
	
		fetch this session data and use rules to validate | 
	
	
	
		uploaded files. | 
	
	
	
		 | 
	
	
	
		Problems: | 
	
	
	
		 | 
	
	
	
		- Session fetch may be not so cheap, it may be done over network or require DB access. | 
	
	
	
		- Session API allows only synchronous requests. | 
	
	
	
		- File uploading is done in even loop where all operations | 
	
	
	
		  should be non-blocking. | 
	
	
	
		 | 
	
	
	
		Possible solutions: | 
	
	
	
		 | 
	
	
	
		- Store this data in signed cookies. | 
	
	
	
		- Add asynchronous api to sessions. | 
	
	
	
		- Send session fetch to thread pool till and get | 
	
	
	
		session data this way. | 
	
	
	
		 | 
	
	
	
		### Implement Connection Forwarding over unix-sockets - Mrc or Mn. | 
	
	
	
		## Implement Connection Forwarding over unix-sockets | 
	
	
	
		 | 
	
	
	
		CppCMS forwarding framework allows to forward any connection | 
	
	
	
		to other network node over SCGI API. | 
	
	
	
		 | 
	
	
	
		Is is very useful to be able to forward connections | 
	
	
	
		between forked processes of same application. | 
	
	
	
		 | 
	
	
	
		It can be done in much cheaper between forked processes | 
	
	
	
		by forwarding a file descriptor over Unix domain socket and | 
	
	
	
		passing already read information via shared memory. | 
	
	
	
		 | 
	
	
	
		 | 
	
	
	
		### Reintegrate Distributed session backend - Mrc. | 
	
	
	
		## Reintegrate Distributed session backend | 
	
	
	
		 | 
	
	
	
		Distributed session backed was temporary-removed  | 
	
	
	
		from the code during refactoring and still hadn't get | 
	
	
	
		back. | 
	
	
	
		 | 
	
	
	
		So need to revert/rewrite the code in similar way it | 
	
	
	
		is done with TCP Cache backend. | 
	
	
	
		 | 
	
	
	
		### Improve Unit-Test coverage - Ms | 
	
	
	
		 | 
	
	
	
		- Sesssion API | 
	
	
	
		- Cache API | 
	
	
	
		- Templates System | 
	
	
	
		 | 
	
	
	
		## Documentation tasks | 
	
	
	
		 | 
	
	
	
		### Booster Reference Documentation - Mrc | 
	
	
	
		## Booster Reference Documentation | 
	
	
	
		 | 
	
	
	
		Write Missing documentation for Booster classes using | 
	
	
	
		Doxygen - especially for ones that have no Boost | 
	
	
	
		equivalents.  | 
	
	
	
		 | 
	
	
	
		### Write Examples - Ms. | 
	
	
	
		 | 
	
	
	
		 | 
	
	
	
		# CppCMS 1.0.0 - Stable Release | 
	
	
	
		 | 
	
	
	
		Tasks that does not require changes in API at all but should  be done till stable release. | 
	
	
	
		 | 
	
	
	
		## Improve Unit-Test coverage | 
	
	
	
		 | 
	
	
	
		- Sesssion API | 
	
	
	
		- Cache API | 
	
	
	
		- Templates System | 
	
	
	
		 | 
	
	
	
		## Write Examples | 
	
	
	
		 | 
	
	
	
		- AJAX using JSON-RPC | 
	
	
	
		- AJAX using Asynchronos JSON-RPC | 
	
	
	
		- Comet Programming | 
	
	
	
		- File Uploading + validation | 
	
	
	
		- Good caching examples. | 
	
	
	
		 | 
	
	
	
		 | 
	
	
	
		## Non-Critical CppCMS tasks | 
	
	
	
		# CppCMS 1.1.0 - Next Release | 
	
	
	
		 | 
	
	
	
		### Implement Locale sensitive Date-Time Form Widgets - Ms | 
	
	
	
		## Implementing UDP Support for `booster::aio::socket` | 
	
	
	
		 | 
	
	
	
		Booster.Aio socket supports well stream sockets but | 
	
	
	
		has very poor (if any) support of data-gram sockets. | 
	
	
	
		 | 
	
	
	
		You can open them, use them but there is no such operations | 
	
	
	
		like `sendto` or `recvfrom` that are data-gram oriented. | 
	
	
	
		 | 
	
	
	
		Add their implementation to Booster in analogy to  | 
	
	
	
		implementations of async/sync read/write operations. | 
	
	
	
		 | 
	
	
	
		 | 
	
	
	
		## Booster.Filesystem | 
	
	
	
		 | 
	
	
	
		Implement Directory Iterator. | 
	
	
	
		 | 
	
	
	
		## Boost to Booster tasks | 
	
	
	
		 | 
	
	
	
		- Extract/Reimplement `boost::bind` in Booster. | 
	
	
	
		- Extract/Reimplement `boost::iostreams` in Booster | 
	
	
	
		  and replace `cppcms_boost`'s zlib filter with Booster's one. | 
	
	
	
		- Extract/Reimplement `boost::unordered` in Booster. | 
	
	
	
		 | 
	
	
	
		 | 
	
	
	
		## Implement Locale sensitive Date-Time Form Widgets | 
	
	
	
		 | 
	
	
	
		ICU provides good features for parsing and formatting | 
	
	
	
		dates and times, implement Date-Time Widget | 
	
	
	
		for this purpose. | 
	
	
	
		 | 
	
	
	
		It is not so-straightforward as user should know the | 
	
	
	
		format he/she enters the data, such information | 
	
	
	
		is not supplied by any existing widgets. | 
	
	
	
		 | 
	
	
	
		Think what to do in case of no-icu builds. | 
	
	
	
		 | 
	
	
	
		### Rewrite Cache's index to use has instead of tree - Mn | 
	
	
	
		## Rewrite Cache's index to use has instead of tree | 
	
	
	
		 | 
	
	
	
		Cache backed uses `map` and may use `unordered_map`. | 
	
	
	
		 | 
	
	
	
		But it is not so simple: | 
	
	
	
		 | 
	
	
	
		- `unordered_map`, unlike `std::map` may invalidate iterators so direct replacement would not work. | 
	
	
	
		- timeout index probably should be removed as well as | 
	
	
	
		it requires O(log n) access. | 
	
	
	
		 | 
	
	
	
		And will it bring real performance benefit at all? | 
	
	
	
		 | 
	
	
	
		 | 
	
	
	
		## New CppCMS Features | 
	
	
	
		 | 
	
	
	
		### Implement Active Cache invalidation - Mn | 
	
	
	
		## Implement Active Cache invalidation | 
	
	
	
		 | 
	
	
	
		Distributed Cache system implements L1/L2 cache | 
	
	
	
		allowing a cache client to check if the data is | 
	
	
	
		has is still up-to-date without reading it back. | 
	
	
	
		 | 
	
	
	
		However each access to cache still require TCP-ping-pong. | 
	
	
	
		 | 
	
	
	
		So instead active cache invalidation may be done: when | 
	
	
	
		trigger is risen or new data is stored a sort of | 
	
	
	
		a message that causes all clients to drop invalid | 
	
	
	
		cache is broad-casted. | 
	
	
	
		 | 
	
	
	
		Need to be implemented. | 
	
	
	
		 | 
	
	
	
		### XSS Filter - Mn | 
	
	
	
		## XSS Filter | 
	
	
	
		 | 
	
	
	
		Provide HTML filter that allows filtering HTML tags | 
	
	
	
		and properties using strict white list. | 
	
	
	
		 | 
	
	
	
		Make it manually configurable and allow loading | 
	
	
	
		configuration from JSON. | 
	
	
	
		 | 
	
	
	
		Needed very fine grained definition of tags and properties | 
	
	
	
		including checks of correct nesting and specifications | 
	
	
	
		of regex for each property if needed. | 
	
	
	
		 | 
	
	
	
		 | 
	
	
	
		### Improve Support of RESTful services - Mn | 
	
	
	
		## Improve Support of RESTful services | 
	
	
	
		 | 
	
	
	
		Provide friendly API for RESTful applications in similar | 
	
	
	
		way it is done today for JSON-RPC | 
	
	
	
		 | 
	
	
	
		 | 
	
	
	
		### SQL Library - Mn | 
	
	
	
		## SQL Library | 
	
	
	
		 | 
	
	
	
		Consider writing replacement for `dbixx`: | 
	
	
	
		 | 
	
	
	
		- Write my own SQL Library (i.e. replace dbi)? | 
	
	
	
		- Improve libdbi - make sure it works on more platforms. | 
	
	
	
		- Improve SOCI? | 
	
	
	
		- Fork SOCI? | 
	
	
	
		 | 
	
	
	
		 |