Microwave project managing – week 2

Manufacturing

The visit to AMAPRO on Friday was a significant success, I feel confident enough about the process that I didn’t follow up my other turret punching options.

The company is run by a man who strongly reminds me of someone I have worked for recently, and to a lesser degree an earlier boss. This simultaneously reassures me that he will do a good quality job and also terrifies me because I am where he extracts his money.

The factory floor tour was very impressive, an expansive space but very clean, no clutter. I was most interested in their three Amada turret punch machines, recent models which seemed well maintained, one was also fitted with an automated feed allowing it to run unsupervised overnight. They also had a number of press brake machines, some automated welders and a range of other standard tooling toys.

The company has two engineers that do design work, including developing their own AMAPRO products. I will probably use them to assist in shifting from my sketches to a manufacturable product.

It was rather difficult to discuss price estimates, partly because it was very early in the design process, I also got the feeling that any final quote will vary greatly based on the quantity. They also offered that pricing for preliminary design and tooling work could be based on the eventual final order, something I am wary of because I intend to get at least one other quote for the final job.

The costs looks at being above $150 but haven’t taken into account the front face. For the initial calculations I am going to assume the front will also be metal, to avoid the plastic tooling costs, and work with a chassis price of $200. This is a significant percentage of my target cost, higher than I was hoping for, but the cost structure does have the advantage of being fairly linear based on quantity. I also think I will be able to offer the choice of cheaper metals with enamel and powder coating or full stainless as the tooling is identical. There are some other options which may be able to get the eventual cost down but they come with considerably more risk.

The mechanical portion of the feasibility stage is now complete. When I get around to prototyping I will probably build the first prototype myself in the garage, then draw up a formal design and do one or two rounds of small run manufactured prototypes.

Thermal Imaging

I also spent some time investigating thermal imaging systems. I have decided on two devices to buy and investigate further, both are very different.

The first is the Seek Thermal camera. This is a phone attachment which retails for $250 US, the latest after a series of Kickstarted products and an entry from FLIR. The company is interesting, the founders have a solid history in the industry, their prior company was purchased by FLIR and they recently got a healthy check after FLIR tried to attack them through the courts. The camera seems amazing, significantly better resolution than anything else on the market under $1000 and has a thermal range up to 350 ° C, many others cap out at around 100 ° C. The substantial downside is that Thermal makes their own sensor package and don’t sell it as a component, I am going to have to talk them in to changing this. It is also rather expensive.

The other is the Panasonic Grid-Eye 8×8, a component which provides a 64 pixel array of temperature. The main advantage is that it is price competitive, $39 USD in single unit quantities, the evaluation board is only $75 USD. The disadvantages are substantial, the resolution is poor and the temperature range caps out at 100 ° C. However while the picture won’t be nearly as good to look at compared to the Seek Thermal I think the resolution will be enough for the functionality I envisage and target temperatures tend to be under 100 ° C.

Worth mentioning is the MLX90620, my third option. This was used by the IR-Blue project, one of the early Kickstarted infrared phone products. The sensor produces a 16×4 pixel array with a temperature range up to 300 ° C. However at $87 USD per unit it sits in an uncomfortable space between the two other products, better than the Grid-Eye but nowhere near as good as the Seek Thermal. I may revisit it if the other two don’t work out.

Display

I was hoping to find one or two options for the display this week but didn’t get around to it.

View full screen

Microwave project managing – week 1

Mechanicals

So the last week has been spent dominated by getting my head around mechanicals.

I had fantastic visits to three metal stamping manufacturers, Diver, IXL and Component Industries. All three were helpful well beyond expectations, especially since they realised very quickly that I wouldn’t be able to use them.

I understood that metal stamping had upfront costs which were offset by the reduced unit costs. What I didn’t understand was the scale that they work at. Stamping is good once you want 10,000 of something and really sweet once you add another zero to that number. My preliminary working number is 500, so I have to use different techniques.

The lower cost method is a combination of turret punching, laser cutting and folding. I have actually played with similar techniques in a metal sculpture course I did a few months ago, I just didn’t think they would come into play for this kind of product. I have visited a laser cutter, Beyond Laser who promised that if I could draw it, he could cut it. I also have a visit lined up with AMAPRO and Conomatic for Friday.

