Show HN: Sorting Two Metric Tons of Lego - <AUTHOR> https://jacquesmattheij.com/sorting-two-metric-tons-of-lego <comment><USER2> I work for a mill that cleans and sorts grains and beans (taking the rocks out, stems out, etc.), and it's fascinating to see the parallel invention of something really similar! We have a bunch of different steps:

1) Air is blown through the product and any dust is taken out. 2) The product is run through a bunch of screens that take out anything too big or too small. 3) The product is put through a gravity separator to separate based on mass. 4) Finally, the product is put through an optical sorter ([https://www.youtube.com/watch?v=O0gWUeqzk_o](https://www.youtube.com/watch?v=O0gWUeqzk_o)) which uses blasts of air to push out unwanted materials from a stream of falling product.

I'm sure you could use the same process for Legos. Not sure about how to distinguish between branded and unbranded Legos though.

<comment><AUTHOR> (4), That's a very neat machine!

What is the %age by weight of 'trash' versus 'good stuff' for such a sorter?

I do use screens for various pre-sorting stages, not shown in the article. The sorter is only good for parts up to 40 mm and anything that isn't a wheel or round so it will roll away while being imaged.

That's by far the bulk though so for me if it does that part well it is already more than worth it.

Branded/unbranded: spectrum is different (far more different than you would say by looking at it with the naked eye), weight does not match for the part (though this can be very close with really good fakes), logo on the studs is different.

I've been thinking about doing that gravity thing, but a bit more fancy, rather than just a binary sort to shoot parts in several directions, an alternative is a spiral slide under a steep angle where parts are fed in at the top and ejected when they reach the right bin.

That's a lot more complicated to make than what I have right now mechanically and also the time available for a classification operation would be much shorter, but it would allow for a much larger number of output bins without taking up a whole lot of space. So maybe a next generation, if I still need it (this one is going through piles of lego now).

<comment><USER3> Cool project. How many bins are you organizing your Lego into? Or was this more just a proof of concept thing?

Plans to launch a Lego sorting service? ;-)

<comment><AUTHOR> > How many bins are you organizing your Lego into?

Seven, so it takes multiple passes before it is done.

> Or was this more just a proof of concept thing?

Tough question :) No, it's for real it really has to sort through the 2000 kg, but if it needs to be beefed up or changed to get to the end then I'll do it. The next step 'up' would be a machine designed from scratch incorporating all the lessons learned with essentially unchanged software. There are still some limitations that could be addressed but then you'd lose the training set and you'd have to start all over from scratch. That might be worth it to get the last 1% error or so, so if this ever becomes 'real' then I'd have to do that. I highly doubt it will get to that though. time will tell.

> Plans to launch a Lego sorting service? ;-)

Not at present, though you're not the first person to think of that, parents with kids are suggesting I should make it mobile to visit people at their homes for $x / shot :) Still, that will only happen if I really have nothing better to do, which means likely never.

<comment><USER3> > Still, that will only happen if I really have nothing better to do, which > means likely never.

Don't sell yourself short. You built the thing, after all. Could be some fun road trips with, I'm sure, gracious hosts to entertain you during Lego sort. That could be a whole retirement life right there ! ;-)

<comment><AUTHOR> Oh if you put it that way :)

<comment><USER4> Remember to charge by the 100Kg sorted rather than the days on site :-)

</comment></comment></comment></comment></comment></comment></comment><comment><USER5> Thanks for sharing such a cool build and helping keep alive a hope of mine. I dream of a day I have enough time/capital to build/buy a Lego sorter, a robotic Lego brick separator (perhaps using high-resolution ultrasound/radar to detect where to insert the separator and where to push), pair that with an automated storage system in a subterranean vertical tunnel with robot arms similar to a robotic tape library keeping track of all detected parts and minifigs according to BrickLink categorization. Let the system keep it all organized (for example, bin overflows into multiple bins are automatically tracked as a single part and color combination), and I even have the choice to have it dump a random assortment into a big laundry-size bin, and build like a kid again, yet have it clean up after itself once I'm done.

<comment><USER3> I think you two need to make a trip to a Lego factory together. And film it. For science.

</comment></comment><comment><USER6> There are a few businesses that buy (unsorted, bulk) legos and then sell sets or sorted bulk legos.

Here's a fun one in Taipei: [http://www.brickfinder.net/2017/03/22/taiwan- lego-store-visi...](http://www.brickfinder.net/2017/03/22/taiwan-lego-store- visit-bidbuy4utw/)

(They also custom print on the surface of the parts; I saw an awesome Trump Lego man there complete with red hat.)

I bet these people would love to talk about this machine!

<comment><USER7> There are a lot. There are two main specialized marketplaces, Bricklink and Brickowl, with hundreds of sellers (most of them operate on both sites). Most sellers also have a brick and mortar shop, others only operate online.

</comment></comment><comment><USER8> How do you deal with parts that are stuck together? I actually noticed one in your demo video, and was curious. This seems like it would be very difficult to classify, even in a sense to sort them into a "take these apart" bin.

This is really amazing, awesome work!

<comment><AUTHOR> They have a category all by themselves, get taken apart after the first run and then simply made to go through again in the next batch. The neural net is surprisingly good at classifying 'mess' as a category!

<comment><USER9> That's a nice solution. I'm reminded of a short video I watched on the Lego factory. One segment of it discussed the machine that put the minifigs' heads on their bodies. There's a big hopper of bodies that get drawn up onto a belt and then a camera makes sure each body is facing the right direction before putting the head on.

What do they do with bodies that are facing backwards? Is there a little side channel that flips them around? Nope, they just get tossed back into the hopper to try again. It's effectively random which way they'll be facing when they get picked up, so they'll eventually get through.

I thought that was a nice illustration of keeping things simple and taking advantage of processes you already have, and seems similar in spirit to this.

<comment><AUTHOR> That's exactly what I love about this whole project. It's an endless series of seemingly simple puzzles. Then you start solving them and they turn out to be much more complicated than you thought. Until you hit the solution and then it's simple again.

<comment><USER9> Sounds about right. Thanks for sharing it!

</comment></comment></comment></comment></comment><comment><USER10> Incredible Machine!

Question: Were you able to utilise any data about Lego parts from Lego's own catalogues (current and historal) or technical specifications? It sounds like you trained the classifier manually. I imagine if you want to sort into sets you need to know what makes up a particular set.....does Lego provide an API or anything regarding parts/sets?

Further to that, if you have pricing data on sets you have a nice little optimisation problem - given my metric ton of parts, what are the most valuable complete sets I can make?

<comment><AUTHOR> > Were you able to utilise any data about Lego parts from Lego's own > catalogues (current and historal) or technical specifications?

I tried, but in the end a straight up train-correct-retrain loop took care of all the edge cases much quicker and much more reliable than any feature engineering and database correlation that I tried before. This is roughly the fourth incarnation of the software and by far the most clean and effective. HN pointed me in the direction of Keras a few weeks ago, that coupled with Jeremy Howard's course gave me the keys to finally crack the software in a decisive way.

> It sounds like you trained the classifier manually.

Only the first batch, after that it was mostly corrections. What it does is while it classifies one batch it saves a log which gives me more data to feed the classifier with for the next training session. There are so few errors now that I can add another 4K images to the training set in half an hour or so.

> Further to that, if you have pricing data on sets you have a nice little > optimisation problem - given my metric ton of parts, what are the most > valuable complete sets I can make?

I'm on that one :) And a few others that are not so obvious. There is a lot to know about lego. Far more than you'd think at first glance.

<comment><USER11> > I tried, but in the end a straight up train-correct-retrain loop took care > of all the edge cases much quicker and much more reliable than any feature > engineering and database correlation that I tried

I'd love to hear more about what you tried specifically. I'm considering doing this myself, and I was thinking of building a very large labeled dataset of 3d rendered images using the LDraw parts library and training on that. I could include hundreds of images per part by using different viewing angles, zoom levels, focus, etc in the rendering process. Did you try anything like that?

<comment><AUTHOR> That's fairly pointless for me. There are some intricacies in the optics that would need to be modeled as well as the specifics of the camera and the light path, and then you'd still have all the weird gravity related trickery: parts that end up on top of each other, parts that can only be found in one or two ways on the belt and so on.

After endless messing around I finally bit the bullet and trained a neural net, from 0 to 100 in a few weeks and it is rapidly getting more usable now.

