Embassytown
![]() |
Review:This is the first time a Miéville book has bored me. |
![]() |
Review:This is the first time a Miéville book has bored me. |
While walking along the river before dawn I laid down on a bench and looked up, and saw the tree, clear and green against the orange clouds in the night sky, and thought, hey, that looks cool, and tried to take a picture.
The screen in my camera stayed obstinately black. I changed settings, moved ISOs, touched on different places trying to convince it to focus and set aperture for the darkest or the lightest areas of what I knew to be there.
And it remained black. And suddenly, I had a dissenting opinion, that there was not a clear green tree there, and that the sky was not full of orange clouds, but that it was all black, starless and empty, empty of tree, of cloud.
I placed my hand above the camera, hoping to catch a glimmer of it, and still, the display was a square of darkness separating my fingers from my arm, as empty as before, mocking me featureless.
Why was it so black, if I could see clearly. If there were lampposts giving light, and I could see clearly, and there was a tree. I knew the camera worked. What was I doing, by the river, at 4AM, on a tuesday, laying on a bench, looking up, with a camera?
You expect your senses to work. You expect to perceive what is there, and not perceive what is not. You expect to see reality, to not see irreality, to listen to things, to not listen to unthings, to touch truth, to smell shit.
What would happen if you had two sets of senses, two visions, and they disagreed, and you were not sure which one to trust, which one is right, which one is true? What would happen if the camera was right and my eyes were wrong, and I was actually not seeing, but imagining, and the truth was empty, and the tree was not there, and the sky was black.
Then I enabled flash, and the ugly picture convinced me to, someday, get a better camera, and never forget to take my gastritis medicine when going for trips on isolated locations.
![]() |
Review:Not fun and rather shallow. Requires a suspension of disbelief I could not achieve. |
A simple yet powerful and flexible static website and blog generator, based on doit, mako, docutils and bootstrap.
I built this to power this very site you are reading, but decided it may be useful to others. The main goals of Nikola are:
Small codebase: because I don't want to maintain a big thing for my blog
Fast page generation: Adding a post should not take more that 5 seconds to build.
Static output: Deployment using rsync is smooth.
Flexible page generation: you can decide where everything goes in the final site.
Powerful templates: Uses Mako
Clean markup for posts: Uses Docutils
Don't do stupid builds: Uses doit
Clean HTML output by default: Uses bootstrap
Comments out of the box: Uses Disqus
Tags, with their own RSS feeds
Easy way to do a blog
Static pages outside the blog
Multilingual blog support (my own blog is english + spanish)
I think this initial version achieves all of those goals, but of course, it can be improved. Feedback is very welcome!
Nikola's home page is currently http://nikola-generator.googlecode.com
As I hope you know, if you get a string of bytes, and want the text in it, and that text may be non-ascii, what you need to do is decode the string using the correct encoding name:
However, there is a gotcha there. You have to be absolutely sure that the thing you are decoding is a string of bytes, and not a unicode object. Because unicode objects also have a decode method but it's an incredibly useless one, whose only purpose in life is causing this peculiar error:
>>> u'á'.decode('utf8') Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/lib/python2.7/encodings/utf_8.py", line 16, in decode return codecs.utf_8_decode(input, errors, True) UnicodeEncodeError: 'ascii' codec can't encode character u'\xe1' in position 0: ordinal not in range(128)
Why peculiar? Because it's an Encode error. Caused by calling decode. You see, on unicode objects, decode does something like this:
The user wants a unicode object. He has a unicode object. By definition, there is no such thing as a way to utf-8-decode a unicode object. It just makes NO SENSE. It's like asking for a way to comb a fish, or climb a lake.
What it should return is self
! Also, it's annoying as all hell in that
the only way to avoid it is to check for type, which is totally unpythonic.
Or even better, let's just not have a decode method on unicode objects, which I think is the case in python 3, and I know we will never get on python 2.
So, be aware of it, and good luck!