It looks like what I am after is possible. I should have a much better idea on Friday but it seems like I am looking at $100-$150 for the mechanicals. This will involve more labour than the stamping technique and it may be worth looking overseas to reduce the costs.

There are also some significant unknowns with the mechanical design that impact the cost, such as what happens if you put sharp corners in the microwave chamber.

Inverters

The other main task was looking in to using inverter technology. This was less fun. Basically the technique is tied up with patents, primarily held by Panasonic. The non-Panasonic inverter microwaves seem to be either licenced or rebadged Panasonics.

Being able to buy the Panasonic guts would actually be ideal for me and seems like fairly standard practice in the industry. Figuring out who to approach is not easy though, I have sent one email off and will see if it leads to a way in.

View full screen

Microwave project managing – week 0

I have started my first work orientated project for the year. The plan is to design, build a sell a new microwave design.

As I am currently running solo I have to wear a few more hats than I would normally, some I have never really wanted. One of these is project manager. To ensure I don’t get caught up working on something less critical and blow my time, or at least ensure I am aware of when it happens, I have come up with a plan.

Below is the detailed timeline of phase one, establishing the project’s viability, the plan is to repost this weekly. I don’t expect to keep strictly to the timeline, but at least having a base allows me to see the deviations.

I have actually detailed a fair bit of phases two and three as well but the program I am using to display the timeline struggles a bit with extensive content, I might fix it up some day.

View full screen

dumpio2curl

I have been playing around with duplicating another program’s web service API. I want to be able to act as a substitute but need to rewrite it in a new language and change a bunch of its features. To do this I have been running the original program’s functional tests against my own code.

Unfortunately it is sometimes difficult to see exactly what is going on. The tests are written in Python, which I am not very familiar with, and are wrapped through various layers adding different headers.

Happily Apache supports logging with mod_dumpio so I can run the tests until they fail and then simply look at the last request. That was the plan at least, but a single call generates sixty lines of log. Much of it looking like the sample below, obviously the middle line is content the other two are noise.


[Thu Jan 15 10:06:08.118940 2015] [dumpio:trace7] [pid 1840] mod_dumpio.c(63): [client ::1:53956] mod_dumpio: dumpio_out (data-HEAP): 1 bytes
[Thu Jan 15 10:06:08.118945 2015] [dumpio:trace7] [pid 1840] mod_dumpio.c(103): [client ::1:53956] mod_dumpio: dumpio_out (data-HEAP): 0
[Thu Jan 15 10:06:08.118952 2015] [dumpio:trace7] [pid 1840] mod_dumpio.c(63): [client ::1:53956] mod_dumpio: dumpio_out (metadata-EOS): 0 bytes

A quick search online threw up dumpio_parser.pl which extracts the requests from log files. However it works for Apache 2.2, not the slightly modified format in Apache 2.4.

So I rewrote the input portion of dumpio_parser.pl.

Then the output was in a marginally useful format, it essentially provided the same content lines in the log. I wanted a format I could throw at curl to retry the request and see if my bug fix had worked.

Fixing that I was still not satisfied. I didn’t like the output structure, it created a collection of tiny files, one for each request. And it ignored the output from the server. AND the structure was weird, first program I have seen using perl -n.

So I rewrote it.

Presenting dumpio2curl.

> tail -n 100 apache.log | perl ../dumpio2curl/dumpio2curl.pl

# Tue Jan 13 10:23:22.729122 2015 - pid 15952 - client 50304
curl -v \
--header "User-agent:" --header "Accept:" \
--request "DELETE" \
--header "Accept-Encoding: identity" \
--header "Content-Length: 0" \
--header "X-Forwarded-For: 127.0.0.1" \
--header "X-Forwarded-Script-Name: " \
--header "X-Forwarded-Scheme: http" \
--header "X-Wsgiproxy-Version: 0.1" \
--header "X-Forwarded-Server: localhost:88" \
--header "Authorization: Hawk ..." \

http://localhost:88/1.5/68893

