You have less worries
Yes, the sky is blue

µA/MHz is only the beginning

1 November 2011, by Berwyn    add a comment

Low Energy MicrocontrollerPicking a low-power microcontroller is way more than just selecting the lowest-current device.  Low µA/MHz may be the least of your power worries in a mobile device.  Every man and his dog are now selling microcontrollers containing an ARM core.  And many are very much as good as ARM can make them at around 150µA/Mhz.  But the packaging around that core makes all the difference.  Let’s look inside an Energy Micro FM32 microcontroller to see what it takes for their EFM32TG110 to be ahead of the pack.  The keys are sleep mode and sensor power.

On a modern design you may have to sense a capacitive-touch keypad, sample ambient light level, listen to a serial port, monitor wireless communications and a swipe card.  If you have to wake up your CPU 1000 times a second to check all these sensors, your battery life is shot.  It’s the difference between a one-year non-rechargeable battery life and a 10-year life.  And that means the difference between having a user-replaceable battery or a never-replace battery – which comes down to a quality user experience.  And Steve Jobs has shown us that user experience is what sells products.

The answer is ultimate sleep and low energy peripherals.

There’s sleep and there’s SLEEP

To save power, any mobile device must spend most of its time in sleep mode – by long-established tradition.  So to start with, look for the current used in sleep mode. Our example EFM32 device has 5 different low power modes each enabling various functionality.  Its lowest-power nearly-dead mode draws only 20 nA (yes, really nano-amps), the real-time-clock as low as 0.5 µA on some parts, and highly functional modes only 1 µA.

The key thing to look for in sleep mode is fast start-up.  If sleep mode takes more than a couple of microseconds to start up, you’re wasting power that whole time.  Ideally, you want your software to sleep indefinitely every single iteration of the main loop.  It should only be woken up by I/O.  So your I/O all needs to be interrupt driven, and your processor needs to keep time without waking up.  Only time or I/O events should wake up the processor: don’t wake up every millisecond.  This has software implications: check out lightweight Protothreads or the Contiki OS.

The final key: low energy peripherals

Sleep mode is good, but by itself it is not enough of a critical power saver.  10-Year single-cell battery life, remember?  The real “killer feature” is low-energy peripherals.  Our EFM32 example boasts low-energy peripherals (LESense) that can run in the background while your processor stays in sleep mode.  While in sleep mode it can sense a capacitive slider or buttons, send UART serial data to/from memory, check light sensors, voltage levels, scale load cells, and so on.  This all happens while the processor is in sleep mode drawing just 1 µA.  No need to wake up to a hungry 150 µA/MHz.

There’s one more thing to look for: why not power your sensors only briefly? Turn them off in between measurements? For example, a capacitive touch button only needs to sense, say, 20 times a second.  Or to measure a weight threshold on a load cell would take an op-amp and comparator – but these only need to be powered up briefly several times a second.  Similarly, a voltage divider only needs to be connected up during comparator measurement.

Our the EFM32 microcontroller achieves this by having an array of analog comparators and op-amps that are powered up for a few microseconds every time the sensor is sampled.  It’s only when a finger is sensed on a button or a voltage level drops below a certain point, that the microcontroller needs to be woken up to decide what to do with the event.

We’ve been using the EFM32 as an example.  There may be others “out there” that do the same kind of thing.  But we haven’t found any yet.  In our minds, this places Energy Micro in a league of its own.  If you know of similar low-energy sensor technology in ARM microcontrollers, we’d love hear your comments.


Also see Low-Energy Mobile, the Nov issue of our newsletter or our other technical articles.

Single-port USB3 docking

1 November 2011, by Berwyn    add a comment

This made-for-mobile docking is a royalty-free idea for any laptop manufacturer to take up.  All I ask is that you give me one  :-).  Docking stations are bulky.  Why not make the laptop power supply be a single USB connector into the laptop.  It can supply power over this (special) USB connector’s power wires, and the power supply it can also be a USB3 hub for the room’s peripherals: second monitor and printer, etc.  When you’re in the office, just plug in power and you’re docked.  Plus, when you’re out of office, the same laptop port doubles as a spare USB3 port.

Endian solution for C

1 November 2011, by Berwyn    add a comment

Big or little end?

Are numbers stored big-end or little-end first?  C programmers have to byte-swap manually to deal with this.  Portable code becomes icky.  The full ickiness is illustrated in Intel’s excellent Endianness White Paper.

