stereochrome

Inklings in December 2009

The 25 Essential Public Speaking Skills

The purpose of VeriSign's Name Store extension with regard to EPP

I’m not revealing anything terribly top secret by posting this explanation up here, and if you’re not involved in writing domain management systems, this will all be pure waffle to you, but if you are and you’ve the pleasure of dealing with VeriSign’s EPP backend for .com, .net, &c., and are being driven demented by some of their documentation, this may help you understand what’s going on.

The key thing to remember is that VeriSign’s domain management system is not unified; rather they have a single EPP endpoint, and a mechanism for routing requests towards their various domain management systems. This mechanism is the Name Store. Now, nowhere is the explicitly stated in the documentation for VeriSign’s EPP implementation, absolutely nowhere.

Thus, you can’t just create host and domain objects as you normally would with other registries; you need to treat every zone like its own registry.

So to register a .com domain, you must do this:

<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
     xmlns:domain="urn:ietf:params:xml:ns:domain-1.0"
     xmlns:namestoreExt="http://www.verisign-grs.com/epp/namestoreExt-1.1">
<command>
  <create>
    <domain:create>
      <domain:name>EXAMPLE.COM</domain:name>
      <domain:period unit="y">1</domain:period>
      <domain:ns>
        <domain:hostObj>NS1.EXAMPLE.COM</domain:hostObj>
        <domain:hostObj>NS2.EXAMPLE.COM</domain:hostObj>
      </domain:ns>
      <domain:authInfo>
        <domain:pw>my-auth-code1</domain:pw>
      </domain:authInfo>
    </domain:create>
  </create>
  <extension>
    <namestoreExt:namestoreExt>
      <namestoreExt:subProduct>dotCOM</namestoreExt:subProduct>
    </namestoreExt:namestoreExt>
  </extension>
  <clTRID>ABC-12345-XYZ</clTRID>
</command>
</epp>

And if you want to check the availability of a bunch of .com and .net domains, you have to split them into two separate lists, one for .com and the other for .net and use the appropriate subproduct in the Name Store extension. Yep, this is an enormous pain in the behind, but it’s necessary.

You must also do the same when checking for host objects or creating them - if you’re checking creating the host objects for use with a .com domain, you need to specify the dotCOM subproduct, and so on. The actual host objects themselves are totally immaterial.

I can’t fathom why VeriSign decided to expose this extra complexity - it most definitely doesn’t help those of us who have to talk to their systems.

Semantic Versioning

Damn Cool Algorithms: Log structured storage

Filesystem structure of a Python project

Useful reference on how to lay a Python project out well.

Postfix messages and mailbox size limits

Erm, I never got around to setting up fdm on lir to filter my mail, so my mailbox just hit Postfix’s default 50MB limit, thus there may have been some bouncing of mail. D’oh! This fixes it.

API design matters

And the same things can be applied to protocol design, UI design, and so many other areas.

Installing gevent 0.11.2 under FreeBSD 8.0

I’ve a personal project—a high-concurrency server—where I think gevent might be useful. Unfortunately, the setup.py file does finicky things to build the C extension parts of it that depend on libevent. After a bit of experimenting, I ended up having to do this, which is frankly a little crazy:

# pip install gevent \
      --install-option="-I/usr/local/include" \
      --install-option="-L/usr/local/lib"

Why I should have to explicitly specify those two locations, I’m not sure—when building, it should be looking in there for the headers and shared libraries, but it’s not. Very odd.

Fabric, Django, Git, Apache, mod_wsgi, virtualenv and pip deployment

Catching up on a few I bookmarked and never got around to reading.

Your Own PyPi server

Orderly JSON

Orderly is a textual format for describing JSON. Orderly can be compiled into JSONSchema. It is designed to be easy to read and write.

Nicholas Piël » Socket Benchmark of Asynchronous Servers in Python

This article is what got me looking into gevent, which I mentioned earlier, as between the benchmarks and code samples, it seemed like a very good balance of codability, performance, and reliability

Performance reviews for developers

There are many ways to look at all that we do, but the project-centric view is quite potent. Everything in work, and many things in life, have a a goal, a set of constraints, some design challenges, a schedule, a few dependencies, some key relationships, etc. And it’s hard to be good at managing, leading, teaching, creating, making or building just about anything if you have absolutely zero skills at project management. To me, anyone who is a writer, a VP, a salesman, a film-maker, a teacher or an athlete does project management of a sort nearly all the time.

When I get stuck, at work or in personal life matters, or I see someone else who is blocked, I say, out loud, everything is a project. If I’m blocked, what are my goals? What are my assets? What are my liabilities? How can I divide this big thing I’m stuck on into smaller pieces, one of which I might be able to tackle? And sometimes just realizing there is a simple easy way to reframe anything into the form of a project is enough to get things moving again.

Scott Berkun

Why Object-Oriented Languages Need Tail Calls

Cook makes an important distinction between abstract data types and object-oriented programming, and argues that they have related but complementary characteristics. […] We extend one of his examples in order to make a completely different point: object-oriented programming languages need tail calls correctly implemented, not just as a “trivial and optional” optimization of the use of stack space that could be achieved by using iteration statements, but in order to preserve object-oriented abstractions.

ditaa

ditaa is a small command-line utility written in Java, that can convert diagrams drawn using ascii art (‘drawings’ that contain characters that resemble lines like | / -), into proper bitmap graphics.

Very cool!

wifimgr - WiFi Networks Manager

It ain’t pretty, but it looks like a usable alternative to fiddling with wpa-supplicant’s configuration under FreeBSD.

x0xb0x: Transistorize the World

A component-for-component reconstruction of the Roland TB-303 bassmachine.

Damn Cool Algorithms: Spatial indexing with Quadtrees and Hilbert Curves

Retrospective: An Axiomatic Basis for Computer Programming

Atari Punk Console 2.0 assembly instructions

Looks very cool! Plonk a VCF (this looks interesting) between it and the speaker and possibly an envelope generator, replace the potentiometers with digital ones, throw in a microcontroller of some kind or variety, and… hmmm…

If only I’d the kit for building it though.

Pragmatic Programming Techniques: NOSQL Patterns

InfoQ: Systems that Never Stop (and Erlang)

Joe Armstrong presents 6 laws to obey in order to obtain high system reliability, Isolation, Concurrency, Failure Detection, Fault Identification, Live Code Upgrade, and Stable Storage, showing how they are respected in Erlang and followed by some examples from practice.

Peter Suber, "Nomic"

Nomic is a game in which changing the rules is a move. In that respect it differs from almost every other game. The primary activity of Nomic is proposing changes in the rules, debating the wisdom of changing them in that way, voting on the changes, deciding what can and cannot be done afterwards, and doing it. Even this core of the game, of course, can be changed.