<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">Fantastic work Evan.<div><br><div><div><span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-size: medium; "><div>Regards,</div><div>Zabrane</div><div><br></div></span></div><div>Begin forwarded message:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px;"><span style="font-family:'Helvetica'; font-size:medium; color:rgba(0, 0, 0, 1.0);"><b>From: </b></span><span style="font-family:'Helvetica'; font-size:medium;">Evan Miller <<a href="mailto:emmiller@gmail.com">emmiller@gmail.com</a>><br></span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px;"><span style="font-family:'Helvetica'; font-size:medium; color:rgba(0, 0, 0, 1.0);"><b>Subject: </b></span><span style="font-family:'Helvetica'; font-size:medium;"><b>[erlang-questions] BossDB - a sharded, caching, pooling, evented ORM for Erlang</b><br></span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px;"><span style="font-family:'Helvetica'; font-size:medium; color:rgba(0, 0, 0, 1.0);"><b>Date: </b></span><span style="font-family:'Helvetica'; font-size:medium;">February 20, 2012 9:48:12 PM GMT+01:00<br></span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px;"><span style="font-family:'Helvetica'; font-size:medium; color:rgba(0, 0, 0, 1.0);"><b>To: </b></span><span style="font-family:'Helvetica'; font-size:medium;"><a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br></span></div><br><div>BossDB is an advanced database ORM that was recently spun off from<br>Chicago Boss into its own project. If you hate parameterized modules,<br>parse transforms, and dirty compiler hacks, stop reading immediately,<br>because BossDB extensively (ab)uses all three in order to make<br>database work productive and fun.<br><br>GitHub page: <a href="https://github.com/evanmiller/boss_db">https://github.com/evanmiller/boss_db</a><br><br>FEATURES<br><br>* Define your data model with parameterized modules. Accessor,<br>association, and save methods are automatically generated for you.<br>BossRecords, modeled on ActiveRecord, can be sent straight to ErlyDTL<br>for rendering (e.g. Person:name() in Erlang, or {{ person.name }} in<br>ErlyDTL).<br><br>* Validation and save hooks<br><br>* Five battle-tested database SQL/NoSQL adapters with test coverage:<br>Mnesia, MySQL, PostgreSQL, MongoDB, and Tokyo Tyrant.<br><br>* Easy to write additional adapters, just 200-300 lines of Erlang code<br><br>* Naming conventions similar to Rails (plural table names, -has,<br>-belongs_to, ...)<br><br>* Language-integrated querying. This goes a bit beyond parse<br>transforms and supports Unicode query operators directly inside Erlang<br>code -- 18 search operators in all.<br><br>* Intelligent, adapter-agnostic connection pooling<br><br>* Support for vertical sharding: model associations work across<br>independent databases.<br><br>* A model event system called BossNews, which can create notifications<br>based on custom rules (e.g. "execute this callback when this field<br>changes on this record")<br><br>* Memcached-based query and record caching. Cache entries are<br>automatically invalidation thanks to BossNews. Never write another<br>cache-related save hook again!<br><br><br>BossDB is certainly not for everybody, but with it you can write very<br>concise, readable code when dealing with a database in Erlang. BossDB<br>has been the centerpiece of Chicago Boss since 2009; it is a fairly<br>mature piece of software and being used in production on a number of<br>websites (including, I recently found out, the #1 dating website in<br>the Philippines). The best part IMHO is BossNews, which brings model<br>event notifications to the server with a simple API -- great for<br>creating alerts or real-time notifications.<br><br>It should be straightforward to integrate BossDB into existing stacks,<br>but note that you need to compile model files with the BossRecord<br>compiler. In addition, you will need to use the BossDB compiler chain<br>to take advantage of language-integrated queries (which involves an<br>unholy workflow of intercepting scanner errors, rewriting the token<br>list, running the tokens through a custom pre-processor[1], applying a<br>parse transform, and finally sending the transmogrified parse tree off<br>to compile:forms).<br><br>Future plans mainly involve adapting BossDB to work with other<br>databases; there is a half-finished Riak adapter included in the<br>project, but there is room for many more. BossDB should be able to<br>work with pretty much any SQL or NoSQL database that supports<br>querying.<br><br>Happy querying, and let me know if you have any questions about the project!<br><br>Best regards,<br><br>Evan<br><br><br><br>1. Aleppo, an alternative to EPP: <a href="https://github.com/evanmiller/aleppo">https://github.com/evanmiller/aleppo</a><br>_______________________________________________<br>erlang-questions mailing list<br><a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>http://erlang.org/mailman/listinfo/erlang-questions<br></div></blockquote></div><br><div apple-content-edited="true">
<span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-size: medium; "><div><br></div></span></div></div></body></html>