But in C there is no reason the compiler can’t do the hard work and make programs both portable and pretty.  Here we present quick hack, and also a solution requiring a minor change to the C compiler.  First the quick hack.

Quick Hack

Suppose we’re dealing with a USB protocol setup packet:

struct setup {
  char  bmRequestType,  bRequest;
  short  wValue,  wIndex,  wLength;
};

Since USB is little-endian, the short integers will work on a an X86 machine, but if you have the job of porting to a big-endian ARM, you’ll need to byte-swap each of these values every time they’re accessed.  This could be a lot of code rework.

One quick-n-dirty way to accomplish this is to simply store the USB packet in reverse order as it comes in your door (or write a reversal function).  Then define your struct in reverse order:

struct setup {
  short  wLength,  wIndex,  wValue;
  char  bRequest,  bmRequestType;
};

Note that this will only work if you don’t have strings in your struct, as C’s string library functions don’t expect strings to be in reverse order!

A Real Solution

This solution has the C compiler dealing with the whole endian issue for you – making your program totally portable with zero effort.  It would require the addition of a single type modifier to the C compiler (C compilers already have various type modifiers).  To solve endian portability, this addition would be well worth it.

This concept is similar to the ‘signed’ and ‘unsigned’ access type modifiers or the GNU C compiler’s packed attribute which helps to access a protocol’s data by letting you prevent padding between structure elements.

Our example above would become:

struct setup {
  char  bmRequestType,  bRequest;
  little_endian  short  wValue, wIndex, wLength;
};

All that is needed is to be able to specify the endian nature in a type modifier: littleendian or bigendian.  In the above an X86 compiler would knows to ignore the modifier since it’s already little_endian.  But a big-endian ARM compiler would know to byte-swap for you upon reading or writing.

The same would work for pointers:

little_endian  long  *x,  *y;

Whenever x or y is accessed, the bytes are swapped by the compiler.  You can even cast a standard long pointer to a little_endian long to force a compiler byte-swap upon access.

Internally, the compiler would probably implement just a single byte-swap type modifier which it would apply to all non-native accesses.  But for portability and clarity, this should be spelled out as little_ or big_endian in the source.

It should also be noted that this same solution solves the endian problem for bit fields and bit masks (White Paper p12).

We are not C compiler gurus, so I’m not going to risk adding this change to my compiler.  But I put it “out there” for comment, and hopeful uptake.  I’m guessing this should go into GCC first, and then others will gradually follow suit.

Earthquake Update and How to use your Water Heater as a Reservoir

2 March 2011, by Bryan    4 comments

Status update and some thoughts

We hope this finds you well. Our thoughts and deepest sympathies are with all our fellow citizens of Christchurch and New Zealand who’ve been affected in some way by the recent major 6.3 earthquake in Christchurch.

Our families and close friends are unharmed, and we’ve sustained only minor damage to our buildings and property. Since our buildings are in the CBD, we’ll be working out of other offices temporarily. Our customers will be pleased to know that all our data, websites, and other services are backed up and fully operational from our Auckland-based servers.

We realize that many other Christchurch people & businesses have been affected in much more tragic ways. Without wanting to gloss over what is truly a sad situation, we believe the Christchurch situation is in God’s hands. We know that saying so doesn’t make it any less difficult for those who have lost friends, family members, and property. We want you know we’re praying for you.

Like everyone, we are doing what other things we can in order to help relieve burdens where possible.

How to use your water heater as a reservoir

We all know by now that lack of clean drinking water is one of the serious long-term hazards in an earthquake: the main water supply can be off or contaminated by the sewer. Here’s how to use your water cylinder as a reservoir of clean drinking water.

This will be of most use if your water is still off, because otherwise you’ll probably have some unclean water in your tank. The procedure may differ slightly for you, but the basics are here.

Click on the photos to the right to see more detail.

1. Turn off the feed immediately

Feed tap Turn off cylinder’s cold water feed as soon as you can after the quake. If you’re lucky, you’ve got a tap on the pipe coming out of the wall. Or if you have a header tank in your attic, the feed will be up there.

2. Find the flush outlet

Overflow drainpipe Find the “flush” or overflow drain outlet. In this case we had to unscrew bits of the plastic drain to reveal the end of the grey outlet pipe.

3. Pull up the air inlet valve and prop it up

Air inlet Before letting clean water out of the drain pipe, pull up the air inlet valve to let air into the top of the tank as water goes out the bottom. You need to find something to prop open the air inlet valve. If nothing is going into the top of the tank when you drain water out the bottom, then the water will slow and stop. (Otherwise it can apparently suck the liner off the inside of the tank.) If you’ve got a header tank in your attic that feeds your cylinder, then you won’t have an inlet valve and you don’t need to worry about this.

