I am a programmer at heart, and I write far more code than prose. This is a log of everything I write rather than just the occasional screed or missive on some inane topic. This, then, is a truer "web log", a brief history of what I've been writing lately. If you're not interested in the code, or the prose, or whatever, you can always filter that stuff out using the toggles in the left column.
Filter component symmetry, Model refactor
- Added an append method for Treequel::Filter::AndComponent? to serve as the underpinnings for an .and() method as soon as I figure out a way to track the last-appended component so I can collapse/follow apprpriately.
- Refactored Treequel::Model#find_attribute_type
Added support for Sequel-style #or: branchset.filter( :something ).or( :somethingelse ).
Added Treequel::Model#respond_to?
Bugfix, make object conversion work for setting attributes too.
- Add 'objectClass' to a Branchset that's resolved through a Treequel::Model so the model knows what ObjectClass? modules to extend the results with.
- Make setters on a Treequel::Branch do conversion from Ruby objects to correct LDAP attribute strings.
- Added operational-attribute awareness to Treequel::Schema objects
Bugfixes, coverage of LDIF-generation.
- Added support for empty base DNs to Treequel::Branch.
- Added a spec example for LDIF output; still need one for Base64-encoded values, however.
- .hgsub (1 lines added, 0 lines removed)
- .hgsubstate (1 lines added, 0 lines removed)
Hahahaha, just found a 28-minute long pocket-dial message from @bleything while cleaning out my work voicemail.
- spec/pgresult_spec.rb (0 lines added, 17 lines removed)
- spec/pgconn_spec.rb (20 lines added, 1 lines removed)
Fixing the "cd .." special case
Untaint objectClasses passed to Treequel::Model::mixins_for_objectclasses.
The workaround for two-param syntax mapping Procs didn't work after all. Modifying
the default mappings to take that into account.
Added schema-object roundtripping, with a script/specs to test it.
Added the ability to set the default results class on a per-directory basis.
Fixes for Apache DS and bugfix in Treequel::Model.
- Don't assume the 'structuralObjectClass' operational attribute exists in entries in the Treequel shell; Apache DS, for one, doesn't have it.
- Fix a bug in Treequel::Model which caused under_barred attributes not to try their camelCased equivalent.
Treequel::Model bugfix
- Fixed Treequel::Model registration logic for objectclasses with no model_bases by registering them under the empty-string DN.
- Return duplicates from Treequel::Model::ObjectClass::model_objectclasses and ::model_bases.
- Add an alias for #include_operational_attrs -> include_operational_attributes
Adding Treequel::Model, bumping version to 1.1.0.
- New classes/modules: Treequel::Model, Treequel::Model::ObjectClass?
- Adding the spike for the OHM implementation
Merged with 47bb9cd7af3b
Delegate the Treequel::Directory#root_dse method through its #conn
method too.
Added signature for changeset c8534439a5bc
Bumping version to 1.0.4 because I'm an idiot and included some files that were intended for a future version in 1.0.3.
Added signature for changeset fd86e30957a6
Add support for server-side paging
Add support for server-side ordering
Add support for controls
Build system update, prep for 1.0.3 release.
- Refactored some methods in Treequel::Branch to allow for easier subclassing.
- Fixed an edge case in Treequel::BranchCollection? mutators when they are called without a mutating value, but require one.
- Added Treequel::Branchset#+
- Factored out DN normalization functions into a Treequel::Normalization mixin
- Made Treequel::Schema::ObjectClass? include its ancestors' MUST and MAY OIDs by default in #must_oids and #may_oids.
- Covered some more edge cases in the specs
bluecloth_ext missing after rake gems:unpack
Updated build system.
- Ignoring YARD docs cache.
- Updating the README
- Removing redudant applet unit test file.
Add a simple template directive for inline comments, that won't get
rendered to the page. Similar to Mason's "<%doc>" tag.
I’ve been playing around with the Webkit-based HTML view that TextMate provides for HTML command output, especially to see if I could use its fancier features to make an RSpec runner that was a little shinier and had some features I find myself monkeypatching into the default TextMate runner for every project.
I’m in love with the ‘Resources’ view that bleeding-edge WebKit’s Web Inspector includes, so I set out to adapt the progress-bar half of the page to reflect the status of examples, and ended up with something I’m pretty happy with.
After many weeks of pointless tweaking and perfectionist procrastination I released BlueCloth 2 yesterday, but the announcement seems to have been swallowed by the ruby-talk list server (I tried to post it twice). I’ve posted it here if anyone’s curious.
I’ve been working for the last 7 months or so on an RDF library for Ruby based on the Redland C library. I tried to use the bindings for it that are distributed under the redland-bindings package, but like with most SWIG-based bindings to C libraries, I found it brought me out of thinking in Ruby whenever I had to call into it. It’s not the author’s fault — a custom binding for any language takes time and a sense for its idioms — but I felt like RDF and Ruby could mesh better than the functional interface could express. I felt like scratching the itch I was feeling would not only help me learn more about Redland and RDF, but it would make the barrier to entry lower for other people interested in using Ruby together with RDF.
So I started Redleaf, and it’s pretty much at the point I wanted it to be for a 1.0 release. There’s still a few features that Redland has that aren’t accessible from Redleaf (graph contexts and transactions are the big ones), and I haven’t even tried it under 1.9 yet. I’m also pretty sure my string translation back and forth from Redland’s unsigned char *s to Ruby’s char *s will cause problems down the road (with UTF8 data, maybe?). Ruby 1.9’s strings-with-encoding are looking pretty good for that, but I have a lot of code to port before I can make the leap to 1.9.
Mostly what’s left to do is documentation work. The API docs are pretty solid, but the manual is only about 20% done. While I think I can probably release without having it done, I’d at least like it to cover the library well enough that people can start using it without too much experimentation.
So I’m off to write some more docs. Hopefully I’ll be far enough along by March that I can release it then.
We recently decided to ditch ActiveRecord for our domain classes at work for Sequel. We’ve already been using Sequel for a great deal of the database work we’ve been doing lately with our usage and trending analysis tool for our NetApp GX and our render farm, and it’s really a solid piece of work that makes interacting with a database a breeze. It’s nice to be working with datasets for this kind of stuff instead of having to pull out tons of objects just to grab a sample of a single column and throw them away again. Sequel lets you use all the features of your database, but the easy stuff is just as easy.
We’ve been feeling the pain of trying to track ActiveRecord updates, and it keeps making moves further away from being a useful library in environments other than Rails. I’ve been using Sequel::Model for this site’s back end, and the ORM parts of it are just as clean and powerful as the core. We’ve already done conversions of our most-complex and most-connected classes, and we’ve spiked out all the stuff we weren’t sure of and in every case the code shrank, things got a lot less magical, and the functionality stayed the same or improved.
A salute to Jeremy Evans, Sharon Rosner, and all the other people that made Sequel so great. It’s going to be a lot of work, but I’m looking forward to it.
The last two years has given me renewed respect for PostgreSQL, too. It’s performing like a champ under a steadily-increasing load (~ 8M inserts/day), and its partitioning, tablespacing, and triggers make doing data-warehousing stuff relatively painless. It’s in big part due to the genius of our DBA that set stuff up for us initially, but it was partly his enthusiasm for it that made me motivated to dive in and start learning more.
Hopefully I can convince Mahlon to write up the work he’s been doing with partitioning and tablespaces at LAIKA.