- The best way to debunk myths
- The ‘pink vs blue’ gender myth
- Why you love to hate some friends
- Why we work without pay
- Scientists dismiss Julie Bishop’s claim to Obama Great Barrier Reef not at risk
- Abbott considered to be a nutter by senior conservatives http://t.co/UJVd8KvRwK #auspol 15:33:04, 2014-11-21
- More broken promises #auspol http://t.co/z2AEQLp3SC 13:19:08, 2014-11-21
- Sydney’s Pitt Street Mall back in world’s top five shopping strips http://t.co/fNs0QBP0g7 11:20:04, 2014-11-21
- Tony Abbott, the ABC and SBS: when election promises become lies http://t.co/ixfqEg2qzw #auspol 09:42:01, 2014-11-21
- @TransportforNSW when are you going to actually act against antisocial behaviour on trains? Police do nothing and announcements are a joke. 06:40:30, 2014-11-21
- @TransportforNSW when do you plan on actually doing something about the smoking addicts on trains and at stations? Announcements are a joke. 06:39:33, 2014-11-21
- The irony behind Julie Bishop’s success at the United Nations Security Council http://t.co/uvyPeG6KzU #auspol 19:32:32, 2014-11-20
- Banking culture breeds dishonesty, study finds http://t.co/O6d3HRLnEs 17:27:01, 2014-11-20
- Gamification of the LMS – A Step Towards Evolution of the Modern LMS http://t.co/iTJRZBrXZu #edutech #edtech 11:20:06, 2014-11-20
- How have UK teacher workloads changed over the past 25 years?
- Banks using social media to assess loan applications
- The co-operatives and mutuals sector makes the same contribution to the Australian economy as the mining sector http://t.co/ajKPOwUhwB 17:27:02, 2014-11-19
- How Australians see themselves in the world: results from over half a million responses to the ABC’s G20 quiz http://t.co/C9pFh9kAA2 13:19:02, 2014-11-19
- The CEO Of A Billion-Dollar Startup Uses This Trick To Feel Successful In Work And Life Every Week http://t.co/U026GPAGQs 17:27:00, 2014-11-18
- China free trade: is there a devil in the detail? http://t.co/XhAQyF9pZY #auspol 15:33:00, 2014-11-18
The camera pan/tilt is now at the front of the top shelf and a robot arm is mounted at the back of the shelf. The temptation is high to move the arm onto a platform that is mounted using threaded rod to the back of Terry. All sorts of fun and games to be had with automated "pick up" and move tasks! Also handy for some folks who no longer enjoy having to pick items up from the ground. The camera pan/tilt can rotate around to see first hand what the arm is doing, so to speak.
The wheel assembly is one area that I'm fairly happy with. The yumo rotary encoder runs 1024 P/R and it is attached using an 8:1 down ratio to give an effective "ideal world" 13 bit precision. Yes, there are HAL effect ICs that give better precision, though they don't look as cool ;) The shaft of the motor is the axle for the wheel. It is handy that the shaft is not right in the centre of the motor because you can rotate the motor to move the wheel through an arc, and thus adjust the large alloy gear until it nicely mates with the brass gear on the rotary encoder.
Lower down near the wheels is a second distance sensor which is good for up to around 80cm distance. The scan rate is much slower than the Kinect however.
Things are getting very interesting now. A BeagleBone Black, many Atmel 328s on board, and an Intel j1900 motherboard to run the SLAM software.
Most of my current arduino projects have had pretty ad-hoc enclosures. You can go a long way with a Jiffy box and a Dremel. Then I bought an embossing label maker to add some text to my boxes (and, OK, everything else — when you have an embossing label maker everything starts to look like an unlabeled thing). My most recent work though has been a pure human interface device. There’s a lot of buttons and switches and displays, and one of my goals for it was to create an enclosure that looked absolutely stunning.
I’ve eventually settled on building backlit panels from laser-etched acrylic, based on a technique I picked up from the MyCockpit forum for simpit builders. Flight sim geek communities are a great resource for learning how to build nice control panels, who knew? I’ve been refining my process to get decent results with a single pass through the laser cutter in my local maker space.Materials
- Acrylic sheet. I use 3mm opal translucent sheet. A square metre cost me $80, and now I have more acrylic than I’ll ever need. At current estimates, including all the failed panels I’ve cut, a half metre is still very generous.
- Spray paint. I’m using a matt grey primer that claimed to be suitable for plastics. It’s been working well so far.
It’ll also need very fine grit sandpaper and masking tape.Prepare the acrylic
I cut my sheets in to 250mm square sections. For each section, remove the backing paper from one side and spend a minute or so sanding the face very fine wet and dry paper to give the paint a surface to adhere to. Then apply three coats of paint. At the end you’ll have finished panels ready to cut. And, if you’re like me, some freshly painted furniture to boot.Design your panel
This part was pretty incredibly frustrating for me. I started out working with LibreCAD, a reasonably full-featured 2D CAD drawing program. That made drawing precise outlines and holes for cutting a breeze, but it’s not particularly good at working with text. I wanted real truetype fonts on my panels, and getting LibreCAD to import font faces in a form it can work with ended up beyond me.
My current workflow is to draw text that I want added in Inkscape. Then convert the text to paths, and export it as a DXF file. That file can then be imported to LibreCAD as a block and placed in my etching layer. The software driving my laser cutter doesn’t like the DXF generated by LibreCAD though, so there’s another step importing the final file in to Inkscape to collapse layers, remove dimensions and save a file that can be downloaded to the laser.
That… mostly works. Sometimes the text paths LibreCAD saves just don’t generate easily filled objects and the laser gets confused and it all goes pearshaped. Right now I’m still loading the text blocks in to LibreCAD but only using them as a visual guide. When doing final prep for cutting I still replace the text on the panel in Inkscape, to ensure a happy etching experience.Cut the panel
I did a dummy cut with holes and a combination of angular and round lettering in all of the sizes I needed. I was using a couple of different sized fonts, and it took me a little while tweaking settings to get a result that looked sharp across the board.
When cutting panels, I order the job so that all of the engraving is first, and the cut for the outline is last. Even though the cutting bed is stationary, warps in the perspex can lead to the panel shifting slightly after the outline is cut.
I learned the hard way that getting excited and removing the paper from the back of the perspex at this point is not a great idea.Final painting
The panel is finished, but now has raw edges that look ugly and leak light when it’s backlit. Apply masking tape to the front side, along the edges (leaving it overhang but not stuck to the side of the panel), and covering holes. Then place it face down and apply another couple of coats of paint along the edges.
I’m still working on getting this part right. Previous attempts without the masking tape led to paint bleeding under the edge, leading to visible paint drops or the newspaper I had under the panel sticking to the face. Initial tests with the tape look pretty good though.
Once the paint has dried, the backing paper for the panel can be removed and components mounted.Next steps
I’m still working on the best way to backlight these panels. Simply lighting up the inside of the enclosure looks good, but seems a bit bland to my mind. I want to start experimenting with with individually lit panels, possibly by countersinking LEDs in to the back of the panel. Mostly because I’m keen on flickering panels, and changing panel backlight colour. But pretty pleased with the overall look so far.
You may have heard that Uber has been under a bit of fire lately for its desires to hire private investigators to dig up “dirt” on journalists who are critical of Uber. From using users’ ride data for party entertainment, putting the assistance dogs of blind passengers in the trunk, adding a surcharge to reduce the number of dodgy drivers, or even booking rides with competitors and then cancelling, or using the ride to try and convince the driver to change teams, it’s pretty clear that Uber is a pretty good example of how companies are inherently sociopathic.
However, most of those examples are internal stupidities that happened to be made public. It’s a very rare company that doesn’t do all sorts of shady things, on the assumption that the world will never find out about them. Uber goes quite a bit further, though, and is so out-of-touch with the world that it blogs about analysing people’s sexual activity for amusement.
You’ll note that if you follow the above link, it sends you to the Wayback Machine, and not Uber’s own site. That’s because the original page has recently turned into a 404. Why? Probably because someone at Uber realised that bragging about how Uber employees can amuse themselves by perving on your one night stands might not be a great idea. That still leaves the question open of what sort of a corporate culture makes anyone ever think that inspecting user data for amusement would be a good thing, let alone publicising it? It’s horrific.
Thankfully, despite Uber’s fairly transparent attempt at whitewashing (“clearwashing”?), the good ol’ Wayback Machine helps us to remember what really went on. It would be amusing if Uber tried to pressure the Internet Archive to remove their copies of this blog post (don’t bother, Uber; I’ve got a “Save As” button and I’m not afraid to use it).
In any event, I’ve never used Uber (not that I’ve got one-night stands to analyse, anyway), and I’ll certainly not be patronising them in the future. If you’re not keen on companies amusing themselves with your private data, I suggest you might consider doing the same.
We did a rather huge amount of pedestrian travel today.
I had the car booked in for a service, so after Sarah dropped Zoe off, and she'd watched a bit of TV, we drove over to Newstead to drop the car off.
I'd packed Zoe's scooter in the boot, and once we left the car dealership, we headed over to the Teneriffe cross-river ferry, which is currently conveniently depositing passengers at Hawthorne. Even more conveniently, the ferry was waiting for us as we arrived.
I'd booked haircuts for us at 10am, and we comfortably made it to the hairdresser with about 10 minutes to spare.
After that, it was time to head over to Tumble Tastics, which was quite close to the hairdresser's. We ended up getting there about 20 minutes early, but that was fine.
After Tumble Tastics, we headed home for lunch, and the car was ready to be picked up, so after a brief rest, we headed out again.
This time, Zoe said she wanted to walk, rather than ride the scooter, so we headed out on foot, reversing our trip.
We were in no particular hurry, so we stopped for a little play in a park over at Newstead that we'd discovered in the morning, and then picked up the car. It was a very hot day, so it was nice to get out of the heat.
On the way home, I discovered that the Hawthorne Markets were on. I had some paperwork to drop off to Zoe's school, so after I filled that out, we walked over to her school, dropped it off, and then walked back to the Hawthorne Markets.
I bumped into one of my fellow Thermomix Consultants, Katia, and got introduced to one of her friends, who it turns out, was at the very first trial Tumble Tastics class we went to. She also had a daughter named Zoe. So my Zoe knocked around with this Zoe and Katia's kids, and we grabbed some dinner there. It was a nice night out.
I love the feeling of community that I have now. I don't think I've had this feeling of being so well established in a place, within such a walking distance, ever before. I am truly grateful for living in such a wonderful neighbourhood and community.
Tutorial presentation of GnuCash given to the CPA Young Professionals group at Victoria University, 19th November, 2014
Earlier this year I was braced for a hard and personally gruelling year. What I didn't expect however, was that after my return to Sydney that an old friend would reveal how she truly felt about me. It was a brave moment for her but fortunately for us both I'd harboured the same feelings toward her.
How was I to know,
That you would rise,
Like a burning angel in my eyes
As expected, this year has certainly lived up to and exceeded those difficult expectations to be undoubtedly the most challenging year of my life. However I've been fortunate to balance that by now having the most amazing woman by my side.
Fiona's love, support, advice and humour has been an unprecedented experience in my life. I've found a lover and a partner in crime with whom I've formed an indomitable team as we've had each others backs through some rather unbelievable trials.
Then we kissed.
I asked Fiona what she wished for but was politely told it was a secret.
I said I would tell her what I wished for, then dropped to one knee and paused for long enough to read the unmistakeable expression of "What are you doing? Get up you idiot!" written across Fiona's face before I produced an engagement ring and asked Fiona to marry me.
Fiona said "yes!".
Before too long,
We'll be together and no one will tear us apart
Before too long,
The words will be spoken I know all the action by heart
Earlier in the night I'd slipped an engagement pendant into Fiona's pocket which she discovered and put around my neck before we celebrated with a meal opposite Notre Dame cathedral.
I still shake my head in disbelief at how two such independent people have found themselves in a place where they cannot imagine their life without the other. Yet that's where we are.
Our life going forward is going to complicated and challenging, however there will be an awful lot of love and we'll have each other's backs all the way.
Thank you Fiona, for bringing such love and light into my life.
I've found the one I've waited for
All this time I've loved you
And never known your face
All this time I've missed you
And searched this human race
Here is true peace
Here my heart knows calm
Safe in your soul
Bathed in your sighs
Want to stay right here
Until the end of time
Sometimes, dreams do come true.
I met Kelley at the first P&C meeting I went to, and she immediately took me under her wing, and later gave me a bit of a tour of the school, and some tips on Prep teachers and whatnot. I then proceeded to run into her nearly every time I went near the school.
She has a daughter, Chloe, starting Prep next year, and an older daughter in Year 3, and she's fairly well entrenched in the school community.
I thought it'd be good for Zoe to get to know Chloe a bit better, so she's one more person she knows at the start of school next year, so we had a play date at her house.
The girls seem to get along well, and Kelley's really nice. We have similar views in a lot of areas, and her husband works in IT security, so I think this could be the beginning of a beautiful friendship.
After lunch, due to the heat, we decided to bike down to the Colmslie Pool together. Kelley has a bike adapter trailer thing that couples a normal kid's bike to the back of hers, with the front wheel slightly elevated.
Zoe made me very proud at the pool, doing a kneeling dive into the water and swimming half the length of the indoor pool. Her swimming continues to progress in leaps and bounds.
We had a good time at the pool, and then biked back to school so Kelley could pick up her other daughter. We just hung out at the pool a bit early for swim class, and then biked home afterwards.
Sarah picked up Zoe, and then I headed out for the second Thermomix cooking class I've had to help out with. This one was a bit more fun for me because we had a great number of consultants on hand to share the workload, and I wasn't on washing up duties this time.
Andrew Pollock: [life] Day 294: Babysitting play date, final Prep introductory day and an afternoon play date
Wednesday was yet another full day. It's no wonder I'm feeling so tired, and have a backlog of blogging.
Mel had asked me if I could look after Matthew and Olivia for a couple of hours in the morning. Matthew and Zoe get along fabulously, and the time worked well, so I was happy to help out.
Zoe seems to be going through a bit of a nightmare phase at the moment. I'm sure the heat isn't helping. Zoe woke up with a nightmare about Smudge dying at 2am. Her room was 27°C at the time. 2am seems to be the nightmare time. I got her resettled within about half an hour. I really think I'm going to have to look into air-conditioning her bedroom sooner rather than later.
So I was a bit of a zombie when Mel dropped the kids off at 9am. Fortunately Matthew and Zoe just went off and played together, and Olivia was happy to just hang out with me. She's such a sweet little 2 and a half year old. She kept calling me "Lucy's Dad" or "Sophie's Dad" or something not quite right. It was very cute.
I improvised a bit on the hamburger buns, using a mix of baker's flour and whole-wheat flour and buckwheat. The result still turned out quite satisfactory.
After lunch, Zoe and I headed over to school for the final Prep introductory afternoon. Zoe wanted to walk today. It was a "best of" day for the fine motor skills activities, and Zoe was rather chuffed to get picked as a leader for the gross motor skills activities.
One of the Prep teachers (the one I hope Zoe gets next year) who had remarked on Zoe's timidity on the first day remarked today about what a different girl she was now.
Walking home, there were a ton of ibis on the football field we walk past, so Zoe had a great time running across the field chasing them all. She's getting a lot better about walking longer distances now.
Eva and Layla came over for a play with Tanya in tow after school, and the girls had a fun afternoon. A massive storm rolled in, and so I went and picked up Anshu from the ferry terminal. Once the storm abated, Tanya left with the girls, and then Sarah arrived to pick up Zoe.
Anshu tagged along with me to the P&C meeting. Not the most fun "date night", but I was glad to have another opportunity to attend a P&C meeting before the end of the school year.
Stage one is to turn my modem into just an ADSL endpoint, removing any DHCP, NAT, and PPPoE termination from the device so that it has a single function.
Fortunately my nb604n ADSL modem has a nice easy-to-follow guide for taking it into bridge mode: http://support.netcommwireless.com/sm/videos/nb604n/nb604n-bridge-mode-setup-guide
Now onto greater things!
Let's say you've got an OpenStack build you're getting ready to go live with. Assume also that you're performing some, ahem, robustness testing to see what breaks and prevent as many surprises as possible prior to going into production. OpenStack controller servers are being rebooted all over the shop and during this background chaos, punters are still trying to launch instances with vary degrees of success.
Once everything has settled down, you may find that some lucky punters have deleted the unsuccessful instances but the volumes have been left behind. This isn't initially obvious from the cinder CLI without cross checking with nova:$ cinder list +--------------------------------------+-----------+--------------+------+-------------+-- --------+--------------------------------------+ | ID | Status | Display Name | Size | Volume Type | B ootable | Attached to | +--------------------------------------+-----------+--------------+------+-------------+-- --------+--------------------------------------+ | 3e56985c-541c-4bdd-b437-16b3d96e9932 | in-use | | 3 | block | true | 6e06aa0f-efa7-4730-86df-b32b47e53316 | +--------------------------------------+-----------+--------------+------+-------------+-- --------+--------------------------------------+ $ nova show 6e06aa0f-efa7-4730-86df-b32b47e53316 ERROR (CommandError): No server with a name or ID of '6e06aa0f-efa7-4730-86df-b32b47e53316' exists.
It will manifest itself in Horizon like this:
Now trying to delete this volume is going to fail:$ cinder delete 52aa706df17d-4599-948c-87ae46d945b2 Delete for volume 52aa706d-f17d-4599-948c-87ae46d945b2 failed: Invalid volume: Volume status must be available or error, but current status is: creating (HTTP 400) (Request-ID: req-f45671de-ed43-401c-b818-68e2a9e7d6cb) ERROR: Unable to delete any of the specified volumes.
As will an attempt to detach it from the non-existent instance:$ nova volume-detach 6e06aa0f-efa7-4730-86df-b32b47e53316 093f32f6-66ea-451b-bba6-7ea8604e02c6 ERROR (CommandError): No server with a name or ID of '6e06aa0f-efa7-4730-86df-b32b47e53316' exists.
and no, force-delete does not work either. Here's my approach for resiolving this problem:
SSH onto your MariaDB server for OpenStack and open MariaDB to the cinder database:$ mysql cinder
Unset the attachment in the volumes table by repeating the below command for each volume that requires detaching from a non-existent instance:MariaDB [cinder]> UPDATE volumes SET attach_status='detached', instance_uuid=NULL, \ attach_time=NULL, status="available" WHERE id='3e56985c-541c-4bdd-b437-16b3d96e9932'; Query OK, 1 row affected (0.01 sec) Rows matched: 1 Changed: 1 Warnings: 0
Back on your OpenStack client workstations you should now be able to delete the offending volumes:$ cinder delete 3e56985c-541c-4bdd-b437-16b3d96e9932
Happy housekeeping :-)
AUCKLAND, New Zealand – Friday 21st November 2014 – linux.conf.au 2015 Organisers are proud to announce our funding programme!
InternetNZ Diversity Programme
LCA 2015 and InternetNZ are proud to support diversity. The InternetNZ Diversity Programme is one way we ensure that LCA 2015 continues to be an open and welcoming conference for everyone. Together with InternetNZ this program has been created to assist under-represented delegates who contribute to the Open Source community but, without financial assistance, would not be able to attend LCA 2015.
For more information please see our funding registration page.
linux.conf.au is one of the world's best conferences for free and open source software! The coming linux.conf.au; LCA 2015 will be held at the University of Auckland, New Zealand from Monday 12 January to Saturday 16 January 2015. LCA 2015 will be fun, informal and seriously technical, bringing together Free and Open Source developers, users and community champions from around the world. LCA 2015 is the third time linux.conf.au has been held in New Zealand. The first was in Dunedin in 2006 and the second was in Wellington in 2010.
For more information please visit our websiteAbout Linux Australia
Linux Australia is the peak body for Linux User Groups (LUGs) around Australia, and as such represents approximately 5000 Australian Linux users and developers. Linux Australia facilitates the organisation of this international Free Software conference in a different Australasian city each year.
For more information see: http://www.linux.org.au/Emperor Penguin Sponsors
LCA 2015 is proud to acknowledge the support of our Emperor Penguin Sponsors, Catalyst IT, HP and IBM, and our diversity sponsor Internet NZ.
For more information about our sponsors click below -
I probably don’t have to tell you that pricing is slippery business. It requires a lot of perspective, experience, and luck (read: trial and error). There are a number of ways we can correlate monetary value to what we do, and each has its pros and cons.
It may seem at first glance that pricing models begin and end in the proposal phase of a project. That pricing is simply a business negotiation. But whether we’re talking about design, development, or business methodologies, our processes affect our motivations, and influence outcomes—often throughout the entire project. We’ll be examining both client and agency motivations in our comparisons of pricing models, so you can judge whether those motivations will help you make better work with your clients.
All of these pricing systems operate with the same set of variables: price, time, and scope. In some systems, such as hourly pricing, variables are directly dependent on each other (e.g. if I work an hour, I get paid my hourly rate, and deliver an hour’s worth of work). In others, like fixed price and value pricing, the relationships can be nonlinear (eg. I am paid a sum of money to achieve some set of results, regardless of how much time I spend doing it).
These dependencies tend to define each system’s inherent risk and potential for profit. And all the differences can get pretty bewildering. One person’s experience is hardly enough to understand them all well, so I’ve enlisted some friends from web agencies of various sizes to chime in about how they make things work.
As with most things in life, there’s no perfect solution. But if you want to get paid, you have to do something! Enough gum-flapping, let’s take a look at some of the different ways that people are pricing web projects.Fixed price
With fixed-price projects, you and the client agree up front on a cost for the entirety of the project. Many folks arrive at this number by estimating how many hours they think it would take them to do the project, and multiplying that by an hourly rate. That cost will be what the client pays, regardless of actual hours spent.Client motivation
When the price of a project is fixed, the variable tends to become scope of work. This encourages clients to push for the maximum deliverables they can get for that cost. This can be addressed to a degree by agreeing on a time limit for the project, which keeps requests and scope changes from occurring in perpetuity.Agency motivation
On the agency side, your motivation is to be as efficient as possible to maximize the results while reducing time spent. Less time + more money = greater profit.Pros
Because you know exactly how much money is coming in, revenue is fairly predictable. And since revenue isn’t tied to the time you spend, profit is potentially greater than with a time-based model—especially when the cost is high and the timeline is short.Cons
The same factors that provide the possibility of greater profit create the potential for greater loss. Defining exactly what a client will receive for their money becomes a high priority—and defining things well can be harder than it sounds.
Eileen Webb, Director of Strategy and Livestock at webmeadow, provides some insight into how she defines scope with her clients:
I like to define the project boundaries clearly by having a “What’s Not Included” section. This may be a listing of services you don’t offer, like SEO or hosting. It’s also a place to list features that you and the client discussed but decided against for this budget or phase. Defining what falls outside the scope is a good way to help everyone agree on what falls in it.
Now, getting to this definition in the first place is—I probably don’t need to tell you—hard work. And hard work is something you should get paid for. Starting out with an initial discovery engagement is something nearly any project can benefit from, but for fixed-price projects it can be invaluable.
Resourcing for a fixed-price project can also be hard to estimate, since scope is not necessarily easy to equate to effort and person-hours needed.
But the primary difficulty with fixed price may be the innate conflict between a client’s motivation to ask for more, and an agency’s motivation to provide less. For a fixed-price project to be successful, this must be addressed clearly from the beginning. Remember that scope discussions are just that: discussions. More isn’t always better, and it’s our job to help keep everyone on the project focused on successful outcomes, not just greater quantities of deliverables.Hourly
At its core, hourly pricing is pretty simple: you work an hour, you get paid for an hour. Hourly, like all time-based pricing, suggests that what’s being paid for is less a product than a service. You’re being paid for your time and expertise, rather than a particular deliverable. Rob Harr, Technical Director at Sparkbox, explains how hourly projects tend to work for them:
Since everything we do is hourly, the end of the job is when the client says we are done. This sometimes happens when there is still approved budget left, and other times when the budget is completely gone. Often times our clients come back for additional SOW’s to continue the work on the original project.Client motivation
With hourly, clients are encouraged only to ask for work when that work appears to be worth the hourly cost. Since there’s no package deal, for each feature request or task they can ask themselves, “Is this worth spending my money on, or would I rather save it for something else?”
Project delays are not a financial concern for the client, as no money is spent during this time.Agency motivation
The more an agency works, the more they get paid. In its purest form, this leads to the agency simply wanting to work as much as possible. This can be limited by a few factors, including a budget cap, or not-to-exceed, on the project.
Project delays are a major concern for the agency, as they’ll lose revenue during these periods.Pros
Every hour a team member spends is paid for, so the risk of this model is very low. If a company is struggling with profitability, I’ve personally found that this is a great way to get back on track.Cons
Unlike fixed-price models, you can only earn as much as you can work. This means that profit maxes out fairly quickly, and can only be increased by increasing hourly rate (which can only go as high as the market will bear), or expanding the team size.
Because the agency is only paid when they work, this also means a big imbalance in how project delays affect both sides. Thus clients that aren’t in a big hurry to complete work—or have inefficient decision-making structures—may not worry about long delays that leave the agency financially vulnerable. This can be addressed somewhat by having conditions about what happens during delays (the client pays some sort of fee, or the project becomes disproportionately delayed so the agency can take on new work to fill the gap in their schedule). Even with these measures, however, delays will cause some kind of financial loss to the agency.Weekly or monthly
Though similar to hourly in many ways, charging by weekly or monthly blocks has some distinct differences. With these models, the cost assumes that people work a certain number of hours per week or month, and the client is billed for the equivalent number of hours, regardless of whether or not actual hours spent were more or less than assumed.
Trent Walton, founder of Paravel, explains why they like this approach:
Most of our clients operate in two-week or month-long sprints. For many projects, we’ll quote chunks of weeks or months to match. This alignment seems to make sense for both parties, and makes estimating scope and cost much easier.Client motivation
Clients tend to want the agency to work as much as possible during the time period to get the maximum amount of work or value. This can be curbed by having a maximum number of hours per week that will be spent, or understanding limitations like no nights or weekends. Related to this, it’s in the client’s best interest to not let project work succumb to delays.Agency motivation
On the agency side, we’re encouraged to be as efficient as possible to maximize results each week, while spending fewer hours accomplishing those tasks. As long as the results are comparable to what’s expected, this motivation tends not to result in conflict.
At Bearded we’ve found that with weekly projects we spend, on average, the number of hours we bill for. Some weeks a little more, some a little less. But it seems to all come out in the wash.Pros
Knowing that a time period is booked and paid for makes resourcing simple, and keeps the financial risk very low.
Because the agency is paid the same amount every week or month, clients will tend to do whatever’s necessary to avoid any delays that are in their control. This completely removes the risk of the agency losing money when projects are held up, but also requires the agency to use a process that discourages delays. For instance, at Bearded, we’ve moved to a process that uses smaller, more frequent deliverables, so we can continue working while awaiting client feedback.Cons
Similar to hourly, the agency’s profit is capped at the weekly or monthly rate they charge. To make more revenue they’ll need to charge more for the same amount of work, or hire more people.Value
Value pricing is a method wherein the cost of the project is derived from the client’s perception of the value of the work. That cost may be a fixed price, or it may be a price that factors in payment based on the effect the work has (something closer to a royalty system).
Dan Mall, founder of SuperFriendly, explains his take on value pricing using a fixed cost:
I use a combination of value pricing with a little of cost-plus. I try my best to search for and talk about value before we get to dollar amounts. When my customers are able to make a fully informed price/value assessment, the need to justify prices has already been done, so I rarely have to defend my prices.
Dan’s approach suggests that if a company stands to gain, say, millions of dollars from the work you do, then it doesn’t make sense for you to merely charge a few thousand. The value of your work to the company needs to be factored in, resulting in a proportionally larger fixed cost.
Other takes on value pricing tie the cost of the project directly to the results of the work. This can be assessed using whatever metrics you agree on, such as changes in revenue, site traffic, or user acquisitions. This sort of value pricing lends itself to being used as an add-on to other systems; it could augment an hourly agreement just as easily as a fixed price one.
It’s worth noting that none of the folks I talked to for this article have done this in practice, but the general approach is outlined in Jason Blumer’s article Pricing Strategy for Creatives.Client motivation
This depends primarily on the other system that you’re using in conjunction with value pricing. However, if a client recognizes the tangible gain they expect from the outset, this will tend to focus their attention on how the work will influence those outcomes.Agency motivation
When payment is tied to metrics, the focus for the agency will be on work that they believe will positively affect those metrics. Like client motivations, an agency’s other motivations tend to be the same as the other system this is based on (fixed, hourly, weekly, or monthly).Pros
Because of the nonlinear relationship between labor and revenue, this approach has the highest potential for profit. And as long as the base pricing is reasonable, it can also have very low financial risk.Cons
Since value pricing is potentially connected to things outside your control, it’s also potentially complicated and unpredictable. If revenue is based on future performance metrics, then accurately determining what you’re owed requires knowledge of those metrics, and likely a little legwork on your part. There’s also a certain amount of risk in delaying that payment until a future date, and having its existence in question altogether. As long as the base pricing you use is enough to sustain the business on its own, that risk seems less worrisome.
With value pricing, there’s also the need to assess the value of the work before agreeing on a price. Which is why—as with fixed-price projects—value-pricing projects often work well as a followup to an initial discovery engagement.
Patty Toland and Todd Parker, partners and co-founders of Filament Group, explain their approach to an initial engagement:
Most of the projects we engage in with clients involve fairly large-scale system design, much of which will be defined in detail over months. We provide high-level overall estimates of effort, time and cost based on our prior project work so they can get a sense of the overall potential commitment they’re looking at.
If those estimates work with their goals, schedule and budget, we then agree to an initial engagement to set a direction, establish our working relationship, and create some tangible deliverables.
With that initial engagement, we estimate the total amount of time in person-days we plan to spend to get to that (final) deliverable, and calculate the cost based on a standard hourly rate.It depends
So what’s the best approach for you? Blimey, it depends! I’ve talked with many very smart, successful people that use very different takes on various approaches. Each approach has its benefits and its traps to watch for, and each seems to work better or worse for people depending on their personalities, predilections, and other working processes.
Ultimately it’s up to you. Your hunches, experience, and probably a little experimentation will help you decide which method makes the most sense for you, your team, and your clients. But don’t be surprised if once you find a good system, you end up changing it down the road. As a business grows and evolves, the systems that work for it can, too.
Now that we’ve talked about pricing methods, we’re ready to move on to something everyone’s really bad at: estimating! Stay tuned for that in part three of this series.
Unless you’ve been living under a firewalled rock, you know that IPv6 is coming. There’s also a good chance that you’ve heard that IPv6 doesn’t have NAT. Or, if you pay close attention to the minutiae of IPv6 development, you’ve heard that IPv6 does have NAT, but you don’t have to (and shouldn’t) use it.
So let’s say we’ll skip NAT for IPv6. Fair enough. However, let’s say you have this use case:
A bunch of containers that need Internet access…
That are running in a VM…
On your laptop…
Behind your home router!
For IPv4, you’d just layer on the NAT, right? While SIP and IPsec might have kittens trying to work through three layers of NAT, for most things it’ll Just Work.
In the Grand Future of IPv6, without NAT, how the hell do you make that happen? The answer is “Prefix Delegation”, which allows routers to “delegate” management of a chunk of address space to downstream routers, and allow those downstream routers to, in turn, delegate pieces of that chunk to downstream routers.
In the case of our not-so-hypothetical containers-in-VM-on-laptop-at-home scenario, it would look like this:
My “border router” (a DNS-323 running Debian) asks my ISP for a delegated prefix, using DHCPv6. The ISP delegates a /561. One /64 out of that is allocated to the network directly attached to the internal interface, and the rest goes into “the pool”, as /60 blocks (so I’ve got 15 of them to delegate, if required).
My laptop gets an address on the LAN between itself and the DNS-323 via stateless auto-addressing (“SLAAC”). It also uses DHCPv6 to request one of the /60 blocks from the DNS-323. The laptop puts one /64 from that block as the address space for the “virtual LAN” (actually a Linux bridge) that connects the laptop to all my VMs, and puts the other 15 /64 blocks into a pool for delegation.
The VM that will be running the set of containers under test gets an address on the “all VMs virtual LAN” via SLAAC, and then requests a delegated /64 to use for the “all containers virtual LAN” (another bridge, this one running on the VM itself) that the containers will each connect to themselves.
Now, almost all of this Just Works. The current releases of ISC DHCP support prefix delegation just fine, and a bit of shell script plumbing between the client and server seals the deal – the client needs to rewrite the server’s config file to tell it the netblock from which it can delegate.
Except for one teensy, tiny problem – routing. When the DHCP server delegates a netblock to a particular machine, the routing table needs to get updated so that packets going to that netblock actually get sent to the machine the netblock was delegated to. Without that, traffic destined for the containers (or the VM) won’t actually make it to its destination, and a one-way Internet connection isn’t a whole lot of use.
I cannot understand why this problem hasn’t been tripped over before. It’s absolutely fundamental to the correct operation of the delegation system. Some people advocate running a dynamic routing protocol, but that’s a sledgehammer to crack a nut if ever I saw one.
Actually, I know this problem has been tripped over before, by OpenWrt. Their solution, however, was to use a PHP script to scan logfiles and add routes. Suffice it to say, that wasn’t an option I was keen on exploring.
Instead, I decided to patch ISC DHCP so that the server can run an external script to add the necessary routes, and perhaps modify firewall rules – and also to reverse the process when the delegation is released (or expired). If anyone else wants to play around with it, I’ve put it up on Github. I don’t make any promises that it’s the right way to do it, necessarily, but it works, and the script I’ve added in contrib/prefix-delegation-routing.rb shows how it can be used to good effect. By the way, if anyone knows how pull requests work over at ISC, drop me a line. From the look of their website, they don’t appear to accept (or at least encourage) external contributions.
So, that’s one small patch for DHCP, one giant leap for my home network.
The standard recommendation is for ISPs to delegate each end-user customer a /48 (giving 65,536 /64 networks); my ISP is being a little conservative in “only” giving me 256 /64s. It works fine for my purposes, but if you’re an ISP getting set for deploying IPv6, make life easy on your customers and give them a /48. ↩
If you’re someone who doesn’t like Debian’s policy of automatically starting on install (or its heinous cousin, the RUN or ENABLE variable in /etc/default/<service>), then running an init system other than systemd should work out nicely.
DrupalSouth is the biggest Drupal gathering in the Antipodes.
We'll be at the Melbourne Convention and Exhibition Centre over three days in early March 2015. March 5-7 to be exact.
Find out more at the website
The call for sessions is open, and we're trying hard to get the word out wide and far, to whisper in new ears, and encourage people of all sorts to share their ideas for sessions so we can create a truly wonderful, inspiring, engaging and fun program for this conference!
For those who may not know, Drupal is an open source content management system. It's used by people and organisations all around the world, for all sorts of web sites. It's also being used as back end application framework for mobile apps! It's amazing what Drupal can do.
Drupal events are the heart and soul of the community that makes Drupal. Bringing people together drives the project forward, and forges friendships.
But we're also part of the wider web. So we want to hear from all sorts of web specialists, not just Drupalists.
Please, submit a session, or simply help us spread the word. The deadline is looming and won't be extended. Get that proposal in by 30 November 2014. https://melbourne2015.drupal.org.au/program/session-submission