4. Find the flush knob

Flush knob Find the “flush” knob that leads to that drain pipe, and you should get hot water coming out. It’s clean! Use it sparingly: your neighbours might needs some, too. In this case, the flush knob happens to be marked “flush”. You might not be so lucky. Look for where you think the water might drain out. The flush mechanism is used by plumbers to drain your tank before they have to replace it.

5. Turn off the power

You might want to turn off your water heater’s electric switch so you can get some cold water out. It’s easier to heat water than to cool it.

6. Catch rainwater from your roof

Downpipe modification Simply find a way to detach the downpipe from where it enters the drain, and place a large container under it. Some down-pipes (like the one shown) can be disconnected without even a screwdriver just by popping the pipe out of the spout.

If you’re smart, you’ll probably find a way to channel your roof water into your header tank, but there’s no need to get fancy here: just use any large container you have handy.

Note:

Turning off the water feed is important so that you don’t let water from the main supply into your cylinder. This is because the water supply is potentially contaminated by broken sewer lines after an earthquake. If you want your water heater to retain clean water then be sure to turn off the feed before you draw any hot water out of your hot water taps. Because drawing hot water out of the tap will suck potentially cold water into the water heater. Don’t worry if you’ve just run a hot water tap briefly by accident: you’re probably just sucking in a bit of clean cold water that was still in your pipes. Some tanks don’t have a feed tap. If that’s true for you, then your hot water will only stay clean if your mains water supply is off and not feeding your tank.

Do you have any useful earthquake tips of your own?

The Founding Fathers of the Silicon Valley

15 February 2011, by Latesha    one comment

Vacuum tubes -- what they had before transistors Two days before Christmas in 1947, the world was busily scurried around buying and wrapping gifts, cooking ham, and filling stockings; completely unaware that three men had just created something incredible. Something which would usher in the Information Age, change the face of technology, business, and the way we live our lives. In fact, the presents which today’s teenagers demand from Santa wouldn’t even be possible without this small but significant invention – the transistor.

Anyone with an interest in electronics knows just how important this device is; a semiconductor which amplifies and switches electronic signals, transistors are the key active component of many gadgets we consider essential in our modern day life. We can carry our slim, streamlined laptops, listen to MP3 players, and punch out sums on our portable calculators all thanks (largely) to three very intelligent men – John Bardeen, Walter Brattain, and William Shockley.

Their discovery and its development played an instrumental role in the history of technology. Let’s explore the unique contributions made by each member of the transistor ‘A Team’.

The people underneath the geniuses

John Bardeen was often said to be the brains of the operation. Born to well-off, intelligent parents in 1908, John was something of a prodigy; graduating high school at 15 and described by his mother as ‘the concentrated essence of the brain’. A defining point for John was the pursuit of his PHD in mathematical physics at Princeton University. This is where he explored the study of metals with scientists like Eugene Wigner and Frederick Seitz, and realised the importance of quantum mechanics theories in understanding how semiconductors worked. He couldn’t have possibly known at the time just how crucial this knowledge would become!

Walter Brattain has been described as the hands that complemented John’s brain. As a co-worker said, ‘He could put things together out of sealing wax and paper clips, if you wish, and make things work.’ More cowboy than scientist, Walter was brought up on a cattle ranch in Washington, and applied his practical skills to every problem presented. After gaining his PHD in physics, a chance meeting with Joseph Becker of Bell Labs landed him a position studying copper-oxide rectifiers. His insight into the generation of electrical currents in crystals and research on the surfaces of semiconductors cuprous oxide and silicon helped make him a valuable asset in the development of the transistor.

William Shockley was definitely the most controversial character of the threesome. His astounding achievements in advancing radar equipment and depth charges during World War II, position as advisor to the Secretary of War, and brilliant mind are in direct contrast to the violent, racist, and bitter characteristics he became known for later in life. William headed up a research team seeking a solid-state alternative to fragile glass vacuum tube amplifiers at Bell Labs, and brought together John and Walter, who he knew from his schooldays, to help uncover why the amplifier design he had devised didn’t work.

The discovery

John, Walter, and William worked feverishly to solve this puzzle. In the laboratory and at the golf course they talked metals, voltage, and the implications of electrical currents on surfaces. After switching from using a silicon crystal to germanium, and implementing their discoveries about how electrons behave at the surface of the metal, Bell Labs were convinced that they had cracked it, and hastened to patent the new designs.