# Tue Jan 13 10:23:22.752411 2015 - pid 15952 - client 50304
# HTTP/1.1 200 OK
# Date: Mon, 12 Jan 2015 23:23:22 GMT
# Server: Apache/2.4.10 (Debian)
# X-Powered-By: PHP/5.6.4-1
# X-Weave-Timestamp: 1421105002.7521
# X-Last-Modified: 1421105002.73
# Content-Length: 2
# Content-Type: application/json; charset=utf8
# []

Winning at life – wrapping up the light project

The light installation is complete, I put it in last Saturday. That means I’m no longer a failure at life, well not a complete failure just a 50% failure. And if there’s one thing I learnt from my Engineering degree, 50% is a pass, think about that next time you put your life in an Engineer’s hands (flying in a plane, driving a car, walking over a bridge or switching on a power point).

The design worked a treat and the client was happy. I’m not sure what they were expecting but they seemed a little overwhelmed with a custom solution that perfectly fixed all their problems. It makes me wonder what they thought I was doing when I spent over an hour talking to them about what the issues were and what they needed.

Even the installation went fantastically even though there were a few little things I hadn’t fully thought and maybe a vital tool I forgot. Fortunately Keith agreed to come along and brought his ute full of tradie gear so I got away with it. With him taking the lead on the install it even looked like a really nice professional job. I know I can do most of the things an experienced tradesman can do but it’s like the difference between me cooking out of a recipe book and a professional chef, both end products could be described as food but only one bears any resemblance to the picture.

There was a bit of ironic excitement, I was there installing a light designed to prevent the quadraplegic client from burning himself. While at the same time he decided to burn a letter and managed to set his foot on fire, I heard him calling out and looked out the window to see flames climbing up his leg. I managed to stop him burning with only a little damage to myself, mainly due to the plastic fabrics. Unfortunately he ended up with a huge blister covering most of the top of the foot, at least he couldn’t feel it.

The only think I forgot to do was take some pictures. So this is another boring lump of text, here, have a puppy.

Box of a puppies milk, complete with a picture of the puppy it was stolen from

Milk for sadists, stolen from 100% organic puppies

In praise of Bunnings

I wanted a three bulb halogen light fitting, preferably running at 12V. Beyond that cheaper was more important that pretty and – because I wanted to play with the wiring – often better. I priced a few different options:

  • $100 Southside Lighting, Fyshwick
  • $90 Project Lighting, Tuggeranong (With special TADACT discount)
  • $52.70 Bunnings, Fyshwick (240V)

It ended up being a bit of a no brainer. I understand it’s hard for a specialist to compete with a massive chain like Bunnings and I agree with supporting better service. Frankly though I would have gotten better service from an illustrated catalog than I got from Southside Lighting, maybe even some pretty models too.

The dimmers I used are designed for standing lamps and came from Southside Lighting. Mind you the product I was quoted wasn’t in stock, they did however have an almost identical one that was $15 cheaper. Catalog wins again… if I had known about the cheaper one I could have brought the quote down to $200.

To finish this up and bring it back to Bunnings. I also discovered this weekend that it’s 1/3rd of the price to buy a cheap extension cable than to buy wire and a plug. I love mass production.

Wandering further off topic

I think we are going to see the end of most of these specialist shops and I couldn’t be happier. When a decent webpage can tell me everything I need to know with better service, they’re doing something wrong. The costs are just far too high to justify in the modern age, these are large shops and Project Lighting had four staff working when I last went in, for two customers (including me).

How long until someone moves through and eats their 100% profit margin with a local online warehouse. And why aren’t I doing it?

Maybe that could be October’s project.

Goal – Lighting for a quadraplegic man

My next project is a relatively simple lighting installation for a disabled man.

For a while now I have been involved with TADACT (Technical Aid for Disabled, Australian Capital Territory). Disabled people don’t come off assembly lines and have unique variances within their broad disability category. The standard equipment is targeted at the most common issues but this often isn’t quite what they need. TADACT is a group of volunteers that modify or manufacture specialty equipment for disabled people where there isn’t an adequate commercial solution.

Late last year I visited a quadriplegic man and talked about installing a custom light for him. Due to a vehicle accident he has no control below his chest and only crude movement of his arms and one thumb. He is also unable to exert any force with his arms.