The feature detection code may get a second life though: as a meta-data vector to be embedded in to the net. But only if it is really necessary.

I'm quite curious though if you can get your method to work, especially for the parts that are very rare and rare colors.

<comment><USER11> That's very helpful. Thanks!

I was assuming that at minimum I'd need to do a lot of filtering in order to get the camera images and renders into a state where they are similar enough to work for training.

Any chance that you'll be releasing source code for this project and/or your labeled dataset?

<comment><AUTHOR> > Any chance that you'll be releasing source code for this project and/or your > labeled dataset?

Yes, but not yet. It needs to get a lot better before I'm going to stamp my name on it as a release. Right now it is rather embarrassing from a code quality point of view, it has been ripped apart and put together several times now and every time it gets a lot better but we're not there yet.

<comment><USER12> Sounds like a great learning opportunity for beginners and people who haven't even started with machine learning yet, like me. I'm looking forward to it. If you're so inclined, a new blog post focusing on the machine learning process would be much appreciated, it's always interesting to read about the process of how somebody solved a real problem and implemented the solution.

Just so I understand the process correctly, did you manually sort some pieces to get a labeled training set, feed those through the machine, train the NN with that, and then manually correct the errors when sorting unknown pieces, added all those pictures to the same training set and then finally run the full training again? How many labeled images do you need to start getting acceptable performance? Are you training the NN continuously with every new image, or from scratch with an increasing data set?

Do you think a stereo camera would improve the classification in a meaningful way, or maybe a second camera from a different angle?

<comment><AUTHOR> > did you manually sort some pieces to get a labeled training set, feed those > through the machine, train the NN with that, and then manually correct the > errors when sorting unknown pieces, added all those pictures to the same > training set and then finally run the full training again?

Yes, but that cycle repeats every day. So the training never really stops, it just runs at night and the machine runs during the day. Today it sorted close to 10K parts and those images will now be added to the training set and then I'll start the training overnight so tomorrow morning my error rate should be much better than it was today and so on.

> How many labeled images do you need to start getting acceptable performance?

Good question! Answer: I don't really know but judging by how fast the error rate is improving between 100 and 200 per 'class' so that will be 200K images or so when it is one with the 1000 most commonly found parts.

> Are you training the NN continuously with every new image, or from scratch > with an increasing data set?

From scratch with every expanded set. I suspect that's the better way but I have no proof. My intution is that it is hard to make a neural net learn something entirely new that it has not seen before and every day totally new stuff gets added. So I re-train all the way from noise.

> Do you think a stereo camera would improve the classification in a > meaningful way, or maybe a second camera from a different angle?

You're getting close to the secret sauce :)

<comment><USER12> Thanks for the answer!

I guess my lack of knowledge in the field shines through. Continuous learning is apparently under active research at the moment, and this blog post about it [0] is less than two months old, so your intuition was right.

If I were to guess the secret sauce I'd say that a mirror might be involved. Is depth information not worth the trouble for these kinds of classification problems?

[0] [https://deepmind.com/blog/enabling-continual-learning-in- neu...](https://deepmind.com/blog/enabling-continual-learning-in-neural- networks/)

<comment><AUTHOR> > If I were to guess the secret sauce I'd say that a mirror might be involved.

You might be right there :)

> Is depth information not worth the trouble for these kinds of classification > problems?

Yes, it would be, but there's much more to it than that. Also keep in mind that there are parts that are almost transparent and that no matter what background color you come up with there will be a bunch of lego parts that match it.

<comment><USER13> checkerboard background?

<comment><AUTHOR> Tried that one too, both b/w and purple/w... in the end a transparent background with a bunch of lights behind it works best.

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER14> My 9yo son is willing to give you his life savings of $41.56 to have an at home kit of this machine :)

I've played with OpenCV and tried for fun to train a HAAR cascade classifier to recognise a minifigure. It didn't work which made me realise one has to really understand under the hood of machine learning like this in order to give it good training data.

Kudos. Very, very impressive.

<comment><AUTHOR> Where do you live? I'll send you some lego!

<comment><USER14> Please god no, too much already :)

<comment><AUTHOR> Ask your smallest family member if they think it is too much :)

</comment></comment></comment></comment><comment><USER15> Lots of comments on here about the software, but I'm really fascinated by the hardware. Where did you get the conveyor belts and how much did they cost?

For the belt that lifts item up out of the hopper, I notice there's a little white hook (or platform, not sure what to call that) jutting out that does the actual lifting of the legos. How did you get the size of that right? Did you install that jutting-out part, or did it come pre-attached to the belt?

What tools are you using to make a computer do the actual belt rotation? I'm wondering how low-level it is - are you spinning the steppers directly or did the conveyor belts come with some kind of API? I'm guessing the belts don't have a USB port for easy control.

<comment><AUTHOR> The belts are industrial surplus.

If you look closely at the belt you can see the traces of many failed experiments before I found a shape that worked without accidentally getting stuck on a part.

It is attached with super glue to the belt. I use the narrowest parts because that way it doesn't end up fighting with the curvature of the belt when it goes over the roller.

The belt rotation is done with a 3 phase AC motor hooked up to an inverter for the vertical belt, the camera belt is driven by a DC motor hooked up to a variable power supply.

So no steppers, that would have made life a bit easier because then I'd know (modulo some slippage) where the belt is positioned. So now I have to reconstruct that optically, hence the wavy line on the belt.

</comment></comment><comment><USER16> Can you publish the details of the h/w-s/w interface...the only piece I grokked was the vgg classifier. How do you go from a physical Lego on the hopper to jpg to class label to the lego in the correct physical bin ? I'd like to do this myself. I don't have 2 tons but definitely some 10k pieces. Thanks.

<comment><AUTHOR> Hopper belt to camera belt is just a speed difference that causes the parts to become nicely spread out (at least, you hope so!), the camera stitches together frames to scan the part so a part larger than a frame can be scanned. Once the end of the part is detected it gets fed into the classifier which returns part id, category and color. Depending on what sort is set up a part then gets pushed into one of 7 bins, these periodically are emptied into larger bins and bags.

If necessary a lot can be pushed through the machine twice for instance to sort parts by length or to pick out sets (that last bit works in theory but in practice there are a lot of problems to overcome because of the limited number of bins to deposit into).

As for the hardware, there is a nifty little camera with a macro lens that connects to the USB port (noname Asian stuff), it has a 10x magnifying lens, a pololu servo/gpio to USB card to drive the relays and a Sainsmart 16 port relay board to drive the solenoids for the air valves.

The software is all in python with a generous amount of help from the people who wrote numpy, opencv, keras and theano.

The error rate is between 3 and 5% depending on how fast I set the machine, there are a number of sources for the errors, obviously classification errors, also sometimes two parts are too close to each other and even if the classifier got them right the airpuff for one pushes the other of the belt as well. To minimize this effect I keep the airpuff super short, on the order of 10 ms, which is about as fast as the solenoids can open and close reliably, but it does mean that if it misses even by a bit there is nothing to be done about it and that part will land in the 'other' bin.

That error rate is still too high but with every run the classification errors go down and that's the main component.

One nasty little problem was that I spaced the puffers too regular in the first iteration which meant that sometimes the parts would line up just so in the order in which they came under the camera so that more than one puffer would be active at once leading to a reduction on pressure and no parts would be pushed off the belt. That was a tricky one!

<comment><USER17> This is one of the greatest, most HN comments of all time! I'd love to do some hardware stuff but it always seems so inapproachable for a software-only person.

"more than one puffer would be active at once" — sounds like a job for prime numbers!

<comment><AUTHOR> > sounds like a job for prime numbers!

And that's exactly how it was solved. The puffers are now spaced prime distances apart and that took care of that, it would be harder for a longer belt because then you'd start wasting an awful lot of space next to the belt.

<comment><USER18> I think a Golomb ruler would be a good start for spacing.

<comment><AUTHOR> Interesting I had never heard of the term. Thank you for the pointer!

</comment></comment></comment></comment></comment></comment><comment> tuna-piano Thank you very much for this fascinating post, nice work.