The first point-contact transistor, (a portmanteau of the term “transfer resistor”) was born!

The three men were awarded the Nobel Physics Prize in 1956 for their key research into the transistor concept. Interestingly, by this point John Bardeen had left Bell Labs due to William Shockley’s disagreeable, competitive nature and the consequent disintegration in their working relationship.

Implications

The arrival of the transistor was a catalyst for the Silicon Valley boom – William Shockley left Bell Labs holding a grudge that his name hadn’t appeared on the patent applications to start his own company, Shockley Superconductor. This fell apart due to his suspicious and dictator-like managerial style, and defecting employees created spin-off rival companies such as Fairchild Semiconductor, Intel, and National Semiconductor; issuing in the new generation of Silicon Valley start-ups and the microelectronics revolution.

Fast-forward 63 years, and there are more transistors built per second than there are people on the planet; billions of these devices are what power our life in the 20th century. As you may be aware, the most common form transistors are utilised in today is through integrated circuits (or commonly, ‘chips’.) The integration of large numbers of tiny transistors into a small chip was an enormous improvement over the previous manual assembly of circuits using electronic components. The implications of this in the development of technology is huge – as the power of IC’s increase and their size decreases, less materials are required to accommodate them.

This means our laptops get smaller, our systems become more streamlined, and the way we approach hardware and computing radically shifts.

Other advantages which distinguish the transistor from its predecessor, the vacuum tube, are:

It’s hard to believe that the transistor was only introduced the world of technology in 1947. Those enjoying the many benefits of the device all throughout the day; listening to the car radio on the way to work, checking emails on their iPhone, or jogging to tunes on an MP3 player certainly wouldn’t think to give credit to John Bardeen, Walter Brattain, and William Shockley. But these three founding fathers definitely made a big impact – and as John said, ‘Science is a field which grows continuously with ever expanding frontiers.’

What do you think is the next frontier for technology?

— Written by guest writer Latesha Randall

Should you use C++ for an embedded project?

20 January 2011, by Ben    5 comments

Recently I was asked whether to use C or C++ for an embedded project. Let’s assume a sizeable project with an ARM7-based microcontroller and roughly 16KB of RAM. Here is my answer, and I hope it’s useful for you.

One good reason to go with C++ might be that you have a ready team of programmers who are already fluent in it. This would be a strong pull, but if they are not fluent in the embedded world particularly, then this article may help them choose a subset of C++ suitable for an embedded environment.

As the guy said, C makes it easy for you to shoot yourself in the foot, but C++, being much more complex and powerful, allows you to blow your whole leg off. This is true especially in embedded situations.

If you’ve only used C for embedded projects, you’ll be able to get started and into the project much more quickly if you stick with C, and other people could take over more easily. You won’t spend time learning the ins and outs of C++.

C has the advantage of being very direct and “what you see is what you get”. For example, in C this line of code adds two numbers together:

int x = y + z;

But in C++ a very similar-looking line:

MyType x = y + z;

This calls a constructor (which could do anything), calls the + operator of y’s class which (if overloaded) could do anything, possibly throws an exception, possibly allocates memory, etc. You just don’t know, unless your coding style guide lays down the law about what you can and can’t do (more on that soon).

On the other hand, there are definitely some good features in C++’s favour that make programming better, especially for larger projects. Classes, namespaces, templates, scoping … but the language has a ton of powerful features as well as quirks, so when you’re embedding C++ you have to choose a subset of the language and stick with it.

For instance, for embedding C++ in an ARM7-sized processor, you might come up with a list something like:

If you haven’t used C++ before, you’ll definitely want to learn it before getting too far in. Following some links in my C++ blog articles may be helpful here:

That said, you can’t learn it just by reading about it, so you need to start coding.

In conclusion, for a small embedded job I’d pick C first for its simplicity, directness, and the fact more people know it. For a larger project, I’d pick C++ — it can make embedded life nicer, but only if you carefully choose a subset and have a good coding standard.


Further reading:

Notebook-friendly thumb mouse

23 August 2010, by Bryan    4 comments

A clever little startup company called SwiftPoint in our hometown Christchurch has finally launched their raison d’être — the nifty, incredibly small Future Mouse. It’s the smallest useful mouse I’ve ever seen, and it’s been making a few small waves in the technology world.

For the record: my current favourite mouse is the Logitech Anywhere MX, so if I make any comparisons, that’ll be the benchmark.

