In the Internet age we live in, it’s not uncommon for web servers to
be hit with Unintentional, not so Distributed, Denial of Service (DoS)
Attacks. The attacks itself is intentional, but it’s not trying to
bring down the server. It’s just some stupid ‘bot running a probe as
fast as it can and, as a side effect, bogging down your server.
Bots are evil, but at least smart bots rate limit themselves to keep
off the radar.
The typical stupid bot is running a password probe against an admin
login. If you run any WordPress sites, you see this. All.The.Time. There are many good options to prevent these attacks, including
renaming well known URLs, IP filtering, and automatic IP banning software,
However, sometime you just need to make the attack go away
now. For that, I have a couple of Bash functions/tcsh alias.
I often find myself needing to download files to my local box via
SCP. Which means entering the hostname, the path, and the filename in
to my terminal window. However, I’m really lazy, if I
can’t auto complete it or cut and paste it, I’m not happy. Enter this
simple Bash function:
Sometimes an AJAX request on a page you’re developing needs to hit a
server on a different domain. Web browsers’
means (among other things) that other domains called from AJAX need to
be whitelisted using the
can do, it’s annoying in development. You could whitelist your dev
box, 0.0.0.0, or 127.0.0.1 (depending on how you work), but that’s
Fortunately, there’s an easier way, temporarily disable same-origin
I’ve turned that development work into open source in the form of gem
providing Ruby bindings to the APIs.
I have only implemented a handful of endpoints, Luminate Online
doesn’t have any kind of test mode or sandbox, any testing has to be
done with live data. However, I’ve used a meta programming approach
making it easy to quickly add additional endpoints.
All of the endpoints I have implemented have been used in anger.
Yesterday, I was involved in a fire drill around the launch of a new
Rails site on a very tight time frame. The site worked fine in
development/staging, but the index was taking upwards of 10 seconds to
render in production.
Because it worked outside of production we leapt to the conclusion it
was related to the hosting infrastructure. We checked Apache, Passenger,
server load, network configuration, and so on. Nothing.
Finally, I thought to check log/production.log, and there is was:
Processing by BlahController#index as */*
Rendered blah/_carousel.html.erb (5795.2ms)
Rendered blah/index.html.erb within layouts/site (5801.5ms)
We quickly tracked it down some image processing that wasn’t being
cached. It didn’t show outside of production because the image assets
were different. I won’t bore you with the details.
However, I will bore enlighten you as to my point. When debugging
a problem, start with the simple things. The Rails logs aren’t very
detailed, but they provide more than enough information to quickly
drill down to problems in your code.
Previously, Strongbox, my gem for using Public Key Encryption with ActiveRecord, allowed only one key pair for encrypting all of the records for a given ActiveRecord model. I’ve had a number of requests to make it possible to dynamically choose the keys on a per record basic and version 0.6.0 adds this feature.
The values of :public_key, :private_key, and :key_pair can be in one of the following formats:
A string containing path to a file. This is the default interpretation of a string.
Using this, you can automatically create per record public keys:
require'openssl'# Assumes the migration contains:# t.string :description# t.binary :secret# that you are collecting a password to encrypt the private key,# and that the secret is smallclassUser<ActiveRecord::Baseattr_accessor:passwordencrypt_with_public_key:secret,:key_pair=>:key_pairdefafter_initializersa_key=OpenSSL::PKey::RSA.new(2048)cipher=OpenSSL::Cipher::Cipher.new('des3')key_pair=rsa_key.to_pem(cipher,self.password)+rsa_key.public_key.to_pemendend
Important Caveat -
Currently, Strongbox encrypts the attribute as soon as it’s assigned (this will change in version 1.0). The means that the public key must be available before the attribute is assigned, hence the use of after_initialize to generate the key pair. Even so, this will fail if you do something like:
because the attributes are set before after_initialize is called.
As always, I like building Emacs for my Mac from
source. It lets me live on the cutting edge and have tigher control
of the version I’m running. If building software from source isn’t
your thing then skip the rest of this article and consider installing
Emacs using Homebrew,
I’ve written about building Emacs in the past, but OS X Lion brings a few
complexities to the process.