Did you use any other resources to learn about deep learning besides [http://course.fast.ai/](http://course.fast.ai/)? I'm looking to get started learning, and wondered what the best way forward would be.

<comment><AUTHOR> That was my starting point but I'd already played with neural nets when they first came out so that helped and I also did a lot of opencv stuff without any neural nets.

After that it was mostly googling each and every term that I didn't understand until it all started to make sense.

course.fast.ai is probably the fastest way to get something concrete going which is very useful if you need that instant gratification kick to keep going.

<comment> tuna-piano Definitely need that gratification kick. Thanks, I'll definitely start this.

<comment><USER19> Another path: start doing Kaggle. Pick whatever competition looks interesting to you and just join in. In worst case you will learn a lot, and there will be people working on the same problems as you will.

EDIT: but some initial level of knowledge is advisable so you know how to pick a competition.

<comment><AUTHOR> Course.fast.ai has you entering Kaggle submissions right from day #1.

<comment><USER19> Thanks, didn't know that! Nice.

</comment></comment></comment></comment></comment></comment><comment><USER20> Awesome. Do you have a video of it running at full speed? Also, the bin at the end is for all the pieces save the fake/discolored/technic ones & see statistics on the PC or is there a more elaborate sorting scheme? Watching the belt go I was kind of expecting the pieces to be sorted by color or something, which would look neat but isn't very practical, I assume.

<comment><AUTHOR> Sorting by color is useless unless you want to go and sort directly into sets (it can do that too but that's very much experimental, also it would take _lots_ of bins and there are some details that are important to get right that are almost invisible to the camera).

A full speed video is super hard to shoot because you can't follow the parts as they move, they basically disappear because of the air puff being so short that a part is there one frame and gone the next. Right now classification takes about 30 ms, that's the limiting factor because that belt keeps moving during that 30 ms so you need to be 'back' at the camera before it moves so far that you can't stitch the next image to the previous one.

Another limiting factor is the relationship between the two belts, the second belt can only go so fast before the precision of the puffers starts to be insufficient to aim the parts into the right bin, they also carry too much forward momentum, and the second belt needs to go many times faster than the first in order to spread out the parts sufficiently. Yet another problem related to that: if you look at the video you'll notice that one of the little parts grabbers on the belt can push ahead of it quite a bit of stuff, if fortune is against you all of that lands on the belt in one go. By making that belt go slow it creates _just_ enough pause between parts to be able to separate them with air without pushing the wrong part off the belt. It pays off to leave some safety margin there so I tend to set the second belt a bit faster than optimum and the first one a bit slower. That way the accuracy goes up quite a bit.

It took lots of experimenting and tweaking to get to this stage.

About 1 part per second is a practical upper limit right now, it can go way faster than that but then it starts dumping stuff all over the room :)

I'll see if I can shoot a video at a higher speed than the one in the post right now.

<comment><USER21> This is really neat and impressive.

>also it would take lots of bins and there are some details that are important to get right that are almost invisible to the camera).

I wonder if you could build something that would use a small number of bins (maybe just two) and multiple passes.

The first pass could just get an inventory and just show you what sets it could build toward (with emphasis on sets that are the most profitable, closest to completion, or your favorites). The second pass would split off legos that are a part of the set(s) that are trying to be built.

You could also pass along what you think was a completed set again at the end to check for mistakes.

<comment><AUTHOR> The number of bins is of course directly related to the number of passes. 7 is the largest that I can still fit on my desk so that's why it is 7 right now, I'd love to take it up to 13 that would make things much faster. Two would be so slow that it probably would be quicker to sort by hand because of the number of passes you'd have to make.

</comment></comment></comment></comment><comment><USER22> Heh, that looks like a ton of fun, sorry you lost your van though! Also interesting to know that the pile of Lego Technic parts I've got from my lego bot building days actually might have some resale value :-).

Lots of interesting questions come to mind though, in that if you have two bits of Lego that are attached, what bin do you put them into? And have you looked at ways to automatically disassemble Legos? And did any of your purchases have Legos that were superglued together? (as is done in some displays.)

<comment><AUTHOR> > Heh, that looks like a ton of fun

Most fun I've had programming in years. Finally something where I don't have to worry right from the get-go if it is secure or not.

> sorry you lost your van though!

So am I. I had a ton of work in that thing and even if the insurance covered the value they did not give me back the many weeks I spent building it.

> Also interesting to know that the pile of Lego Technic parts I've got from > my lego bot building days actually might have some resale value :-).

It'd be better if you had some really nice boxed sets from the 60's ;)

> if you have two bits of Lego that are attached, what bin do you put them > into?

'Other', then pick them apart and run them through again

> And have you looked at ways to automatically disassemble Legos?

Yes, but this is very hard to do without damage.

> And did any of your purchases have Legos that were superglued together?

I've seen a few bit here and there but for the most part that doesn't happen. Kids are pretty destructive though so you have to count with a good %age of damaged / unusable parts.

</comment></comment><comment><USER23> I would imagine that this is a hobby project and you're losing cash on it. But what would be the parameters of a profitable business? At what level of scale (if any) would it have to operate? And is there a lot of competition in this space?

<comment><AUTHOR> Well, yes. It is definitely not going to make money if I count my time. But I learned an awful lot about machine learning and the present state of computer vision, far more than if I had tried to do that on something abstract. And when I look at the Lego bought-and-sold it seems to work out ok.

As for competition, yes, plenty, but all manual. Scaling up now that I have the software working is definitely an option but I have a good set of very well paying customers and not much can compete with that.

<comment><USER16> Frankly, the "present state of cv" as you call it, is far far ahead of the 5% classification errors you are running into on a standardized textbook problem such as this - the Legos are all blocky discrete plastic with super-saturated colors and very distinct features. You can easily drop the error by taking multiple pictures from different angles, using ImageDataGenerator during training ( since you are using Keras), especially with horiz and vert flips, and the usual set of tuning tricks - going deeper, dropout, l2 etc. No, the real takeaway is that you have built something very impressive - a tangible physical classifier that uses vgg to get the error down to 5% with very little effort. Going from there to 0.5% would be quite easy if you post the training set so a bunch of people can try different things, see what works best for this situation. Last week I trained a car to drive around a circular track with just a stupid mnist classifier, only 9 classes, 10 lines of Keras! State of cv is very far ahead these days.

<comment><AUTHOR> That 5% is based on a relatively small set of images that is expanding rapidly (4K or so per run), so I expect that error to get lower quickly. Also, these images are stitched and so are far from perfect, the colors are all over the map due to discoloration and so on. Then there are certain nasty aliasing effects where a part will look _exactly_ like another part from the angles the camera can look at the part. This is fixable but will require (yet) another redesign of the optics.

Dropout is at .5 both for conv and connected layers.

All those things you mention have already been done and yet the error is as high as it is. But this does not surprise me at all, the difference is that the pre-trained models actually do very poorly on this dataset and so I'm having to train them up from scratch. That's getting there though, another week or two and I should be in the tens of thousands of images to train with and then life will get a lot easier.

Data augmentation works well and has been enabled right from the get-go.

I'll definitely do another write-up in a while about the software end of things, once it crystalizes to something a bit more stable, I'm still hacking on it daily.

I will post the training set at some point, first it needs to become large enough. But with the machine helping now that is getting there, rapidly.

<comment><USER12> > Also, these images are stitched and so are far from perfect

Maybe you could use a push broom scanner? I don't know if there's any hardware available for consumers, otherwise that seems ideal for a conveyor belt application.

<comment><AUTHOR> This is a very rough equivalent of that. The area outside the stitched part is used to keep the belt synchronized if there are not parts in view, hence that wavy line on the belt in the video.

</comment></comment></comment></comment></comment></comment><comment><USER24> My wife and I are in the process of packing up our house to move, and we are cursing our five year old kid's collection of Lego right now.

This was perfect timing for a good laugh from the title and an interesting read. Thanks!

<comment><AUTHOR> I can send you some more if you want?

</comment></comment><comment><USER25> Cool build! I'm really interested in the classification process:

1) What's the input image resolution?

2) How many classes you have?

3) How many samples per class did you need to achieve acceptable accuracy?

4) How long did the training take? How many epochs did it require?

<comment><AUTHOR> 1) 640x242

2) the 1000 most common lego parts, 'other' and 'mess'. In the end the idea is to get to 20K classes and to sort directly into sets. This is very much a pipe dream at the moment but I think it is doable given a large enough set of samples. The problem is that you have to see all those parts at least a hundred times or so before it gets detected reliably.