He wanted a light he could control from his bed. The bedside lamps he was using were difficult for him to control due to the small switches. He didn’t like sleeping in the dark at night so it had dim while he slept but be bright enough to read by. He also moves his arms around at night and there’s a risk he could seriously burn himself with the bedside lamps, he had actually burnt himself just before I met him and received third degree burns again last week.

Taking those requirements (and a few more) I came up with a proposal. I would mount three halogen bulbs on the wall, one pointed at the bed and two at the roof with each set independently controllable. The wiring will be secured to the wall. There were two options proposed for the switching, using two sliding foot dimmers or jellybean switches and custom control circuitry. The second option was considerably more expensive, the jellybean switches are specially designed for disabled purposes and cost over $100 for a switch with almost the same functionality as a $2 switch at Jaycar. The almost is of course the slight modifications that make them better for disabled people.

Initially they decided that even the cheap option was too expensive. Yesterday TADACT contacted me and said a local charity had provided funding for the foot switch option. So this month’s project is to complete this for TADACT. The aim is to install it by the weekend of the first or second of May, preferably the weekend before.

This probably won’t take all of my time so I’ll use the rest to clean up some other stuff I should have done a while ago, might even do last year’s tax return…

Tax Project March Wrap up

So I cheated a bit and pushed the deadline out a week. While much of the checklist is done the project overall is nowhere near where I hoped it would be. The issue I think was that I assumed that I would be productive for the whole weekend but it turns out I actually do do social stuff and regular maintenance like cleaning or ironing. Looking back I think I committed about half the time I expected to.

Tax website screenshot showing layout

Tax website screenshot

Target features

  • Templating system

    Check. Using TT2 as described earlier. The templating isn’t complete but I was
    always planning on growing it as I went. Sadly it doesn’t properly implement the
    primatives I’m using but It’s good to start with a win, even if you steal it.

  • Basic layout

    Check. To start off with I had a ghastly colour scheme of different shades of red and roughly the layout I ended up with. I read on one of those innumerable website design blogs that colour schemes are important. All the classic mood stuff, red is firey and aggresive, white is serious, boring and reliable. Reliable seems like a good mood for a tax website but black and white is a bit too hard for someone as inept as I to pull off. So I went with a cream background and a yellow/browny secondary colour.

  • Functional data entry

    Check. This works pretty well actually, change an input box and it’s immediately pushed to the server. Not perfect (none of the code is), notably it’s not fully backgrounded so you get a slight delay.

  • Javascript data checking

    Fail. I didn’t get around to trying this.

  • Serverside storage

    Check. I went with MongoDB and it’s going well so far. Ended up having to write a very simple PHP script to expose the DB to the Javascript, primarily authentication wrapping.

  • Basic calculations

    Partial. I have some calculations working but it’s not a reusable structure.

  • Independent domain name

    Fail. The project isn’t far along enough to be useful yet so the domain isn’t important, so I’m marking this as a fail but don’t care. I also couldn’t find a free name I liked.

  • Public source repository

    Check.http://github.com/lod/Australian-Tax-Return

Maybe features

  • Client side encryption

    Fail. Didn’t start on this.

  • User login system

    Check. Pretty easy to implement with the DB layer in place. I don’t have user
    creation working yet but that is actually a fairly small amount of work.

  • Basic personal tax pack covered

    Fail. I’m nowhere near achieving this, it’s crazy how much they cram into a few pages.

  • Client side PDF generation

    Fail. Didn’t start on this.

Templating system

I knew when I started this project (which was a while ago, I kinda cheated on this one) that I didn’t want to write out all the HTML myself, I’m not THAT masochistic. What I wanted to do was basically say “make a text box to write the address in”.

So I started with a generic preprocessor. I’ve use preprocessors such as CPP, TeX and Make so figured I would take a generic preprocessor like M4 and define a few HTML macros… problem solved. Unfortunately it wasn’t that simple and as I added complexity it got harder to keep it all straight, particularly the quoting.

The basic text box wasn’t too bad.

