Ebenezer Enterprises
We host a code generator called the C++ Middleware Writer (CMW). The
CMW writes portable, binary serialization code. A compiler with 2020
C++ support is needed to use the CMW. "All things (e.g. A camel's journey through A needle's eye) are possible it's true. But picture how the camel feels, squeezed out In one long bloody thread from tail to snout." C.S. Lewis We started developing the CMW in 1999 and it's been available since 2002. We also work in consulting and have experience with UDP, SCTP, TCP, FreeBSD, Linux, Windows, Boost and other development tools. Ideally, we hope to combine consulting with the on-line services we offer, and will spend 16 hours/week for six months on a project that uses the C++ Middleware Writer. Also we'll pay $5,000 and give a $2,000 investment in the company to someone who helps us find someone interested in this. We'll pay the $5,000 after working for four months on the project. Ebenezer Enterprises works to reward investments to 3 times the original amount. So the investment would result in between 0 and $6,000, depending on how things go for the company. The CMW is the back tier of a 3-tier system:
The middle and front tiers are needed in order to use the CMW. An account is needed to use the CMW. To get an account send an email to support@webEbenezer.net with "CMW account" as the subject. After receiving your account number, update your cmwA.cfg file accordingly. Links to some files in the repo: Free SaaSThe CMW is free to use -- no trial periods or tiered plans! The first 128 account numbers can be marshalled in one byte. Larger account numbers require 2, 3, 4, or 5 bytes. So there's an advantage to signing up sooner than later.Supported TypesFundamental Typesbool, float, double, int8_t, int16_t, int32_t, int64_t, uint8_t, uint16_t, uint32_t, uint64_tStandard Library Typesarray, complex, deque, list, (multi)map, (multi)set, span, string, string_view,unique_ptr, unordered_(multi)map, unordered_(multi)set, vector Boost Typesbase_collectionmulti_index_container rbtree small_vector Other Typesplf::colonyMarshallingInt -- a variable-length integer that is marshalled as one to five bytes depending on its value
User Defined TypesWe don't support nested classesWe will consider supporting additional types if something you need isn't listed here.Supported PlatformsThe software has been tested on FreeBSD, Linux, Windows and OS X.Recent DevelopmentsJuly 2021WSAStartup stinks. The front tier of the CMW is 27 lines long. It could be 26 lines if Microsoft would get rid of this API. Things like this are why the middle tier doesn't run on Windows.June, 2021Got continuous integration working on the the repo.October, 2019There have been a lot of changes that can be viewed in the repo, including using SCTP rather than TCP between the back and middle tiers.August, 2017I used this benchmark to test the CMW against other libraries. The CMW produced a smaller serialized size than Capnproto or Cereal:Capnproto 17,768 Cereal 17,416 CMW 16,712The CMW-based approach was also faster than Cereal in this benchmark. April, 2017Version 1.14 is here. This version adds support for plf::colony, std::string_view and boost::container::small_vector. There's also support for an inLine option in the Middle code.August, 2014Version 1.13 of the CMW is on line. This version takes advantage of move semantics. Here's an example of some generated code:template<class R>void give (::cmw::ReceiveBuffer<R>& buf ,::std::vector<::std::deque<::std::string>>& a){ for(::int32_t ca=give<::uint32_t>(buf);ca>0;--ca){ ::std::deque<::std::string> z1; for(::int32_t cz1=give<::uint32_t>(buf);cz1>0;--cz1){ z1.emplace_back(buf.giveStringView()); } a.push_back(::std::move(z1)); } } Why use a 3-tier architecture?Originally we used a 2-tier system. We switched to a 3-tier architecture for performance, administrative and security reasons. In the 2-tier architecture, the front tier had to establish a connection to the back tier each time it ran. In the 3-tier architecture, the middle tier maintains a connection with the CMW and uses it to serve front tier instances. In the 2-tier architecture, every user had to be given permission to get through your firewall in order to communicate with the CMW. With the 3-tier architecture, requests are mediated by the cmwA so only one machine needs attention from a network administrator. support@webEbenezer.netPlease send your questions and feedback to us. |