3) too little :( The training data is still woefully insufficient but it is now good enough to bootstrap the rest. This took a while to achieve because without any sorted lego to begin with you have nothing to train with. So the first 20Kg or so were sorted by hand and imaged on the sorter without any actual sorting happening (everything into the run-off bin), then labeling the results by hand until the accuracy of the test set (500 parts or so) went over 80%. That was a week ago and since then it's been improving steadily day-by- day.

4) one training run per night, typically a few 100 epochs on the current set but, this will change soon. The machine is now expanding the training set rapidly with associated improvement in accuracy. This means that the training sessions are taking longer and longer but I'll be running fewer of them. What I'll probably do is offload training to one machine which will drop off a new set once per week or so and inference on another which is doing the sorting and capturing the new training data.

Checking the logged images for errors still takes up a bit of time though, but with the current error rate that is very well manageable. (Before it was an endless nightmare).

<comment><USER26> For more training data, I wonder if you could make Lego parts in Sketchup or some 3D program, then render them in a 'scene' similar to your camera setup using a renderer like Maxwell or V-Ray or whatever. Then you could maybe be able to generate unlimited numbers of sample images to train on.

I'm doing a similar experiment now to train a model to parse out an image of a blood pressure monitor that's a 7-segment LCD display. To do it I separated out each segment of the display as masks with Gimp/Photoshop and then I can create my own images by just overlaying them on top of an image of a blank LCD display. That gets me basically unlimited training photos. If you could render the 3D parts from various angles, colours, etc then something similar might be possible.

Also, you said you're doing modified VGG and into 20k classes. That works, but another thing to maybe try is use binary_crossentropy as the loss function and a sigmoid (instead of softmax) on the final activation layer, to be able to do multiclass classification. Then your labels could be a vector of shape possibilities, colour possibilities, or whatever you could divide your 20k classes into.

<comment><AUTHOR> I've tried the rendering trick but it didn't work well enough, the real pictures seem to give much better results when used on unseen data.

> Also, you said you're doing modified VGG and into 20k classes. That works,

Right now there are 1002 classes, the 1000 most common lego parts, 'mess' and 'other'.

> but another thing to maybe try is use binary_crossentropy as the loss > function and a sigmoid (instead of softmax) on the final activation layer, > to be able to do multiclass classification. Then your labels could be a > vector of shape possibilities, colour possibilities, or whatever you could > divide your 20k classes into.

Ok, I can try that. Thank you!

<comment><USER27> Tagging/multi-label classification is useful because it'll help tame your explosion of classification if you want to expand. For example, it can then handle stuck-together parts by tagging it as both parts rather than putting them into a generic 'other' classification, or you could include separate tags for colors or fakeness or damagedness, avoiding the need for 100,000 categories of 'fake damaged red square brick' etc. It might also improve learning since it's a more natural way of describing the data.

</comment></comment></comment></comment></comment><comment><USER28> This is really cool.

I am kinda boggled that you thought "Huh, Lego, think I'll get into that" and _immediately ordered two metric tons of Lego._ o_O

I get that you thought (for some reason) that you would only win some small fraction of your bids, but ordering, say, a quarter-ton of Lego at a go isn't reasonable either. The whole episode is pretty hilarious.

<comment><AUTHOR> Live and learn :)

You should have seen my face. Also, try to explain to your s.o. that you're about to buy an extra garage solely to house something that you have no idea how it will all work out and when - and if - it will ever go away again. And that was two years ago.

It really is hilarious. For me it's more or less business as usual though, I take lots of chances. Some work out and some don't. This one is still undecided.

</comment></comment><comment><USER29> Fascinating. It touches on the discolored and counterfeit parts but doesn't say how they are detected – I assume there was a lot of manual training of the neural net?

<comment><AUTHOR> It's basically bootstrapped. Use the machine to sort a few kilos, pick out the mistakes, update the training set, let it train overnight, rinse, repeat. After many such cycles it is getting pretty good. The best part is when I think it has made a mistake but actually it is right and I'm wrong :)

<comment><USER30> >The best part is when I think it has made a mistake but actually it is right and I'm wrong :)

This is always an awesome, awesome feeling and one I live for when training neural nets.

<comment><AUTHOR> The annoying part is that I can't always figure out by looking at the image what makes it make the right decision. That's a feeling I don't normally have with software, I can usually trace back the reason why.

<comment><USER30> To me, that's a proud day. Also scary. :)

</comment></comment></comment></comment></comment><comment> tuna-piano One thought: I'd think creating a similar solution would make an amazing semester course for University students.

Maybe you package stuff up nicely and give it away as a course, or try and sell the plans as a course to one of the coding schools or large Education companies?

<comment><AUTHOR> I'd be happy to give them away, but I don't think any university students will learn much that is useful from my tinkering.

<comment><USER31> Building from scratch a sorting machine that works (however accurately) is no small feat for a student. It would be a great multidisciplinary project.

Imagine a group of student only had the rough scheme: which pieces do they need, maybe some templates, but then it's up to them to actually implement / build the thing.

Heck a university could even host a competition, where the machine with the fastest throughput + lowest % of errors wins :)

<comment> tuna-piano Exactly what I was thinking. For less advanced students, you could even provide more templates, etc. There's something to be said for long multidisciplinary projects.

</comment></comment></comment></comment><comment><USER32> This is amazing ! I am currently struggling to sort properly a few Technic sets (roughly equivalent to 5-6 shoeboxes), and one of the biggest challenge besides sorting, is to find boxes that are large enough to store the individual types of pieces. Any ideas ?

