<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../assets/xml/rss.xsl" media="all"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Blindly Coding (Posts about release)</title><link>http://ahicks.in/</link><description></description><atom:link href="http://ahicks.in/categories/release.xml" rel="self" type="application/rss+xml"></atom:link><language>en</language><lastBuildDate>Tue, 01 Oct 2024 20:37:50 GMT</lastBuildDate><generator>Nikola (getnikola.com)</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>A Libaudioverse Preview</title><link>http://ahicks.in/posts/august2014/a-Libaudioverse-preview/</link><dc:creator>Austin Hicks</dc:creator><description>&lt;div&gt;&lt;p&gt;Note: it was pointed out to me that I forgot to mention enum34 in the readme.
If you were getting errors about not being able to import enum, installing enum34 (not enum, enum34) will fix them.&lt;/p&gt;
&lt;p&gt;I haven't spoken about Libaudioverse much, primarily because I find code much more valuable than articles on a blog.
You can run the former.
You can use the former for cool games and technologies.
But Libaudioverse is now at the point where I can and should talk about it more.
So I shall.
And perhaps more importantly, I have something I can release.
It's not alpha-quality, thus the term preview.
But it can give you a feel for what this will be, and it has some cool example programs.
If you want to skip straight to the preview and not read the rest of this post, you can get the windows binaries &lt;a href="http://ahicks.in/libaudioverse_releases/libaudioverse_preview1.zip"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://ahicks.in/posts/august2014/a-Libaudioverse-preview/"&gt;Read more…&lt;/a&gt; (2 min remaining to read)&lt;/p&gt;&lt;/div&gt;</description><category>Libaudioverse</category><category>release</category><guid>http://ahicks.in/posts/august2014/a-Libaudioverse-preview/</guid><pubDate>Sun, 24 Aug 2014 13:45:00 GMT</pubDate></item><item><title>Lambdatask and Monitors in C++: Combining Advanced Language Features for a Simple Interface</title><link>http://ahicks.in/posts/july2014/monitors-in-c%2B%2B/</link><dc:creator>Austin Hicks</dc:creator><description>&lt;div&gt;&lt;p&gt;&lt;a href="http://github.com/camlorn/lambdatask/"&gt;Lambdatask&lt;/a&gt; is a project that I was hoping to put off for a while.  C++11 provides many useful thread primitives, but has major shortcomings.  The most notable of these is the lack of concurrent and threadsafe data structures in the standard library.  I'm not sure who thought it'd be a good idea not to seriously consider at least making &lt;code&gt;std::queue&lt;/code&gt; threadsafe, but it's not and we get to live with that.&lt;/p&gt;
&lt;p&gt;Unfortunately, among a bunch of features that &lt;a href="http://github.com/camlorn/libaudioverse/"&gt;Libaudioverse&lt;/a&gt; needs, threadsafe queues is one of them.  More unfortunately, it needs them now so I can implement callbacks properly.  I have identified three reusable things that it would be incredibly useful to have, the first two of which are surprisingly simple: a monitor, a threadsafe queue, and a library for the automatic parallelization of tasks with dependencies on other tasks.  These libraries exist in various forms, but my research failed to turn up any that use only C++11 features.  A library using only C++11 features will run on the 5 major platforms, and more are being added as we speak.&lt;/p&gt;
&lt;p&gt;It is monitors that I want to talk about today.  The code in lambdatask marks my transition from intermediate to advanced C++ developer.  This alone isn't worth a blog post, but how the &lt;code&gt;Monitor&amp;lt;T&amp;gt;&lt;/code&gt; works in Lambdatask is.  The code here took me about 3 hours to work out, and I can thank &lt;a href="http://cppguru.wordpress.com/2009/01/05/c-monitor-pattern/"&gt;here&lt;/a&gt; for the idea and &lt;a href="http://stackoverflow.com/questions/8777845/overloading-member-access-operators-c"&gt;this Stack Overflow question&lt;/a&gt; for the last piece of the puzzle.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://ahicks.in/posts/july2014/monitors-in-c%2B%2B/"&gt;Read more…&lt;/a&gt; (6 min remaining to read)&lt;/p&gt;&lt;/div&gt;</description><category>C++</category><category>release</category><guid>http://ahicks.in/posts/july2014/monitors-in-c%2B%2B/</guid><pubDate>Thu, 17 Jul 2014 20:00:00 GMT</pubDate></item><item><title>Unspoken 0.11</title><link>http://ahicks.in/posts/april2014/unspoken-0.11/</link><dc:creator>Austin Hicks</dc:creator><description>&lt;p&gt;I've put a new release of unspoken up.  This one fixes the inability of Unspoken to play sounds when the review cursor isn't following the system carrot or the system focus.
It is &lt;a href="http://ahicks.in/Unspoken-0.11.nvda-addon"&gt;here.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Let me know if it has bugs.&lt;/p&gt;</description><category>OpenAL</category><category>release</category><category>Unspoken</category><guid>http://ahicks.in/posts/april2014/unspoken-0.11/</guid><pubDate>Wed, 09 Apr 2014 18:30:00 GMT</pubDate></item><item><title>Clang_helper and the new camlorn_audio</title><link>http://ahicks.in/posts/march%202014/clang-helper-and-new-camlorn-audio/</link><dc:creator>Austin Hicks</dc:creator><description>&lt;p&gt;Clang_helper, &lt;a href="http://github.com/camlorn/clang_helper"&gt;here&lt;/a&gt;, is now useful and is also extracting everything available in the OpenAL headers except for comments.
It's still a bit rough around the edges, but is definitely workable, especially once I write a better abstraction around C types.  Currently, they are strings, all be it standardized-ish ones.&lt;/p&gt;
&lt;p&gt;C++ support is unfortunately nontrivial, and probably won't be happening soon.  I believe, however, that I can get it understanding and describing C structs.  The problem withC++ support is that it is incredibly hard to abstract things without losing meaningful information.
As the primary purposes of this project are automatic code generation for languages supporting C FFI and automatic code generation of C functions into C++ classes, this is not a current goal.&lt;/p&gt;
&lt;p&gt;The Camlorn_audio approach is going to be a bit unusual: wrap C++ classes into C functions automatically without human intervension, store information on them, and then spit out bindings-at all points in this process, the Camlorn_audio build system will have information on the functions it's generating for itself, and won't need to read the class.
Basically, there will be some templates and some yml files, and code will come out the other end.
Classes will be declared in yml instead of C++-this gives me sanity, for the moment.&lt;/p&gt;
&lt;p&gt;That said, expect me to backtrack on this in a few months and actually implement C++ support into clang_helper. It would be cool if it could, but I am currently at a loss as to how to not lose necessary information.  C++ is incredibly complex, and automated C++-&amp;gt;C generation in the general case is a hard problem.
Simple things like &lt;code&gt;vector&amp;lt;int&amp;gt;&lt;/code&gt; start to illustrate this-what about &lt;code&gt;vector&amp;lt;vector&amp;lt;int&amp;gt;&amp;gt;&lt;/code&gt;? How about &lt;code&gt;vector&amp;lt;string&amp;gt;&lt;/code&gt;?  Each of these quickly becomes a special marshalling case as to how to convert the data.  It probably requires some sort of dynamic pipeline that can reconfigure itself, at the least.
The only way it can be easily done is to limit oneself to some subset-C++ classes that make use of only pointers and C types shouldn't be so bad, and basically staying away from templates is required.  Good luck on finding libraries meeting them in the wild, though.
Things you can't touch include, well, the Stl.  There go half the nice things in the language.&lt;/p&gt;
&lt;p&gt;If my current rate of programming skill increase continues, I may be able to handle this in the near future.  They say that the worst programmer you know is yourself from 10 years ago; the worst programmer I know is myself from 6 months ago.&lt;/p&gt;
&lt;p&gt;Also, the point of not using swig for Camlorn_audio which already handles that difficulty: being able to do things Swig can't, by storing meaningful information (for example, throwing exceptions in languages that support it and being able to not need precompiled C extensions for some things).  The meaningful information is not included with C++.&lt;/p&gt;
&lt;p&gt;I stand at the point of being able to begin on the Camlorn_audio rewrite, and believe that it will go much faster than the first time.  It will probably also be an order of magnitude smaller: the scripts to generate things should be on the order of a few hundred lines, not a few thousand.  It will still depend on Boost for the time being, as well as Libsndfile (removing the Libsndfile dependency is a goal; there's no good way around Boost until everyone has C++ 11 capable compilers).
I will probably not use SCons.  I might write my own small build system, as I've probably got a fairly major nonstandard build step.&lt;/p&gt;
&lt;p&gt;In regards to the MMO: I'm trying to get this done first, as the MMO keeps running up against "X needs to be a feature in Camlorn_audio".  Most notably, callbacks.  I'll discuss my plans for dealing with callbacks another time once I finish figuring them out.&lt;/p&gt;</description><category>Camlorn_audio</category><category>Clang_helper</category><category>release</category><guid>http://ahicks.in/posts/march%202014/clang-helper-and-new-camlorn-audio/</guid><pubDate>Tue, 25 Mar 2014 21:50:00 GMT</pubDate></item></channel></rss>