I love pointing devices (that is to say, I hate them, and I’m always on the lookout for one that suits my style), and this is certainly one which has held my attention ever since the first whiff got out in 2008. It’s a great buy for the image-conscious computer user, having approximately the same effect on my boring rectangular Thinkpad workhorse as a pair of John Lennon glasses would have had on your high-school accounting teacher.

What’s so great about it?

One of the things I dislike about every mouse I’ve ever used is the need to move my hand away from the keyboard to the mouse and back, whenever I need to click a button or select some text. I’m definitely not the lazy type, but my job involves a lot of typing and clicking. I do need a good break from the screen every hour or so, but not every 30 seconds. Swiftpoint’s videos showed people using the mouse on laptop palmrests, keyboards, and rocky cliffsides, so I was interested.

The low-down: It works fine on my laptop palmrest, but… it kinda gets in the way of my palms. Bummer. It doesn’t work very well at all on the keyboard, I’m afraid. The rocky cliffsides, well, I don’t really use my laptop when I’m climbing (I can’t speak for real climbers, though).

Well, that was my single biggest reason for buying it, and I’m mildly disappointed. Also, there’s not exactly hectares of mousing space on my palmrest. Maybe I should take Swiftpoint up on their satisfaction guarantee, but there’s some other goodies waiting.

First up: “Side-scroll”. The scroll-wheel is positioned such that if you tilt the mouse on its side, the scrollwheel makes contact with the mouse surface, so you can scroll by moving the mouse up and down. Works pretty well. There’s an additional feature that makes it scroll faster when you hold down the secondary mouse button.

Another great reason to hang onto this baby: the wireless USB plug is really tiny. Well, not quite as tiny as the Anywhere MX’s, but small enough to leave it plugged in permanently without it getting in the way. Great! Now I’ve only got one USB port left to plug all my other devices into…

The USB plug doubles as a charger, which is so obviously useful that I’m surprised no other mouse does the same thing (I have to replace my MX’s batteries every few months). The Swiftpoint mouse takes a mere 90 minutes to charge for 2 weeks, but if you run out of juice you’re not left in the cold — it has 30 second supercharge that gives you juice for another hour of usage, so you can wait until you have time for a proper charge. I probably wouldn’t recommend using a wireless mouse in a life-and-death situation, though.

Which brings me nicely to the next loveable feature: the magnet. Your new Swiftpoint mouse (I assume you’ve rushed out and bought one by now) has a little magnet built into the bottom, strong enough to hold it onto the charger while you walk around the airport with your laptop. It works well.

The magnet also holds the mouse onto the small magnetic strip in the middle of the mouse surface which they provide for you to stick over your palmrest. That means you can prop your laptop up on your knees at some weird angle, mouse away, and between mousings, store your mouse in a convenient location on your palmrest (far enough away from your palms, incidentally) without it falling to the bottom of the rocky cliffside (a long way down…)

It’s not all roses, though

The provided mousing surface is a bit of a mixed blessing. The surface is fairly functional, and the magnetic strip is ingenious (and really works as advertised). But I feel like I just put sellotape all over my laptop. It’s ugly, and it looks like a 7-year-old’s DIY job. Remember what I said about your accounting teacher? He can forget about being a rockstar. Needless to say, I removed it — I still have the occasional dream about being a rockstar.

Swiftpoint claims that this mousing surface “won’t leave a sticky residue on your laptop”. Oh yeah? What’s that white sticky stuff then? Fortunately a damp cloth removed it fairly painlessly.

Most of the problem could be solved fairly simply by not making the mousing surface transparent. Any opaque color (black would match my laptop) would look better. Judging by the beautiful mouse, they’ve got a great design team. I’m sure they’re capable of designing a beautiful mousepad.

My solution: neatly cut out the magnetic strip and apply that to my laptop. My laptop palmrest works fine as a mousing surface. I’ll let you know how it goes.

One of the selling points of this mouse is the fact that you can “hold it like a pen”. Brilliant idea, and fairly well executed. It does feel more comfortable and controllable than a normal mouse. However, it’s not 100% “like a pen”, and it will take some getting used to. The angles are slightly awkward, and again, there’s not a lot of spare space for moving a mouse on my palmrest.