<comment><AUTHOR> Every collector of Lego sooner or later becomes a collector of storage systems :) (Don't ask me how I know that...).

I use some relatively cheap plastic sliders stacked 10 high, parts go by length from the top down and by width left to right. Then there are departments for minifigs and associated parts as well as irregular stuff like base-plates and so on. Storage could easily be another blog post all by itself! It's a crazy problem.

For technic, which is many small parts I use small bins and bags inside the larger bins, but you probably could use a raaco rack or equivalent if you don't have too much of it.

<comment><USER32> Raaco racks could work! Thanks!

</comment></comment></comment><comment><USER33> Really awesome. What Im dying to know though is some stats on the profitability. On average what sort of groupings of parts do you get from the bulk Lego and what do they sell for vs what you paid for them? Is there a variance is the quality of the bulk lots? I presume once you've sorted out the rare Lego you could just resell the common stuff as another bulk lot, but if everyone does that how do you avoid buying stuff that has already had the rare pieces filtered out?

<comment><AUTHOR> If I count my time the project is not profitable (that's because I've long ago moved to hourly rates that make competing with that hard).

But if you're making some regular wage then you could easily live of this.

</comment></comment><comment><USER34> Bootstrapting rocks to speed manual labeling. I got to full unsupervised on coin designs and angles by augmenting with many different lighting angles with ws8211 led strips and correlating the angles. I almost can with the dates, but it's so easy to finish with bootstrapping. See [http://www.GemHunt.com/dates](http://www.GemHunt.com/dates) for the 100% unsupervised classes.

</comment><comment><USER35> Is this proof that Lego is the best educational toy for creating engineers?

What about an initial bucket for pieces that are too close to be reliablely puffed? Maybe you already do that, I couldn't tell.

On the issue pressure drop from simultaneous puffs, if you add a buffer tank with a pressure regulator for every two puffers, you'd probably avoid that problem. Like the little capacitors that used to sit by every 74xx IC.

<comment><AUTHOR> There is a 'default' bucket (#7) to the side of the machine that catches everything that it does not pick out in that particular run.

The simpler solution was to just stagger the tubes a bit, that way all I needed to do was drill a few new holes. I see what you mean though, that's also a clever way but the 'feed' to the air valves is a single 6 way manifold that they bolt straight on to. It would be very hard to put a buffer between the manifold and the valves.

<comment><USER35> I see. So right now, if two pieces are too close together on the belt, they just go into the default bucket?

What is the limiting factor determining how many buckets you can operate with?

And I may have missed this detail, but you must perform a multi stage sort since you just have a few buckets? What is the level of the final sort, and what becomes of the parts at that time?

<comment><AUTHOR> > So right now, if two pieces are too close together on the belt, they just go > into the default bucket?

Yep. But this fortunately does not happen often.

> What is the limiting factor determining how many buckets you can operate > with?

Belt length, measurement precision during the stitching, cumulative errors in the math determining how far the belt has moved.

> And I may have missed this detail, but you must perform a multi stage sort > since you just have a few buckets?

Yes.

> What is the level of the final sort, and what becomes of the parts at that > time?

A single part category in multiple colors, or and that's the next level, all (or at least most) of the parts required to make 6 sets + remainder.

That final stage is a bit tricky, it also interfaces with a database that keeps track of the lot id of that set and what parts are still missing. I have most of the pieces for that second idea ready now but they are not yet tied together.

<comment><USER35> A simpler way to maintain steady pressure with simultaneous puffs would be to use a oversized manifold, and put the valves on the end of the copper air lines, perhaps mounted on a board or something. Maybe you could gang up a number of puffers for larger parts.

And what about doubling the bins by placing them on both sides of the belt, with puffers blowing in both directions?

Or a laser trip sensor to get a more precise belt location measurement?

Fun project!

<comment><AUTHOR> > A simpler way to maintain steady pressure with simultaneous puffs would be > to use a oversized manifold, and put the valves on the end of the copper air > lines, perhaps mounted on a board or something. Maybe you could gang up a > number of puffers for larger parts.

That's an option. But the problem is solved so that part is ok now.

> And what about doubling the bins by placing them on both sides of the belt, > with puffers blowing in both directions?

It does that, you can see it in the video if you look closely and also in one of the pictures. There are two bins at the back and four in the front (that's the easiest way to fit them right now).

> Or a laser trip sensor to get a more precise belt location measurement?

Or a gray code printed on the belt! That would give you absolute positioning.

> Fun project!

Absolutely!

<comment><USER35> A laser per bucket could be integrated with no change to existing software. Just AND the valve signal with the laser detection signal.

</comment></comment></comment></comment></comment></comment></comment><comment><USER36> This is a really cool project and a nice writeup. What were the biggest lessons learned from a machine learning and computer vision standpoint?

<comment><AUTHOR> That feature engineering is mostly dead, that ML is now accessible even to noobs like me (thanks to [http://course.fast.ai/](http://course.fast.ai/) and other), that you don't need to build stuff like this in C or C++ any more to get decent speed.

The machine learning itself: models are hard to train, harder than you'd think at first glance, that you need a _lot_ of data for training and if your particular application does not have any samples then you're going to have to come up with clever ways of making images because the quantities needed are not something you can just go and shoot by hand.

Also, that bootstrapping is a viable method, that way the machine does the hard part and you only have to correct, this takes the sting out of 90% or so of the work of labeling a dataset.

</comment></comment><comment><USER37> Can you give more info about how you customized vgg 16? If you wanted to open source it you could call it legonet ?

<comment><AUTHOR> Yes, for one the weights are totally new, second I dropped a bunch of layers because vgg16 is _way_ too powerful for this task. As I get into more kinds of parts I may have to put those back in though. Finally, I added dropout after the convolutional layers as well as after the fully connected layers, that seems to help a lot with the accuracy. All this was arrived at empirically, I don't know enough about neural net topology to go about that in a more analytical way but it does the job.

As for opensourcing it, yes, but then likely lego would have a trademark case so I would probably use another name. The whole thing would make for a pretty neat Kaggle competition.

<comment><USER38> I think it should be named "the Brickolator" :)

</comment></comment></comment><comment><USER39> This looks like it was much fun to build - and nice touch using Legos as part of the machine itself.

</comment><comment><USER40> > you can roughly tell how old someone is by asking them what lego colors they > remember from their youth

What's the age bracket for red and white? (Plus grey base plates ;-)

<comment><AUTHOR> 60+ or thereabouts. Add blue, yellow and black and you're between 50 and 60, add green and you're between 40 and 50. After that it gets harder :)

<comment><USER41> I would have thought the introduction of themed sets would narrow things down again.

Most of my lego is blue, black, or transparent red. (space police 1) Some is black and trans-yellow (blacktron)

<comment><AUTHOR> The transparent red could be really old stuff, pre-ABS Lego, made from Cellulose-Acetate.

The blacktron sets are from the late 1980's.

</comment></comment></comment></comment><comment><USER42> Having two metric tons of Lego is the sort of problem I would _love_ to have, though I suspect my wife would strongly disagree.

</comment><comment><USER43> Was it intentional that the air hose spells out the initials "jm" in cursive?

</comment><comment><USER44> Saw somebody in Japan use Deeplearning to sort trash. Kinda similar approach

</comment><comment><USER45> Kinda off topic: Is there another ton except the metric one?

<comment><USER46> [https://en.wikipedia.org/wiki/Ton#Units_of_mass.2Fweight](https://en.wikipedia.org/wiki/Ton#Units_of_mass.2Fweight)

Metric ton / tonne: 1000 kg

Imperial (long) ton: 2240 lbs (1016 kg) (UK)

Imperial (short) ton: 2000 lbs (907 kg) (USA, Canada)

<comment><USER45> Oh. Thanks! I was expecting the imperial ton to have a different name like most other metric/imperial units. TIL.

</comment></comment></comment><comment><USER47> And here I thought minecraft was going to kill Lego off...

<comment><USER7> Well, there's also the Lego Minecraft series!

</comment></comment><comment><USER48> How do you clean them?

<comment><AUTHOR> Split out the transparent, decorated and stickered parts, was the rest.

<comment><USER49> > was the rest.

Your Dutch skills are shining trough :)

</comment></comment></comment><comment><USER50> Impressive.

Several years ago I designed an industrial machine that is used untangle and sort nails, screws, etc for feeding robots in automatic product lines. Main elements were vibration beds (using eccentric), slopes with geometry to sort out and pneumatic cylinders - to untangle items in high speed.

<comment><AUTHOR> I've watched hours of videos of industrial equipment to figure out how best to tackle this problem. It's absolutely incredible what is out there in industry both for sorting, feeding and handling. Hypnotizing.

<comment><USER51> Yeah they're insane, recently saw a video of bean sorting machine that did spectroscopy on every single bean to see if it had mold or fungus and was crazy fast.

This ones a nice Lego sorter, too: [http://hackaday.com/2011/04/20/amazing- quad-pick-and-place-s...](http://hackaday.com/2011/04/20/amazing-quad-pick- and-place-system-tirelessly-sorts-your-legos/)

<comment><AUTHOR> Hah, that's beautiful!

</comment></comment></comment></comment><comment><USER52> That is awesome. Thanks for sharing.

</comment><comment><USER53> Why do people always say this, "a metric [shit] ton"? It's within about 10% of a regular ton.

<comment><USER54> What weighs more, a metric shit ton or a metric feather ton?

<comment><USER55> Technically they weigh the same but I guarantee you the former will feel heavier.

<comment><USER56> if you leave them covered in a dry room eventually the shit ton will be lighter. Though in the long run it will all be destroyed when the sun burns up the earth.

</comment></comment></comment></comment><comment><USER57> "If you read this far you should probably follow me on twitter"

What an obnoxious way to end your piece.</comment>


Free-to-use science-based food-wine pairing technology - <AUTHOR> http://delipair.com <comment><AUTHOR> The technology helps people have a far better dining experience with wine, by guiding them to the best 'paired' wine, whether white or red is preferred.

It drastically simplifies the process of getting to the perfect wine recommendation, in just a few seconds directly at Delipair.com

The solution was built by fusing science and technology, leading to the creation of a proprietary algorithm.

You have to paste in the recipe you're interested in, to get the wine recommendations.

The site is not selling anything - pairings are currently free for consumers.

User feedback appreciated and will be garnered from comments.</comment>


The Adult Education Market is Imploding - <AUTHOR> http://hapgood.us/2013/05/17/the-adult-education-market-is-imploding/ <comment><USER2> I think this is best explained as an effect of the "go to college" mantra shoved on kids in the 80s and 90s. There are fewer and fewer adults who are not already college educated. ([http://en.wikipedia.org/wiki/Educational_attainment_in_the_U...](http://en.wikipedia.org/wiki/Educational_attainment_in_the_United_States))</comment>


U.S. technology startups panic over immigration ban - <AUTHOR> http://www.reuters.com/article/us-usa-trump-immigration-startups-idUSKBN15I1I0 <comment><AUTHOR> The drop in conference attendance illustrates the impact of uncertainty on the market: regardless of there's internal panic within your company, panicking customers can hurt you.</comment>


Show HN: Logging2, An Improved Python Logging Utility - <AUTHOR> https://github.com/vforgione/logging2 <comment><AUTHOR> About a year ago I got really fed up with the way the logging library in python works. I was trying to inject request ids (Flask app with a custom before_request hook to create the ids) into every log entry and ran into numerous issues - should it be an adapter, a filter, should I just wrap the logging methods, how will it handle the dynamic injection of the data?

Eventually after 4 days of struggling to find the right mixture I settled on a custom adapter and a global instance of a logger and replacing the app logger with it. It was a hack on a hack on a hack. I wan't satisfied. (On top of that, we had machines with different timezones, so trying to align our logs later on was a separate mess given the inflexibility of the timestamp formatting).

So, I started designing and refining my idea of what a more modern, pythonic logging utility would look like. I've made several iterations on the design and API, and I'm finally ready to let people take it for a test drive.</comment>


NPM Was Down - <AUTHOR> https://status.npmjs.org/incidents/cksjqc1w11v5 <comment><USER2> Our builds are also still failing with multiple 404ing packages.

</comment><comment><USER3> You still get 404s if you want to install scoped packages.

</comment><comment><USER4> Scoped packages are still failing to install for us, so "was Down" in the title is unfortunately still a bit premature

</comment><comment><USER5> Still failing for us, in addition Yarn seems to be having major issues as well including their status page 500ing.

<comment><USER6> Yarn doesn't appear to have a status page any more, and in addition, doesn't operate a mirror, just a CNAME.

</comment></comment><comment><USER7> Sure seems like GitHub and it's affiliates have been having quite a bit of downtime since the Microsoft acquisition.

Yes, I understand that npm shifting to GitHub is independent and after the acquisition, but it's awfully coincidental.

</comment><comment><USER8> oof just spent a solid 30 minutes trying to debug why I was getting 404s in a docker build. Thanks HN!

</comment><comment><USER9> yep, it's still down, failing to install packages for me, says they're working on a fix</comment>


.ng SLD Registration Url - <AUTHOR>

http://www.webdomains.com.ng/cpanel.php?page=sldwhois <comment><USER2> Feels dodgy

Why would I submit my personal details before knowing all the other steps?

<comment><AUTHOR> This is a BUY-NOW Process of an Auction,

<http://www.nira.org.ng/index.php/auction>

Anonymous Orders are not allowed & Cyber-squatting is seriously frowned at, we've had cases of people trying to register names like facebook.ng,alibaba.ng which they dont have rights to.

<comment><USER2> I don't see any details about pricing.

Feels bad giving away all my details before I even know how much I'd need to pay.</comment></comment></comment>


The Complexity of Greatness: Beyond Talent or Practice - <AUTHOR> http://www.creativitypost.com/psychology/the_complexity_of_greatness_beyond_talent_or_practice

<comment><USER2> If you liked this article, you might like "How Life Imitates Chess" by Kasparov himself: [http://www.amazon.com/How-Life-Imitates-Chess- ebook/dp/B0049...](http://www.amazon.com/How-Life-Imitates-Chess- ebook/dp/B0049U443Q/ref=sr_1_1)

The name of the book is not the more imaginative title but the content of the book is very interesting. He separates the romantic era of chess to the professional one and speaks about many different chess players with different skills. The concepts from the book can be also applied to science in general: there was a romantic science era where one person alone could learn and produce a lot of stuff. Now we are in a professional era where we need teams to discover something, just look at the number of people involved in writing new papers in science.

Personally, I have not lost the romantic view but in a specialized world it is difficult to produce a lot of impact alone.

</comment><comment><USER3> Chess and music are very narrow domains. If you think that abilities in music or chess make one great, then your worldview is extremely deficient. In fact, computers have already surpassed humans in terms of chess or musical ability.

A word like "greatness" should be reserved for more ambitious and helpful pursuits, such as creating inventions or new social structures that improve the human condition.

<comment><USER4> I'd argue that music and other forms of entertainment clearly improve the human condition. And if computers have surpassed humans in the production of music, can you point me to some of the great computer-generated compositions? I'm not aware of any, but I confess that it may just be ignorance on my part.</comment></comment>


With topics comes discussion... Suggestion for YC News - <AUTHOR> The vote-up button should be removed from the front page. If users had to read at least some discussion about the article, inaccurate stories may never be voted so highly...<p>example http://news.ycombinator.com/item?id=136270<p>(sorry for english) <comment><USER2> And the "vote down" button should be removed until the voter has commented on the post. Getting fed up seeing worthy comments down-modded without explanation.

<comment><USER3> I disagree. Short comments like this one would get annoying.

<comment><USER2> So you have to make an argument instead of saying "meh, I disagree." That's a good thing. Seriously, get rid of the downmod button altogether.

<comment><USER3> I disagree. I did make an argument.

<comment><USER4> "Argument is an intellectual process. Contradiction is just the automatic gainsaying of any statement the other person makes..."

<http://www.youtube.com/watch?v=teMlv3ripSM>

<comment><USER3> My argument, in part by example, was that a large number of short, similar comments explaining why another comment should be downmodded would be annoying. Since the purpose of downmodding is to call less attention to lower- quality comments, putting a large thread of explanatory arguments underneath them seems counterproductive to me.</comment></comment></comment></comment></comment></comment>


What was your last job? - <AUTHOR>

Why aren't you there. Mine was a jr VB.net dev job that paid about $15hr. I decided that I was better off freelancing for rent and doing a startup than that. <comment><USER2> Employer: US Airways Group

Position: Co-op Propulsion Engineer

A Boeing 757 leaves somewhere traveling at 500 miles per hour. A ball bearing falls out and the engine blows up. Now, should we initiate a recall? Take the number of vehicles in the field (A) multiply it by the probable rate of failure (B) then multiply the result by the average out of court settlement (C). A times B times C equals X. If X is less than the cost of the recall, we don't do one.

<comment><USER3> The first rule of Fight Club is: you do not talk about Fight Club!

<comment><USER4> You broke the second rule...

<comment><USER3> Damn...

</comment></comment></comment></comment><comment><USER5> Senior Software Engineer at a large co. that was still somewhat connected to its startup roots. Then it got acquired by a huge co. with a real stifling culture and it was time to leave. On the plus side, I made good money during that period, and managed to save a bunch, so now I'm using that to bootstrap my own startup.

</comment><comment><USER6> My last job was at a startup (they preferred the term 'early growth faze company') developing mobile security software. I was in charge of all of the development efforts and personally built the first generations of the Anti- Virus, Call Screener, and SMS Spam Filter for SymbianOS. I left because I was dissatisfied with the non-technical management above me.

</comment><comment><USER7> Working down at the video game plant. Had done some years at different developers, then found one that was kind of small but ambitious and very talented. They got bought by the big publisher and eventually the wheels came off. Good pay, great royalties, but I like the broke-ass startup life better.

</comment><comment><USER8> Software engineer at a major storage systems manufacturer. It was an indefinite term contract and they downsized.

</comment><comment><USER9> intern at yahoo sunnyvale, developing <http://yodel.yahoo.com>

</comment><comment><USER10> senior systems engineer. that was the last full time job i'm ever gonna have, i don't care what it takes.</comment>


Pixar: Getting over embarrassment - <AUTHOR> http://blog.protoshare.com/2011/04/getting-over-embarrassment-and-getting-done/ <comment><USER2> Summary of Ed's talk:

\- Success hides problems. Big organizations fall slowly.

\- Daily reviews. Everybody gets reviewed everyday; this removes the embarrassment factor so that no one waits until "it's perfect" before presenting.

\- Communication structure is not the same as organizational structure. A firm might require a strict hierarchy to ensure control, but that doesn't mean everyone should be prevented from talking to anyone else.

\- The only measurement that matters is whether the team functions together.

\- Don't copy successful products, even if they're your own product. Either invent something new or fix an unsuccessful product.

<comment><USER3> One thing I noted in the talk is that Pixar didn't force their employees to work over christmas before diving into fixing Toy Story 2. I have been close to two groups that have had to do this and it is clear that the morale hit is never worth it and those few extra days are talked about for _years_ in a very negative light. What they did is just as important as what they didn't do.

</comment></comment><comment><USER4> That whole talk is a gem of the first order. Don't skip over it thinking it's JUST about iteration. The segment on what it means to keep your crises small is especially good. It's also the single best explanation I've seen as to why Pixar has never released a dud.

Meanwhile, their less enlightened, less capable, and frankly less humble competition just assumes that most movies will end up losing money, and that what REALLY matters is getting a handful of hits that can offset endemic failure.

<comment><USER5> > Meanwhile, their less enlightened, less capable, and frankly less humble > competition just assumes that most movies will end up losing money, and that > what REALLY matters is getting a handful of hits that can offset endemic > failure.

Without having watched the talk, isn't that the _fail early, fail often_ startup mantra?

<comment><USER4> In the case of $100 million movies made by studios that are the better part of a 100 years old? No, not even close.

<comment><USER6> Studios aren't equivalent to startups here - that would be the producer/director who make the movie. Studios are effectively VCs.

</comment></comment></comment></comment><comment><USER7> The tendency to only show things "when they're done" means we only produce things we're able to complete without any help.

By getting over the embarrassment of showing someone a product that sucks or isn't complete, we position ourselves to get feedback and assistance -- which means we can make things that we couldn't have made without help.

</comment><comment><USER8> I worked at a world famous design studio. I was horrified to discover that there could be no 'brain storming' - everything you said or every drawing you showed would be judged and held against you. It made it almost impossible for someone to come up with a truly creative solution. You had to be very careful and measured about everything you said.

<comment><USER9> That's an impression I got from reading the post (no time to watch the video). I also thought: Well, how many times do you get to suck before they think you don't belong there? Some ideas do need time to percolate and encapsulating them in a soundbite can lead to rejection without understanding the underlying depth. [This was previously posted elsewhere minutes ago due to a mis-click.]

<comment><USER10> >Well, how many times do you get to suck before they think you don't belong there?

As often as possible. Everything I've ever read about creativity starts with some variation of "Do you want a good idea? First have lots of ideas."

As a manager, I don't have a problem with people "sucking". I have a lot of issues with people being lazy.

<comment><USER9> I want to also add: My comment might be misinterpreted to think the person sucking is someone who's incompetent. That's not what I meant at all. But anyone can have a run of plain bad ideas before they strike gold. Or even silver.

</comment></comment></comment></comment><comment><USER11> Very important thing to get over. In concerns to programming: The majority of what you code will look like shit to most people. Who cares. Do it anyway and learn.

</comment><comment><USER12> This is interesting, because I've heard at Apple you don't demo anything that is not as polished as you can make it. E.g. layout perfect, no "Lorum ipsum" text, everything must be thought-through and a realistic example use case.

<comment><USER13> It might depend on who you're giving the demo to. If it's an internal team phase things may be informal — but if you were presenting something for Steve it should be tight.

</comment></comment><comment><USER14> My issue with being evaluated very often is that I find myself fixing small things so I have something to show rather than working on bigger issues.

However, the "just do it" idea of the post is great.

<comment><USER4> It's also important to remember who you're presenting to. If they're people who really understand the process, the constraints, and - most importantly - where they want the project to go, then the feedback is likely to be excellent. Indeed, the resulting conversations (and ideally, that's exactly what they are) can be some of the most creatively inspired bits of the process. Also, very productive, in that they are likely to focus on the removal of obstacles.

On the other hand, if you're presenting to people who really don't have a sense of the big picture (and who are often insecure about their position and judgement), you tend to anticipate their tendency to (a) fixate on small, rough bits and (b) issue VERY specific instructions about those elements (often, while ignoring the rest). This is the exact mechanism by which incompetent managers paralyze creative talent, reducing any project to a derivative effort that hews as close as legally possible to "whatever worked before." In this case, management IS the obstacle, and good luck getting them to remove themselves.

In these situations, you're no longer focused on the work. You're thinking about dodging bullets and managing up, hoping to find the best 'compromise' between a great creative solution, and the need to placate the fragile egos of people who probably don't belong in their jobs. The awesome thing about Pixar is that they really seem to get this, and invest considerably resources in creating and staffing the kind of environment where people CAN iterate freely.

<comment><USER15> But the question is, would _daily_ iteration reduce the rate of bikeshed[0] arguments? I guess I could imagine how it would make it worse, but it seems more likely that it would make it better: the people who know nothing about the process (and don't care) won't be at the daily meetings, and the people that know just a bit about the process will be there and will learn all the details of the big project (i.e. the atomic power plant, to continue the original metaphor).

[0] <http://bikeshed.com/>

</comment></comment></comment><comment><USER16> This is actually analogous to that we teach in User Interface Design 101. There are distinct advantages of showing very early stage prototypes. When we show it to potential users they would be perfectly honest about what they don't like. Try it with a very finished product and the users would be polite and not mention the issues they faced.

Always, always start with putting a very bad replication of the product in front of your users. Paper prototypes work very well.

</comment><comment><USER17> In my case this is great advice, thanks for sharing.

I've been meaning to polish it but... I think I'm going to put all my code in github now!

</comment><comment><USER18> Love this, get out there, prototype, iterate, try things. The longer you wait to "release" the longer it will take you to be "done". If ever.</comment>


EF5 Tornado going through Tuscaloosa, Alabama (amateur video) - <AUTHOR> http://www.youtube.com/watch?v=TIx26tN6pCk

<comment><USER2> That was amazing! It looks like youtube is where the real reality tv is.</comment>


For All The Hype, Does Israel's Iron Dome Even Work? - <AUTHOR> http://talkingpointsmemo.com/dc/israel-iron-dome-research-intercepts <comment><USER2> This has been discussed a few times. I think the short answer is that we don't have enough information to verify Postol's theory.

But I think there's one major problem with his analysis. Iron Dome works by tracking rockets and intercepting those that are heading towards a populated area.

It ignores rockets that are heading towards areas where casualties are unlikely.

So his argument - that the system is useless because warheads aren't being destroyed - is flawed. If the tracking system works then knocking rockets off course is a success. The warheads don't matter as much if they are redirected towards unpopulated areas.</comment>


High-speed anonymising network proposed - <AUTHOR> http://www.bbc.co.uk/news/technology-33639436 <comment><USER2> [https://news.ycombinator.com/item?id=9930929](https://news.ycombinator.com/item?id=9930929)

</comment><comment><USER3> This paper seems to be all about efficiency, but does not seem to address why people perceive tor to be slow, which is simply that the available bandwidth is less than demanded, i.e, network congestion.

As far as I know, "my tor node won't forward fast enough" is not a problem that anyone actually has. Probably because every existing tor exit node has <= 1Gbit bandwidth.</comment>


40 maps they didn't teach you at school (but should have) - <AUTHOR> http://www.boredpanda.com/fun-maps-they-didnt-teach-you-in-school/

<comment><USER2> I'm pretty sure that:

1) They should not teach these maps in school

2) All of these were taken from [http://reddit.com/r/mapporn](http://reddit.com/r/mapporn)

</comment><comment><USER3> Interestingly, according to this data, the country with most attractive citizens is Norway, which is also one of the countries with bigger breasts, and also on the second category regarding IQ. Also happens to be near the top countries most welcoming to foreigners. It is also one of the 22 countries never invaded by England.

<comment><USER4> Also, as opposed to what the map shows, the Netherlands wasn't invaded by England, it was the other way around. William II of England was Dutch (aka William of Orange).

[https://en.wikipedia.org/wiki/Glorious_Revolution](https://en.wikipedia.org/wiki/Glorious_Revolution)

Also, according to the maps, the Dutch enjoy greater freedom of press and possess larger penises than Americans. Having lived in both countries, it rings true to me. Not sure whether we can chalk it up as a pro for the Dutch though. As for penis size: we all know it's about girth, not length. As for freedom of speech: the Netherlands has politicians like Geert Wilders, who continues to utter hate speech in public. Dutch courts seemingly have no way to convict him.

<comment><USER5> The Netherlands and England fought several wars in the 17th Century.

[https://en.wikipedia.org/wiki/Anglo- Dutch_Wars](https://en.wikipedia.org/wiki/Anglo-Dutch_Wars)

<comment><USER4> On sea. Nowhere in that article did I read that England invaded the Netherlands. The inverse did happen, as stated previously.

</comment></comment></comment></comment><comment><USER4> Regarding map No. 1: Saks isn't based in Alabama, but in NY.

[http://en.wikipedia.org/wiki/Saks,_Inc](http://en.wikipedia.org/wiki/Saks,_Inc).

I'd also say that Microsoft is a more famous brand from Washington than Starbucks is, but I could be wrong.

<comment><USER6> That map was made up. Most states would have the same most popular brands. Advertising is national.

<comment><USER7> Read the post again. It displays, for each state, the most popular brand that originated in that state. Not which national brand is the most popular in that state.

<comment><USER4> I found the original: [http://steve-lovelace.com/the-corporate-states-of- america/](http://steve-lovelace.com/the-corporate-states-of-america/)

"For each of the fifty states (and the District of Columbia), I selected a corporation or brand that best represented the states. My criteria are subjective, but in each case, I picked a brand that a) has ties to that state and b) is still in business (as of 2013)."

Of course, Saks doesn't have any ties anymore to Alabama, so it doesn't even fit the author's criteria.</comment></comment></comment></comment>


Motorola F3: The anti-iPhone? (2007) - <AUTHOR> http://earthlingsoft.net/ssp/blog/2007/10/motorola_f3 <comment><USER2> If by "anti iPhone" you mean "the zombie apocalypse phone", then yes, absolutely.

It's as well-tailored to the third would (for which is was specifically designed) as the iPhone is to the first. For instance, it doesn't use USB to charge (computers are hardly ubiquitous), and you can navigate all the commands using installed voice prompts, since basic literacy isn't a given either.

Something else not reliably found everywhere: electricity. The F3 responds with an e-ink display that allows 500 hours of standby between charges. Dirt floors, on the other hand (to say nothing of paths and roads) are standard, which is why the one-piece membrane on the front is so well-placed. Unlike a many 'smartphones', it's not easily thwarted by moisture or grit.

Indeed, at $22.59, it may be the smartest phone on the planet.

<comment><USER3> I have one of those, I haven't charged it in a year. Let me check what state it's in.

Fun fact: It uses the same jack for the headset as for the charger. Also, it uses a low-frequency pulse in its speaker for vibration instead of a motor. I wonder how I know all this, I must have opened it up at some point.

EDIT: Jesus, it works fine and the battery is full. Apparently, this phone is something to keep in the car in case of emergency. A year unused and the battery is still full.

<comment><USER4> I doubt that it's physically possible for a phone battery to last a whole year at 100% even when it's turned off.

</comment></comment></comment><comment><USER5> I actually just ditched my iPhone for a phone only marginally more sophisticated than this[1], but with the same standby time.

I thought about trying to find an F3 instead, the only thing that put me off was the apparently very crummy text messaging. That's one thing that I still wanted to do.

It's quite hard to find a decent quality non-color-screen phone, though. Nokia still make at least one, but to cut costs they put the earpiece on the back side of the handset (combined with the loudspeaker). Which apparently makes it hard to talk on sensibly.

I think if a manufacturer took current technology and built a phone with a ten year old feature set and no colour screen, to a ~$80 RRP budget, they could get months of standby time and a tiny light device that would last for decades.[2]

[1] [http://projectgus.com/2010/09/my-no-iphone-no-smartphone- exp...](http://projectgus.com/2010/09/my-no-iphone-no-smartphone-experiment/) (I submitted it the other day but didn't get much interest, hope this doesn't come across as spamming.)

[2] Not sure how big the market is, though. Even in the "third world" countries everyone is talking about, fancy phones are usually a big status symbol.

</comment><comment><USER6> $19.99 at NewEgg. Just picked one up.

[http://www.newegg.com/Product/Product.aspx?Item=N82E16875209...](http://www.newegg.com/Product/Product.aspx?Item=N82E16875209145)

</comment><comment><USER7> A friend of mine bought one of these because he thought it would be cool. And it was pretty cool, though keep in mind, it's just a phone. so my friend ended up getting an iphone (well, a friend of his broke her iphone, so he got a free broken iphone, and being that sort of person, he successfully repaired it.)

Anyhow, once I visited the guy and I left my phone charger at home, so after my nokia e90 died, I borrowed his third world phone. My t mobile sim 'just worked' and it seemed like a fairly competent phone overall... but really, voice communication is only about 10% of what I use a phone for, and that's all this thing can do, so for me, it's of limited utility.

</comment><comment><USER8> I used this phone for over a year. Texting is incredibly awkward, all lower- case, and you can only see seven characters at a time. I got used to it, but I preferred not to. Address book is stored only in the SIM, which I think is fairly unique in the US. MMSes show up as weird bits of text with URLs, but that might have been a by-product of T-Mobile's service. It was solidly constructed, and had excellent reception and battery life.

I'm not sure I saw the "500 hours" of standby time, but I doubt I went 20 days without a text message or a phone call. Heavy use and I still had to charge it every couple of days. Regular to light use and I could go a week.

<comment><USER3> I can second this, for the bit of time that I used it, I remember the battery lasting a few days (nowhere near 20).

</comment></comment><comment><USER9> I use an F3 as my primary phone. I bought it in late 2006 just to avoid making an investment because there were a lot of rumors at the time about a new phone made by Apple.

One of the biggest advantages for me was dropping out of the feature-upgrade rat race entirely. My phone is exactly as out of date now as it was when I bought it and I expect to have it at least another 10 years. It looks brand new, sounds great, is easy to use and has an insanely long battery life (though a dictionary would be nice!)

It's not for everyone though, and I can see how 'downgrading' might be difficult (especially for addicts).

</comment><comment><USER10> Even though it's been on the market 3-4 years, this phone is still held up as the example of a cheap, no-frills phone. It was even nicknamed the "zombie phone" and received a bit of discussion on a recent Engadget Mobile podcast:

[http://mobile.engadget.com/2010/08/14/engadget-mobile- podcas...](http://mobile.engadget.com/2010/08/14/engadget-mobile- podcast-050-08-14-2010/)

</comment><comment><USER11> As an owner and former user of an F3, I really like the simplicity and ruggedness. I wish that Motorola had continued to develop it to address its terrible shortcomings: lettering was rendered semi-1337-style through old- school LED typography and it could not display an entire 10 digit number across its screen. I don't know why they bothered to support text messaging at all because it was utterly unusable.

I still keep it around as a hurricane backup as my iPhone SIM plugs in to make calls without issue.

</comment><comment><USER12> For a simple cell phone and texting device, I miss my old Samsung T509. It had a super slim candybar form factor that slid in and out of my pocket easily and didn't create a bulge in my pants. Looks like you can get a new one for about $20.

Of course, as well as it served for phone calls and texts, if you tried to do anything more with it (run java apps, add an mp3 ringtone), it disappointed.

</comment><comment><USER13> I wish I could own this phone, but I _do_ text a lot (and, in fact, only "phone" people by swapping voicemail messages.) If it had a QWERTY keyboard (and a screen that could manage text, though hopefully still e-ink) I'd be in love. I can imagine such a thing as the ultimate low-end product from RIM.

</comment><comment><USER14> I've had one of these since 2008, it's been a useful phone to have for hikes or trips where you won't get charge.

</comment><comment><USER15> Wow, I wasn't aware something like this even existed.

With that amazing price point ($22 on Amazon) I'd almost buy one right now as I've been wanting to move away from cell phones on the whole, but the inability to wire contacts in and the horrific SMS capabilities are making me hesitate.

</comment><comment><USER16> Keep in mind, the F3 doesn't work with CDMA networks (like Verizon). There theoretically is an F3c that _does_ work with CDMA networks, but I've been looking for it for weeks, and haven't had any luck. If you find a source for the F3c, please let me know.

<comment><USER2> [http://www.amazon.com/Motorola-Motofone-F3-Dual- Band-1900-In...](http://www.amazon.com/Motorola-Motofone-F3-Dual- Band-1900-International/dp/B0013A7KMW)

<comment><USER16> From the phone's "features": "This unlocked cell phone is compatible with GSM carriers like AT&T and T-Mobile. Not all carrier features may be supported. It will not work with CDMA carriers like Verizon Wireless, Alltel and Sprint."</comment></comment></comment>


Distributing Rails Applications - A Tutorial - <AUTHOR> http://www.erikveen.dds.nl/distributingrubyapplications/rails.html <comment><USER2> > Rails (0.14.3)

This tutorial is a bit dated, don't you think?</comment>