dnl TEXT_Q(name, label, [length])
define(`TEXT_Q’, `indir(LAYOUT, `$1,
    `<label for="$1_text">$2</label>’,
    `<input id="$1_text" name="$1" ifelse($3, `’, `’, `size="$3"’)>’

But when I tried to create optional groupings it started to get messy. This is a snippit from TABULAR_OPTIONAL_ROWS and calling it.

    dnl Build the heading rows
    <tr class="tabular_optional_rows_heading_row">
    pushdef(`LAYOUT’, “TABULAR_OPTIONAL_ROWS_HEADING_LAYOUT”)
    foreach(`XXXXX’, (dquote(shift($@))), `XXXXX’)
    popdef(`LAYOUT’)
    </tr>


TABULAR_OPTIONAL_ROWS(3,
    `TEXT_Q(salary_abn, Payers Australian business number, 11), dnl TODO: Should be Payer’s
    

With TABULAR_OPTIONAL_ROWS I couldn’t figure out how to have a variable number of rows and I couldn’t figure out how to pass it’s options without quoting so I decided to throw in the towel and switch to something else.

I had experimented with Template Toolkit at work using it to inject snippits of Javascript into HTML documents. In the end I stopped using it and had a static HTML page which included a fully generated Javascript file but the short exposure I had impressed me and I tried it here. I found it much cleaner, the named parameters cut out a lot of complexity and the ability to just drop back to Perl if I wanted to do something really hairy was nice.

This is the definition of a text box followed by the calling syntax of a radio box that toggles the visibility of the text box.


<tr class="text" id="[% name %]_row" 
    [%- IF hide -%]
        style="display: none"
    [%- END -%]
>
<td class="question">
    <label for="[% name %]_id">[% text %]</label>
</td>
<td class="answer">
    <input type="text" name="[% name %]" id="[% name %]_id">
</td>
</tr>


[% INCLUDE tax/radio
    name = "surname_changed"
    text = "Has any part of your name changed since completing your last tax return?"
    modify = "previous_surname"
    options = [{name => "Yes", action => "show"}, {name => "No", action => "hide"}]
%]

[% INCLUDE tax/text
    name = "previous_surname"
    text = "Previous surname"
    hide = "true"
%]

The normal syntax for options is simply [“Yes”, “No”], the Perl fallback I mentioned earlier allows me to have more complex syntax when I need it but keeps things simple most of the time. I’ve since discovered there’s a Template Toolkit version three that’s a nice step forward but it’s listed as still in development and in a very Alpha state, it also smelt a bit like it was suffering from classic second project woes. I think I’m playing with enough new stuff not to add experimental Template Toolkit versions to the list.

Goal – Online tax returns

For my first project I am going to make a web based tax return creator for Australian tax returns.

The Australian Tax Office (ATO) produces E-Tax, a program for Windows computers that allows you to produce a tax return and submit it online. Sadly it’s very much Windows only though they suggest exploring running Windows in a virtual machine. They are currently “investigating” supporting other platforms, but they have been doing this for years now and I’ve seen third hand correspondence that suggests the investigation isn’t progressing particularly quickly.

You can also fill in the return by hand on paper, complete with explanatory booklets. In practice the procedure for both is basically the same, the advantage of doing it digitally is that it’s easier to see the calculations and make corrections.

So the goal is to produce a website to help enter tax returns. I’ll base it off the paper tax return and as output produce a PDF that can be printed and posted in directly. The ATO actually accepts printouts from E-Tax so I’m fairly confident that they will accept these.

The secondary goal is to improve my abilities with Javascript. I have toyed around with Javascript a little bit, enough to do small tasks for webpages. In doing this I saw enough to know that Javascript had some fundamental differences but not enough to really understand or work with them. By doing a substantial Javascript project I hope to get over that hurdle and start to see how to properly design with the language.

By April 4th I’ll have a prototype site complete. Not a usable solution, that will probably happen sometime after the new tax returns come out in July. The development site can be seen at http://taxreturn.projects.david.tulloh.id.au/

April 4th features

  • Templating system
  • Basic layout
  • Functional data entry
  • Javascript data checking
  • Serverside storage
  • Basic calculations
  • Independent domain name
  • Public source repository

Maybe features

  • Client side encryption
  • User login system
  • Basic personal tax pack covered
  • Client side PDF generation

Later features

  • General package refactor
  • Complete core tax pack covered
  • Complete supplementary tax pack covered
  • Retrieve prefill information from ATO
  • Electronic submission to ATO
  • Integrate with accounting software
Return top