While I’m griping, there’s one more item I’d like to add to this list. A hobby of mine, and a significant part of my job, is graphic design & photo manipulation. Most of my design apps use the middle mouse button to pan the drawing canvas around the screen. I’ve looked hard, and there’s no middle mouse button here. The two mouse buttons provided are very ergonomic & robust; no complaints there. But coming from my Anywhere MX (the first mouse where I’ve ever been happy with the middle button), I’m always missing something. Sure, I’m probably using the Swiftpoint for purposes beyond the designers’ intentions, but I’m a one mouse type ‘o guy.

My suggestion: Place a 3rd button right in the hollow of the grip on the right-hand-side of the mouse. That’s what feels most natural and least in-the-way to me. Even better, they could swap the new button with the current secondary button, and the buttons would feel more like they do on a standard mouse.

In summary

This is a fantastic mouse, and a lot of thought has been put into the design. If you travel, it’s a must-have. I’m afraid I won’t be using the Future Mouse for my day-to-day work, but I like it enough that I’m planning to hang onto it. Next time I’m on a plane, or doing a bit of leisurely cliffside computing, I plan to have my Future Mouse with me.

Have you tried this mouse, and do you have any experiences (positive or negative) to share? Any favorite mice you think deserve a mention?

C++ for C programmers, part 2 of 2

10 August 2010, by Ben    4 comments

This article lists the features C++ adds to C, from an ex-C programmer’s point of view. A couple of months ago I wrote part 1, which detailed the non-OO features. This second part details the object-oriented features, though I haven’t given them exactly watertight separation.

Again, this is a quick reference, and the idea is to follow the links to further information if you want to know more about any of them.

So, part 2 of 2, the OO features.

Class and (de)constructors

Virtual functions

Inheritance and friends

Type casting

New and delete

Operator overloading

Templates

Exceptions


Well, thanks for listening!

C++ for C programmers, part 1 of 2

3 May 2010, by Ben    11 comments

As Stroustrup said, there’s no such programming language as C/C++. C and C++ are two different beasts.

I’m not going to argue here about which is better. For small or embedded projects, the complexities of C++ can get in the way. For larger projects, some of the features of C++ are very useful.

I’m simply going to list the features C++ adds to C, from an ex-C programmer’s point of view (yes, I was one of those people who believed that C++ was just “C with classes”). The idea is to follow the links to further information if you want to know more about any of them.

This is part 1 of 2, the non-OO features:

Please send your feedback, and let me know if I’ve missed any non-OO features. The following week’s entry contains the second part describing the object-oriented features C++ has added.

Oyster.com looking for Pythonistas

26 April 2010, by Ben    add a comment

An Oyster HotelOyster Hotel Reviews is the place to go for high-quality hotel photos and unbiased reviews.

But what might interest you is that they’re currently looking for experienced web developers, especially developers with strong Python skills. I’m slightly partial, as I’ve started working with them recently, but I can already say they’re great folks to work with, and the company is a happening web startup with a very positive trajectory.

Oh, and 37signals really likes Oyster.

Anyway, if you’re a Python web developer, you can apply via their Joel on Software job listing. The low-down for the position from Oyster is:

We are aggressively expanding and are looking for rock star software engineers to join our team.

The hired individual will work on projects including massive scalability and storage problems, information retrieval algorithms, internal tools and end user features. You should have a neurotic attention to detail and be willing to get your hands dirty building every aspect of a consumer website that will attract millions of customers. In this role you will primarily be doing development in Python and will be touching code at every level–user interface, core server infrastructure and the database.

We launched recently and have been written about in the New York Times, Wall Street Journal, LA Times, Economist, USA Today and many others.

Requirements

  • BS or MS degree or higher in Computer Science
  • 3+ years of professional development experience in Python is a must
  • You are a star; You should be able to code 3x faster than the other software developers you know
  • Experience in database programming
  • Experience with web development
  • Interest in working with other disciplines including customers (end users of the software you write) and product management
  • Must be a team player and open to change
  • Must have unrestricted work authorization to work in the United States

What We Offer

Joining our team full-time brings genuinely unique benefits:

  • 30″ monitors with the best computers money can buy
  • Amazing server infrastructure with which you can do very unique things (details in the interview)
  • We believe that one excellent worker is far better than two adequate performers; as such, we pay well and reward star performers as stars
  • Medical benefits
  • Dental benefits
  • 401(k)
  • Meaningful equity/stock options in a startup with a very bright future
  • Friendly coworkers who are the best in their respective fields
  • A seasoned and successful entrepreneurial leadership team that has already achieved great success and knows how to focus and get stuff done

To apply, submit your resume to jobs@oyster.com with “Python Software Engineer” as the subject.