The startup freelancer - <AUTHOR> http://vassvdm.ghost.io/the-startup-freelancer/ <comment><USER2> Startups are cash-poor, prone to bankruptcy, and full of insane deadlines requiring people to pull small miracles just to make payroll.

Would love to hear more about what makes them ideal freelance clients. As a former contractor/freelancer, I specifically made a point of staying far, far away from these kinds of clients.

<comment><USER3> I've been doing this full-time for the last year. It's worked well for me in the SF area because it's a lot easier to get in the door for new companies/products than with established companies that already have dev teams. I also like working on brand new products and technologies and startups are great for that. :)

The main lesson I've learned working with startups is that consulting is always easier working for people that are spending other people's money. The guy who spent the last year saving $10K of his personal earnings to build his genius daily deals for big data social mobile app? He's going to try to squeeze you for everything he can get. The startup that raised a $1.5MM series A? Going to treat dealings like a business negotiation and probably be less emotional to deal with.

That being said, you still want to manage risk based on who you're dealing with. If I'm consulting for a company with $50MM in revenues and 200 employees, I'm not worried about them going under tomorrow, so I'll let them pay me monthly net-30. If I'm consulting for a 5 person startup that's operating on a seed round, I'll usually require weekly net-7 or net-15. I've started avoiding companies that seem sketchy or are operating off personal savings, but if I was going to work with those types of clients in the future, I'd do a prepaid retainer.

Of course, this varies on a case-by-case basis so YMMV.

<comment><USER4> what does "net-7" mean?

<comment><USER5> I don't know, but I infer that it should mean getting paid on the end of each week. If the startup suddenly goes bankrupt, you only lost a week.

<comment><USER6> Technically "net 7" would mean payment in full within 7 days of completing work (or invoicing) rather than at the end of each week.

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

</comment></comment></comment></comment></comment><comment><USER7> I am in the exact same line of work as the author. I can't imagine working the way he describes.

It's great that he's made this lifestyle work for him, but I'm not convinced I'd like to be one of his clients. A technology company with a developer on staff one day per week? Coordinating a project is difficult enough when everybody is full-time. ("Sure thing, I'll tackle that bug in six days" is not a recipe for a functional sprint.)

My solution has been to charge hard at whatever milestone I've committed to, working as a de facto team member, and then taking the next month off. This works well with my lifestyle, since I try to take each project in a new city and I live cheaply.

What I would say to the author: you want fulfilling? Participate in the optimistic urgency of a new tech venture fully - then take your time off when you've finished. If you can't afford to spend that much time away from developing your startup, then how can you expect your clients to wait while you take time off from theirs?

<comment><AUTHOR> I agree that the way I work is definitely not for everyone, and I only accept projects where I am confident that the client sees eye to eye with me. It wouldn't work if I was the only developer working on the project. There are several other, more junior developers on the team who work more hours than I do.

The client is very happy with the arrangement because it ends up costing much less than if I was on the team full-time and he is sure that every day I work is a day where things actually move forward significantly. He rather gets frustrated when freelancers charge several days of work and little progress seems to occur. There is at least a perception of lesser waste of time/money when work is concentrated over a small period of time, and I would argue that there is less actual waste.

</comment></comment><comment><USER8> I think startups are a viable option for many types of freelancers now.

I've been freelancing in mentoring start-ups for the last 6 months. Everyone told me startups have no money and that it's a fruitless pursuit but here i am talking to 1 new startup almost every single day.

I always give them the first session free (no time limit) and more than two- thirds come back for a paid session.

I've mentored around 60 startups in the last 3 months alone (all around the globe).

Most fun i've ever heard. Incredibly rewarding. In fact, i'm now working on building an actual mentoring platform.

I spend the rest of my time consulting small to medium size companies.

</comment><comment><USER9> I am amazed that you can get by on 10 hours of work per week.

<comment><AUTHOR> Well, my own startup is also making a little money, and I resort to a couple of life hacks to get extra income and reduce costs. I'll write another post about that soon.

<comment><USER10> Would you be willing to detail said life hacks a bit?

</comment></comment></comment><comment><USER11> I'm also thinking about doing some freelance work right now.

One thing I'm unsure about is if it's wise to do consulting in the same space my startup is in (fitness & health data aggregation and analysis), or if I should stick to unrelated technical work (java, elasticsearch, angularjs), to avoid potential trouble with non-compete agreements and such.

<comment><USER12> Go unrelated, conflicts do your head in.

Client: 'What should we do now?' You: We'll I've thought on this for ages, here's the answer but it's hard one knowledge from my startup, how much do I share?

</comment></comment><comment><USER13> I've been doing this for the past 7 years, from big data to social sites, to single page apps to chat/video applications and more. I have to say its been the best way to learn about different technology and to solve new problems. Also the fast pace environment is something I like.

<comment><USER14> Do you also restrict your time to, say, 10 hours per week as OP? How long do you work on a single client/project?

<comment><USER13> Depending on my workload sometimes I do that.If the client has more then enough work to keep me busy I wont hesitate to make room from them. As for how long, some have been short as a few months, others 4-6months+ the longest was around 2 years.

</comment></comment></comment><comment><USER15> (You may wish to remove the 'Welcome to Ghost' post on your blog)

<comment><AUTHOR> Thanks, fixed.

</comment></comment><comment><USER16> How do you find these clients? I ve done this kind of work arrangement, and like it, but replicating this kind of arrangement doesnt seem to be so easy, at least to me.</comment>


Not all MBAs suck at startups. Learn how to spot Durant MBAs. - <AUTHOR> http://www.humbledmba.com/not-all-mbas-suck-at-startups-learn-how-to-sp

<comment><USER3> Site is down. Text from Google Cache:

===

Not all MBAs suck at startups. Learn how to spot Durant MBAs.

I've been meaning to write this post for awhile--since I originally started this blog actually. When I originally warned startups to beware of MBAs, it was not to say all MBAs are bad for startups, but that one should be careful when working with one in an early stage startup. To be clear, most are bad for early stage startups, but certainly not all.

This post is about learning which MBAs get it and which ones suck. Any why.

Why All The Hating?

It has become hip to bash MBAs. Some of my favorite rants have been from Mark Suster, Stu Wall, and DHH. My overarching take on this discussion is that MBAs are more useful post-product-market fit and less helpful (or outright bad) pre-product market fit. When a company is in the exploration phase, all the skills of an MBA are backwards. MBAs are sophisticated thinkers that can create high quality business plans. But in the pre-product market phase of a company, the entrepreneur's job is to find the repeatable business model, wherever it may be hiding. At this stage, iteration trumps planning. Speed trumps quality. Perseverance trumps intelligence. Passion trumps sophistication.

Because of the structure and curriculum of business schools, MBAs are better trained for the later stages, when the goal is optimizing value, not finding it. My favorite analogy comes from a commenter on Hacker News:

"I like to think of this topic using an automotive racing analogy: Fortune 500 companies are the formula 1 cars. They need a great big team to perform efficiently, and minor tweaks applied correctly can yield significant results. The MBAs are the specialists who work the electronics and the advanced controls for the race cars. A team working on a formula 1 car could find a way to increase down force by 5%, or they could install a GPS system to analyze turns and scrape 1/100s of seconds off of lap times, and that edge could help them win.

Startups are cars with a very different purpose. They are project cars, and they have 1 purpose: to go. Forget GPS systems and down force. These cars need tires and a working steering wheel. It would be a mistake to think about installing spoilers on a car that doesn't have all 4 tires, just as it would be a mistake to worry about ideal liquidity ratios in a startup. Entrepreneurs are the mechanics who decide to take on these 'project cars'. Eventually, as the car project develops and grows, specialists (MBAs) can be brought on to find the minor, yet precise changes that will improve the car's results."

Of course, this is not by accident. Business schools teach what the vast majority of its students need: specialist skills in large-scale optimization. Entrepreneurship, it turns out, is a very different beast that requires a very different academic approach.

Business School is not Entrepreneurship School: Sloan vs. Durant

Steve Blank has been advocating for the Durant School of Entrepreneurship.

Billy Durant founded GM, was fired, founded Chevrolet, was fired, regained control of GM, and was fired again. He was a true start up founder, but very few have ever heard of him.

It was Alfred Sloan that later became CEO of GM, grew the company, invented cost accounting, and effectively founded the modern corporation. He was an accountant and MIT named their business school after him.

Business schools teach Sloan-style business fundamentals. It's not a bad thing --it's just not relevant for pre-revenue, pre-product market fit companies. During the iteration and customer discovery phase, companies need founders versed in the Durant School of Entrepreneurship.

Learn how to spot the Durant MBAs

When hiring or picking co-founders or doing investment due diligence, you're searching for data that predicts success. The list below is a collection of possible data points that can indicate whether someone gets it--whether they have a bit of Durant in them.

1\. Previous Founder Experience

The best entrepreneurship school is doing start-ups. Nothing replaces the education gained when your product fails, when you struggle to make payroll, when you raise money and become accountable to investors, when you build and sell products people want, when you reach profitability, and when you go bankrupt. All these experiences provide perspective that make formal education more valuable by providing a unique lens to judge the relevance of each lesson.

Perhaps, more importantly, anyone with previous founder experience, that wants to stay in startups is proving through their actions that they have real entrepreneurial determination. As Paul Graham often says, the most important predictor of success is determination.

2\. Previous Startup Experience

Size matters. Doing product management for a 100 person startup is not the same as being a first employee, but it is more relevant than coming from a McKinsey. I often tell first year MBAs to spend their summer internship working for the smallest company possible. My first venture back start-up experience was at MocoSpace when it was being run out of an incubator--it was an incredible experience for seeing how startups work.

3\. Technical Experience Building Products

It's painful to work with people that have never built anything. Many VC won't invest in non-technical founders. As a non-technical founder myself, I know it's a huge weakness (I did however just code my first video game...). My first startup was building lofts in college. It wasn't super technical, but it forced me to put together an ecommerce website, an engineering process, buy supplies, etc. You don't have to be technical, but it's better. If you're not technical, you still have to have experience building products. As Brad Feld says, great entrepreneurs have a complete and total obsession with the product.

4\. Write Something People Read

Y Combinator founders will see the immediate corollary...Paul Graham's overarching advice is that the most important task at first is to build something people want. A blog is a product that people make a decision to read or not read. Anyone that has a well-read blog has at least proven that they can create something that other people find valuable. The same goes for having Twitter followers, a high Hacker News Karma score, etc. For MBAs, putting yourself out there on the internet can be far more powerful than any resume. I love talking to people that email me their Hacker News username, because I can then go learn a lot about them and see quickly how they're perceived in the hacker community.

5\. Read the Right Stuff

I have generally found that most successful founders I know have at some point read a ton of blogs and books. Paul Graham calls his essays the startup FAQ. Why would anyone not read them? I've put together a pretty good recommended list. At some point, you need to stop reading and start building--but everyone should have at least read through a good portion of this stuff at one time or another.

6\. Hang out with Startup People

My favorite part about living in San Francisco is that it sometimes feels like every person I meet works at a startup. This network of friends provides knowledge transfer, inspiration, collective support, etc. I can't imagine doing a startup without it. It's not just Silicon Valley--If you're in Boston, you should know the guys at betahouse. If you're in Colorado, you should know the Techstars guys. Every city has a startup center, be there. On that note, one of the toughest parts about business school for the would-be founder is that you hang out with consultants and bankers all the time.

7\. Become a Domain Expert

As Mark Suster says, domain experience gives entrepreneurs an unfair advantage. My co-founder Evan Konwiser brought incredible domain expertise to FlightCaster. Spend 5 minutes reading his blog, and you'll quickly understand that he understand more about the travel industry than any person you've ever met.

Beware of MBAs that fail all or most of these items--odds are they will doom your startup. And for those aspiring MBA entrepreneurs out there...stop fiddling with your B.S. Powerpoint deck and get started on this list.

<comment><USER4> Interesting points even if we don't agree with all of them - most of all, for the importance of a) not typecasting everyone with a particular piece of paper and b) emphasizing the best things that business-y people could bring to the table.

Upvotes for the cached version, thanks!

</comment></comment><comment><USER5> _MBAs are sophisticated thinkers that can create high quality business plans_

HAHAHA This person has clearly never been to an MBA school. If only my peers were sophisticated thinkers. I'd say less than 10% of MBAs are sophisticated thinkers (and by extension great problem solvers) and those 10% are the ones you WANT to hire. The MBAs who can just churn out business plans - <USER2> those.

<comment><USER6> I have a sample size of one school to pick from, but I have to agree with this. The overwhelming majority of MBAs are quite normal in their outlook. I graduated from the #1 ranked MBA in Canada and I believe it's top 20 in the world (depending on whose skewed, biased ranking system you're using) and I met only 2 or 3 people who thought "big". Most people I met were getting MBAs because they wanted to move up in the organization or move away from engineering and get into management.

</comment></comment><comment><USER7> Great points. Though one tangential thing is - MBA school is largely not funded and I believe this largely cuts out the ability of people with MBA's to be in a startup at the early phase. I do not doubt the fact that a lot of MBA's and lawyers are very smart innovative people, just that the cost of their education often undermines their ability to take risk.

<comment><USER8> That and life stage. By the time you graduate from b-school a spouse, family and house are coming soon. The years in which one can earn ramen wages are precious and b-school takes up two of them, often at what might otherwise be your living expenses vs experience peak.

</comment></comment><comment><USER9> US bschools have been overly focused on banking and consulting for the last 15 years (or more). Innovation programs have tried to balance that bias, but in my experience those programs have mixed results. Someone with certificate in entrepreneurship or innovation are trying to use coursework as a proxy for being an entrepreneur. The best entrepreneurs may have gotten an MBA and maybe a certificate in entrepreneurship but those are not future indicators of entrepreneurs.</comment>


This Election: Carpool to Vote - <AUTHOR> http://jamrides.com/vote

<comment><AUTHOR> Sorry for promoting myself a little bit here.

I just implemented this new feature last night. Good idea? Bad idea?

I know carpool is good, voting is good, so it's gotta be good.

I just wish I have done it earlier.</comment>


Asking to skip TDD - <AUTHOR> https://medium.com/@anicolaspp/asking-to-skip-tdd-6babdfcbe69a <comment><USER2> I liked TDD when Uncle Bob explained it. But I'm turned off by this blog post. Seems so dogmatic.

<comment><USER3> Uncle Bob has a track of proposing things that sound good when he talks about them, but when it comes to reality, the idea is brain-dead or debatable. I wouldn't be too eager to quote him.</comment></comment>


Creating maps using R, Deedle and F# type providers - <AUTHOR> http://www.clear-lines.com/blog/post/Create-maps-using-R-Deedle-and-FSharp-type-providers.aspx

<comment><USER2> mainly talking about f# here...

this looks like the classic example for f# type providers. there are a few talks tomas petricek[1] has given on that topic. the relevant talk is one of the skillsmatter talks[2]

i'm not sure if they're all publically available, but they used to be at least.

edit: but basically the summary is that you can do really cool things with type providers and have your ide(visual studio) give you full completion on parts of data you want to analyze. kinda like re# but without having to generate half a million lines of xml for web services.

there's also book coming up with chapters about it from tomas [3]

[1] [http://tomasp.net/](http://tomasp.net/)

[2] [https://skillsmatter.com/members/tomasp#skillscasts](https://skillsmatter.com/members/tomasp#skillscasts)

[3] [http://www.manning.com/petricek2/](http://www.manning.com/petricek2/)

<comment><USER3> I've heard a lot about the amazing-ness of type providers, but no-one seems to know how they work aside from saying something betwen they generate types for you, and they generate intellisense for you.

I'm sure it all makes sense once you go ahead and play with it, but it looks like I'll have to be watching some videos to grok what is really going on.

<comment><USER4> Are you curious about using them or implementing them? What level of detail are you looking for?

<comment><USER3> I think its knowing what's reasonable to expect from them and what's not reasonable i.e. what is static, what is dynamic, if there are artifacts how do they get created, what if the data schema is dirty...

some of these questions I can answer myself just playing around with them, but I think I'd have to be comfortable implementing them before being comfortable using them.

<comment><USER5> Slightly blowing my own trumpet, but if you want a brief overview of the basics this might help: [http://blog.mavnn.co.uk/type-providers-from-the- ground-up/](http://blog.mavnn.co.uk/type-providers-from-the-ground-up/)

<comment><USER3> Thanks! I'll give it a read.

</comment></comment></comment></comment></comment></comment><comment><USER6> A great and easier package to work with for creating maps using pure R is ggmaps: [http://journal.r-project.org/archive/2013-1/kahle- wickham.pd...](http://journal.r-project.org/archive/2013-1/kahle-wickham.pdf)

Here's an example map of San Francisco I made using ggmaps: [http://i.imgur.com/zdetaKw.png](http://i.imgur.com/zdetaKw.png)

(The map was made for [http://minimaxir.com/2014/04/san- francisco/](http://minimaxir.com/2014/04/san-francisco/) if you want more context.)

<comment><USER4> What makes it easier?

<comment><USER6> Looking at the code used in the OP, ggmaps does not require a dependy on a different _program_ (and it also used a .dll, which may make it difficult to use cross-platform as well.). ggmaps also used ggplot2 syntax, making it easy for style customization which I don't see in the original code.

Although, using a shapefile adds another R package dependency, but not much more LOC. Alternatively, use the maps package, which also contains data for reconstructing popular maps like the world map used.

<comment><USER7> I am a novice in F# and pretty much have no idea about R, but what I can see here is that World Bank Type provider is providing the OP with the data.

<comment><USER6> Correct in this case, but you could use a simple CSV to get World Bank data as well.

<comment><USER8> The benefit of using a Type Provider over an CSV is it provides a strongly typed api to the data. Which gives you tooling (IntelliSense) and makes it hard to impossible to have type errors.

</comment></comment></comment></comment></comment></comment><comment><USER9> and remember if you need a basemap that is more than simply all the countries in the world, you can use openstreetmap.org! Downloads of raw data in various forms can be found at : download.geofabrik.de/</comment>


Ask HN: "Older" developers, what's the next career phase for you? - <AUTHOR> Do you plan to continue hands on development until they pry your cold, dead hands from the keyboard?
Or move into management?
Or do something completely different not in technology?
Or no idea, but concerned about it? <comment><USER2> I make a good living fixing all of the software the twenty-something rockstars leave behind. 40 years programming, more work than ever.

<comment><USER3> How do you find these fixit jobs? Are you brought in as a contractor/consultant?

<comment><USER4> Look at his profile.

> Represented by 10X Management.

</comment></comment></comment><comment><USER5> Late 40s here, really starting to worry a bit about age discrimination. In particular interview hazing via leetcode and hackerrank. I've done a couple of stints as a team/tech lead, currently a lead. I always go back to IC, I just don't like being responsible for groups. Right now I think about how to ride it out until retirement. Looking back I sometimes wished I'd focused on getting into a FAANG 10-15 years ago and gone the fatfire route, but that seems out of reach now.

<comment><USER6> Completely naive question: how strong is your network? Presumably you've had hundreds of coworkers and they know your strengths. Are they still working in engineering? Could they help you get your next job?

<comment><USER7> Most places hiring policies mean you have to go through the same meat grinder, else you'll get accusations of favoritism. A network will get you in the interview room quick though. I think this stops applying at some level higher above. Directors aren't hazed with someone's pet NP-Hard question, I'd guess

</comment></comment></comment><comment><USER8> Late 40s here. I'm going to retire by 50. Then I get to work on my own stuff. I can't wait!

Anyone who saves 20% of their income can retire after 29 work years.

Save 50% and it is 15 years.

<comment><USER9> Any calculator for these figures? I would like to know when would be my retirement age.

<comment><USER8> Save 25X your annual spending and you can retire. If you invest to earn 7%/yr (on avg), you can withdraw 4% forever.

Read the book The Simple Path to Wealth, or the basics in this blog post.

[http://www.mrmoneymustache.com/2012/01/13/the-shockingly- sim...](http://www.mrmoneymustache.com/2012/01/13/the-shockingly-simple-math- behind-early-retirement/)

</comment></comment></comment><comment><USER10> I am 38. I am sort of being pushed into management, both by the company and by my family. But I am finding management is not something I enjoy. I am not a bad leader but I feel drained at the end of day. That feeling of runner's high or in the zone is rarely achieved in meetings or while making reports. After a few hours of programming, I feel more energized than when I had started.

Now I am looking to go back to purely programming positions but I think in long run it will be harder to get paid decently while competing with more and more fresh graduates.

So my plan is to create my own business. Running your own business means a lot of not programming but I want a business that simply give me freedom to choose my projects, when I want to do those, and from where. These freedoms should make up for boring tasks.

One non-tech business idea is real estate investments. I think flipping would be fun or maybe I watched too much HGTV. I enjoy fixing stuff at home though. It gives me same runner's high feeling. For now I am slowly working on my real estate license. I figured that is the best way to learn market and if nothing else I ll save on commission on my next home.

</comment><comment><USER11> I'm 61. I have been "hands-on" for my entire career and these days do significant design and coding in the C#/.Net space. My past includes stints at Oracle and a significant amount of Smalltalk development. I have worked a lot in the DevOps world in the context of Microsoft and GitHub tooling.

I like to think I have a good combination of leadership, communication, presentation, and technical skills. THis allows me to help companies conceptualize projects. I had opportunities to move to sales, management, etc. but could never let go of learning and applying the technology directly.

</comment><comment><USER12> Sales Engineering is a great late stage career if you have good soft skills

<comment><USER13> How does one get into this out of curiosity, and what sort of salary can you expect?

</comment></comment><comment><USER4> I'm 35. I've been a freelancer for the past 5 years. There are three paths directly before me:

* Move into management. People have been pushing me in that direction for a while now and I've resisted. Recently, I've discovered that I don't need to actually type the code myself to get the same enjoyment and sense of accomplishment from building something. So, I've been considering it.

* Start my own one-man company. I have no idea what I would make. The only industry I know anything about is web development and startups, so finding good problems to solve has been challenging.

* Double down on freelancing/contracting. I make good money with the handful of clients I have at the moment, but I could make a whole lot more with only a little more effort. I could also focus on finding a larger variety of problems to solve instead of just frontend web development.

As for which path I'll take... ¯\\_(ツ)_/¯

<comment><USER5> Did you seriously read "older" and think of yourself at 35?

<comment><USER4> I'm not the youngest person to post in this thread. Did you have a point or did you forget your medication again?

<comment><USER14> Whoa. please don't cross into personal attack.

[https://news.ycombinator.com/newsguidelines.html](https://news.ycombinator.com/newsguidelines.html)

<comment><USER4> So other people can attack me with impunity and I can't respond at all? I thought my response was mild compared to the original comment.

<comment><USER14> I didn't read that comment as attacking you, but rather as a variation of what older people always say to younger people: "you think that's old? you're just a kid". It's a cliché, but it isn't mean. It's basically a kind-hearted way of pointing out that the younger person has a lot of life ahead, with a touch of wistfulness about their own case. And they in turn get the same treatment from their own elders.

Of course I don't know what the GP actually meant, but this is where one can follow the site guideline that asks " _Please respond to the strongest plausible interpretation of what someone says, not a weaker one that 's easier to criticize. Assume good faith._" By contrast, charitable interpretation can't do very much with "did you have a point or did you forget your medication again". That's why I gave the moderation reply to you rather than to the GP.

</comment></comment></comment></comment></comment></comment><comment><USER15> 45+; blown health, definitely "cold dead hands." I'm an addict. When I can scrape up the concentration im making game mods now. It's a bit like programming in a bottle: how can I do $thing without string operations?

</comment><comment><USER16> I am 50 and code every day. Love it. And I hopefully will continue enjoying it until I die. I am not planning to ever retire. There will be plenty of work opportunities in the future. There is so much badly written software out there that companies depend on, and few developers experienced enough to reliably and safely take over and maintain it. So if you know how to be productive and safe maintaining old but critical software then you will have a lot of value.

</comment><comment><USER17> Early 40s, back in coding after a hiatus of 8 years. Doing freelance work and probably continue on the path for next few years. Trying to find steady client(s) that can take off some hunting pressure.

Also managing some side projects for passive earning streams.

</comment><comment><USER18> Dang, I'm 30 yo and I sit on meetings all day. I'm amazed people are 40+ and coding.

<comment><USER19> best dev i knew was like 60 when i met him. It really depends on the individual.

</comment></comment><comment><USER20> Ox39 now. Contracting last 6 years. IC and contractor before that. Usually direct contractor for whole projects. Desktop and embedded though. 30+ years of green field projects. (How did I get so lucky?) Plenty of work.

</comment><comment><USER21> Mid 50s. I still love programming but am very happy to have teaching, research, and writing too. Hoping to retire to Paris at 62 and everything seems to be on track.

</comment><comment><USER22> Fixing code messed up by younger developers keeps me busy, pays well, allowed me to start a new venture and land a very lucrative gig. No signs of it stopping.

</comment><comment><USER23> I'm around 33. Planning to retire by 40. Will do my own projects after that.

</comment><comment><USER24> financially independent through investments and frugality, retire at 40, may give advice and sit on boards later

<comment><USER8> Good plan. I'll retire at 50. Already active in VC and may get back in the startup game after I quit working for others.

Are you on twitter?

<comment><USER24> No way, hate social media

</comment></comment></comment><comment><USER25> continue hands on development until they pry your cold, dead hands from the keyboard</comment>


Ask HN: What's the best supply chain management software for a small businesses? - <AUTHOR> I'm currently researching on multiple options to manage the supply chain for my business : http://tarunaturals.com/ <comment><USER2> What are your requirements? What do you want the system to do for you?

<comment><AUTHOR> I want the system to manage my supply chain end to end - right from Procurement to Delivery.</comment></comment>


Y Combinator Dataset Of Posts - <AUTHOR>

If anyone is considering making a YCombinator site search or wants to perform an analysis of historical posts then we've made a dataset available at http://www.xirium.com/ycombinator-news20080424.tar.gz<p>The dataset is 100MB, so only download it if you need it. This dataset may be removed in the next week or so. <comment><USER2> > so only download it if you need it > This dataset may be removed in the next > week or so

the latter cancels the former.

</comment><comment><USER3> I've set up a mirror, should be quite a bit faster ;)

<http://weblava.net/ycombinator-news20080424.tar.gz>

<comment><AUTHOR> Thank you. You may also want to mirror user data ( <http://news.ycombinator.com/item?id=173045> ).

<comment><USER3> Sure ;)

<http://weblava.net/ycombinator-news-profile20080424.tar.gz>

<comment><USER4> Thank you.

For what it's worth, here are additional mirrors.

Posts: [http://dl.getdropbox.com/u/315/programming/datasets/ycombina...](http://dl.getdropbox.com/u/315/programming/datasets/ycombinator- news20080424.tar.gz)

Profiles: [http://dl.getdropbox.com/u/315/programming/datasets/ycombina...](http://dl.getdropbox.com/u/315/programming/datasets/ycombinator- news-profile20080424.tar.gz)

<comment><AUTHOR> Thank you.

You also want to mirror the update utility ( <http://news.ycombinator.com/item?id=173354> ).

<comment><USER4> You got it: [http://dl.getdropbox.com/u/315/programming/datasets/ycombina...](http://dl.getdropbox.com/u/315/programming/datasets/ycombinator- news-update20080424.tar.gz)

</comment></comment></comment></comment></comment></comment><comment><USER5> I'm trying to pull it down to one of our university boxes so we can mirror it. It's going a little slow at the moment though (eta 10 hours).

I'll update with the link as soon as it's done.

<comment><USER6> I canceled my download, so hopefully part of 2.5KB/s will trickle down to your connection.

<comment><USER7> Me too :)

<comment><USER8> I've cancelled mine too. Was getting 1.5 kb/s

</comment></comment></comment></comment><comment><USER9> cool! why not set up a torrent and seed?

<comment><AUTHOR> Firstly, that would require installing it :). Secondly, this is being served by a very old server which, from empirical testing, wouldn't cope with this type of protocol. Thirdly, I have to keep borrowed bandwidth to a manageable level during business hours, which ideally means making it tend to zero in the long term. I was anticipating a mirror to continue serving this data but it would have been rude to ask.

Anyhow, I was expecting at most 20 concurrent connections before traffic decayed. I wasn't expecting concurrent connections from 56 unique IP addresses. The server is in London and it is transferring 1.7MB/s, mostly to European users. However, latency and routing to US clients seems to drastically reduce throughput to those users.

Most of the HTTP 206 [Partial] requests seem to be from Internet Explorer, despite this being a relatively obscure choice on this forum. I can only suppose that IE is quite inclined to re-establish connections after a connection briefly stalls. The latter would be because the httpd state creeped 39MB into virtual memory on this 64MB RAM server. This would also be why TCP window scaling didn't occur.

Anyhow, I knew it was risky to use this server to serve relatively large files but it will be used in the future for posting smaller tidbits.

<comment><USER10> I used to run 50 bittorrent downloads simultaneously off of my kuro just fine. A wrist watch could handle it.

</comment></comment></comment><comment><USER11> This is awesome, thanks.

One suggestion: it would be even more useful (for my purposes at least) if you had another version that only included the full posts, rather than having the full posts in addition to having separate files for each comment subthread. The way it is now, there is a lot of data duplication, since a comment of depth n will appear in n separate files.

</comment><comment><USER12> It would be neat if there were comparable datasets available for other sites. For example, I'd be excited about getting my hands on a dataset describing Twitter's user/following graph.

</comment><comment><USER13> Can I import the posts into jaanix so it is available for searching / tagging / saving / editing ?

<comment><USER14> Why not?</comment></comment>


Sears online shopping experience, fraudulent - <AUTHOR> http://latestgeeknews.blogspot.com/2010/09/sears-online-shopping-experience.html

<comment><USER2> Man, I just am so disappointed in Sears in general. They rose up from the ashes, and in the past decade or so have been on this long, long decline.

Every time I walk into their store (Rideau Center in Ottawa), it's just bad attitude from the salespeople and sloppy displays.

The last straw for me was when I was looking for a bed and saw an attractive one in Sears. I was snapping a picture to show my girlfriend, to see if she was interested in it, when this snarky dude jumps out of nowhere and snaps at me, "Hey! No pictures in the STORE."

I mean for crying out loud, I could show her a picture from their online catalog if I wanted to take 20 minutes to dig it up, but this was a quick way to get her opinion on what COULD have been a big sale for them. (Beds are not cheap.)

I don't normally get mad, ever. But I was so angry with this man, I snapped back at him. I turned red, I swore at him, and I walked out. The _policy_ is stupid, the way it was _enforced_ was humiliating, and the man's _attitude_ was infuriating, treating me like I was worse than some thief.

I keep hearing horror stories about Sears, and haven't heard good things about them in quite some time. They're one of those companies that I wouldn't be surprised to hear filing for chapter 11 or being bought out by Walmart eventually.

And frankly? I'd probably smile to hear it.

</comment><comment><USER3> This appears to be a common scam: [http://www.mysears.com/Vizio-32-in- Diagonal-Class-1080p-Eco-...](http://www.mysears.com/Vizio-32-in-Diagonal- Class-1080p-Eco-LCD-HD-Television-reviews/topics/Sears-Fraud-Link-/posts)

This is absolutely disgusting. The product page: [http://www.sears.com/shc/s/p_10153_12605_SPM1880500503P?mv=r...](http://www.sears.com/shc/s/p_10153_12605_SPM1880500503P?mv=rr) has only a tiny indicator that this is offered by a third-party seller, and searching for the seller's email shows numerous other frauds.

<comment><AUTHOR> Iam surprised the product link is live even after they know its fraud. Dont know if its a policy to not take down the site until the investigation is complete.

</comment></comment><comment><USER4> I don't care what company puts their name on the product. $1,400 for a new-in- box 5D Mark II, with the EF 24-105 lens, is all you need to know that it is a scam. You can't even buy a used 5D II body for that price, and for such a high-demand item as this, there is no surplus market.</comment>


Comprehend Systems (YC W11) Closes $1.2mm Seed Round - <AUTHOR> http://www.comprehend.com/comprehend-systems-secures-1-2mm-in-seed-funding/

<comment><USER2> Congrats guys. Way to go for YC Healthcare!

</comment><comment><USER3> Awesome. Looking forward to seeing more of you guys in the future!

</comment><comment> old-gregg Go Comprehend! Palantir of clinical studies!

Congrats guys.

</comment><comment><USER4> Congrats guys!!!

</comment><comment><USER5> Fantastic! You guys are awesome!

</comment><comment><USER6> Wow, congratulations. Looks like a great mix of investors, too.

</comment><comment><USER7> That's amazing!

</comment><comment><USER8> Nice work guys!

</comment><comment><USER9> Congrats gents!

</comment><comment><USER10> What what!?

</comment><comment><USER11> Now can you drop the systems out of the name? :)

<comment><AUTHOR> We've been working on that ever since we picked up comprehend.com = )

</comment></comment><comment><USER12> congrats!</comment>


How To Do What You Love - <AUTHOR> http://www.paulgraham.com/love.html

<comment><USER2> Curiously, today I've make a present to a young girl, a sentence to put in the wall:

       "do what you love, love what you do"

I think the second part of the sentence, is as important as the first one.

About jobs I've follow both routes across years. I started with the "two jobs" route, and after enter in jobs related with what I love, then I switched to the "organic route".</comment>


Show HN: Upload and share files without limits – Secure, anonymous, free - <AUTHOR> https://uploadfiles.io/ <comment><USER2> Just tried it and it's really easy, I like it. What's the max file size?

<comment><AUTHOR> 100GB for free users, 1TB for pro

</comment></comment><comment><USER3> Awesome. What's your plan for preventing abuse?

</comment><comment><USER4> Having used this before I love it. It just makes life so simple.

<comment><AUTHOR> Glad you like it!</comment></comment>


What's wrong with 2006 programming? (2010) - <AUTHOR> http://oldblog.antirez.com/post/what-is-wrong-with-2006-programming.html <comment><USER2> Hello, a few things that changed in the latest 6-7 years:

1\. The Redis project abandoned attempts to have a mixed memory-disk approach, at least for the near future. I want to focus on trying to do at least one thing well and it is already hard ;-) You know, the no-need-to-konquer-the- world approach. Otherwise the project per se is interesting. Redis Labs has a commercial fork that works that way for instance (which _I believe_ was initially based on the Redis "diskstore" branch I was working on in order to replace the former "virtual memory" Redis feature), but not the OSS side. Maybe I'll change my mind in the future but so far I can't see signs of my mindchange ;-)

2\. About threads, we are now a bit more threaded: Redis 4.0 is able to perform deletion of keys in background, Redis Modules have explicit support for blocking operations that use threads, and so forth. However my goal in the next 1/2 years is to finally have threading in the I/O, in order to scale syscals, protocol parsing, to multiple threads but _not data access_. So regarding the 2006 programming, things will be the same.

Basically I still believe that to do application-side paging now that disks are also faster (ratio compared to RAM) is an interesting approach. I still think that using the kernel VM to do so is a bad idea in general, but could work for certain apps.

<comment><USER3> > Basically I still believe that to do application-side paging now that disks > are also faster (ratio compared to RAM) is an interesting approach. I still > think that using the kernel VM to do so is a bad idea in general, but could > work for certain apps.

Please elaborate. If disk/block-device performance is improving, wouldn't the VM benefit as well?

Also the last sentence seems to make more sense the other way around: VM in the general case, user-land memory management for "certain apps".

<comment><USER2> The OS VM would benefit, the problem is with using the OS VM in order to implement paging in certain applications like Redis. Does not work well because there is a tension between flexibility of in-memory representation and data locality, and OS VM needs data locality because it has no info about content and requires logically grouped data to be in near pages.

About VM in the general case: yes if for general case you mean, a random process is running and is out of memory. If we are talking about in-memory systems wanting to off-load data to disk IMHO the default is that VM does not work well.

</comment></comment></comment><comment><USER4> Since the article doesn't mention it til quite far in: Redis is apparently single threaded, which is why the blocking nature of OS page swapping is so disastrous. Presumably for a more traditional server with lots of worker threads this would be less true.

<comment><USER5> It does make the conversation interesting, as the "varnish guy" sort of subtly suggests that single threaded is subpar. Which seems odd, given that nginx is single threaded, and in a somewhat similar space to varnish...and seems to enjoy a good reputation for performance.

<comment><USER6> [http://www.cs.princeton.edu/~vivek/pubs/pai_flash_99.pdf](http://www.cs.princeton.edu/~vivek/pubs/pai_flash_99.pdf)

That's a reasonably good paper on the trade-offs between event-driven, multi- threaded, and hybrid approaches to file serving.

I don't know that much about nginx in particular, but it seems like they've implemented thread pools for blocking operations: [https://www.nginx.com/blog/thread-pools-boost- performance-9x...](https://www.nginx.com/blog/thread-pools-boost- performance-9x/). "Hard drives are slow (especially the spinning ones), and while the other requests waiting in the queue might not need access to the drive, they are forced to wait anyway." So, if you're blocking reading a file from the hard drive, all the other requests are queued up behind it.

The thread-pool approach noted in the nginx blog sounds pretty much the same as the approach in the linked paper.

nginx does have a good reputation for performance, but I think a lot of that reputation comes as a front-end for web applications rather than serving lots of hard-to-cache files.

Anyway, the nginx blog article as well as the academic paper note that single- threaded event-driven has drawbacks around file io and using a worker pool of threads or processes to offload blocking operations onto can help mitigate that.

<comment><USER5> The thread pools are optional, and reading the link you posted, not recommended unless specific conditions exist. They use streaming media as a good use case for the thread pools.

Nginx is commonly used as a caching proxy, and called out as being high performance in those cases. I can't speak as to whether what's being cached is "hard-to-cache" files.

</comment></comment></comment></comment><comment><USER7> It is important to note that in the many years since this post, while redis has remained single-threaded - it also removed the entire concept of VM, and now works only fully in memory.

<comment><AUTHOR> However, redis transfer these works to jemalloc. Now jemalloc control the entire VM

<comment><USER7> In the past you could tune redis to hold a dataset larger than the memory you had, and it would swap pages on its own. About a year after this 2010 post, antirez decided to remove this completely (in redis 2.6 or 2.8, I don't remember) and focus entirely on fully in-memory situations. VM in the redis sense used to be redis itself swapping stuff to disk with multiple threads.

Here are the redis configuration notes on VM from redis 2.2:

# Virtual Memory allows Redis to work with datasets bigger than the actual

# amount of RAM needed to hold the whole dataset in memory. # In order to do so very used keys are taken in memory while the other keys

# are swapped into a swap file, similarly to what operating systems do

# with memory pages.

....

# vm-max-memory configures the VM to use at max the specified amount of

# RAM. Everything that deos not fit will be swapped on disk _if_ possible, that

# is, if there is still enough contiguous space in the swap file.

...

# Redis swap files is split into pages. An object can be saved using multiple

# contiguous pages, but pages can't be shared between different objects.

# So if your page is too big, small objects swapped out on disk will waste

# a lot of space. If you page is too small, there is less space in the swap

# file (assuming you configured the same number of total swap file pages).

# If you use a lot of small objects, use a page size of 64 or 32 bytes.

....

# Max number of VM I/O threads running at the same time.

# This threads are used to read/write data from/to swap file, since they

# also encode and decode objects from disk to memory or the reverse, a bigger

# number of threads can help with big objects even if they can't help with

# I/O itself as the physical device may not be able to couple with many reads/writes operations at the same time.

# The special value of 0 turn off threaded I/O and enables the blocking Virtual Memory implementation.

vm-max-threads 4

<comment><AUTHOR> get it, thank you

</comment></comment></comment></comment><comment><USER8> The comments on this post are enlightening. I use both Varnish and Redis, and the architecture discussion is great!

</comment><comment><USER9> One thing that would really help is if we had buffered asynchronous IO.

</comment><comment><USER10> (2010)

</comment><comment><USER11> PHK's post, which inspired this, assumes that the process is swapping. It describes writing an page to disk to free up that page, then reading in the anonymous page of data that needs to be used for the write() system call the process uses to manually cache the data to disk. For the stuff that I use and work on, if the system is swapping anonymous pages, the situation is dire and it's time to kill (processes).

Let me back up and try to explain a bit:

While OS kernel developers have put a huge amount of effort into virtual memory management and paging, which was and is a good and necessary thing, the definition of "interactive" and "low latency" has changed. Long ago, half- second latency at a virtual terminal connected to a mainframe with hundreds or thousands of users was fantastic, compared with dropping off your stack of punch-cards and coming back 12 hours later.

For most of the software I use and work on today, I want low sub-second latency. It's often only achievable with reasonable direct control of what is in memory and what is on disk. If I click a menu in a GUI program that I haven't clicked in weeks, I don't want to wait half a second for a few scattered pages to be paged in/out of swap. Same goes for requests to web or api servers - I don't want less-common requests to take a half second longer than the typical 50ms or so. For desktop environments, GUIs, databases, caches, services: no swap.

Certainly, _data_ , multimedia files, dictionaries, etc will need to be read from disk. The processes can arrange for separate threads to do that. We can have responsive progress bars, cancel buttons, priorities, timeouts before hitting an alternative data source - but only if the process itself is in RAM, not in swap.

Now that desktop and server systems measure DRAM in 10s of gigabytes, this really should not be hard to achieve!

I've struggled with swap and out-of-memory situations on Linux many times. The linux kernel never seems to OOM-kill processes fast enough for me. If I have no swap, then if memory pressure sets in, the kernel struggles to shrink buffers, practically freezing most processes, for _a few minutes_ before finally killing the obvious culprit. (I've also tried memory-limiting containers, and they suffer the same problem - freeze up for a few minutes instead of immediately killing when OOM.) I used to enable plenty of swap, more than RAM, because that was the common wisdom, but it causes the same problem when the system comes under memory pressure, everything freezes for a few minutes. But it also has the additional problem that despite setting swappiness to 1 or 0, some strange services/applications will cause the kernel to put some anonymous pages in swap, even when there's _plenty_ of free physical memory. I never want that! I need to periodically swapoff and swapon to correct it.

So, at each company I work for, I end up writing a bash script, run by cron each minute, which checks for low system memory, looks among the application services for an obvious culprit, and sends it SIGTERM. In practice, this solves the problem pretty much every time, in the most graceful way. It's extremely rare that a critical system process is the problem or looks like the problem. (Except dockerd a couple times ;)

(This is not to bash Linux in particular, Windows and MacOS use way more RAM and swap in general. I've heard the BSDs have been good at particular things at particular times, but driver support has always been more of a struggle. Besides the swap / OOM behavior, I'm pretty happy with Linux.)

Letting the OS manage disk and RAM makes perfect sense for bulk data processing - hadoop, spark, or other map-reduce or stream-processing where a few seconds pause here and there is no problem if throughput is maximized. But I personally don't work much on those things - and I'm not a rare case.

</comment><comment><USER12> > OS paging is blocking as hell

No, Linux is rubbish. Seriously. FreeBSD does this properly.

 _Edit: FreeBSD, Windows, OSX, Solaris, AIX, HP-UX(?)..._

<comment><USER13> Do you have any articles that talk about how FreeBSD does memory management differently?

<comment><USER12> [https://people.freebsd.org/~jlemon/papers/kqueue.pdf](https://people.freebsd.org/~jlemon/papers/kqueue.pdf)

<comment><USER14> Admittedly I didn't read it in detail, but I don't see anything about page-ins there. Can you explain the connection between kqueue and paging?

<comment><USER12> Sure it would be my pleasure. Kqueue allows a read request to be scheduled that is non-blocking on a page fault. Linux always blocks the thread executing read() on a page fault. This is still true using aio_read(), as all that does is run another thread to call read() which blocks. Which is great for small numbers of read requests but scales poorly.

And the bit from the paper that is relevant:

> A non kqueue-aware application using the asynchronous I/O (aio) facility > starts an I/O request by issuing aio read() or aio write() The request then > proceeds independently of the application, which must call aio error() > repeatedly to check whether the request has completed, and then eventually > call aio return() to collect the completion status of the request. The AIO > filter replaces this polling model by allowing the user to register the aio > request with a specified kqueue at the time the I/O request is issued, and > an event is returned under the same conditions when aio error() would > successfully return. This allows the application to issue an aio read() > call, proceed with the main event loop, and then call aio return() when the > kevent corresponding to the aio is returned from the kqueue, saving several > system calls in the process.

<comment><USER14> OK, so you're talking about AIO and other people here are talking about mmap. If you have working AIO then you can indeed write a fully async server at the cost of extra memory copies.

<comment><USER12> Sadly mmap is also blocking on page faults on Linux :(

<comment><USER15> I would be very interested in how you envision a system that does NOT block on page faults.</comment></comment></comment></comment></comment></comment></comment></comment>


Why Free Software usability tends to suck - <AUTHOR> http://web.archive.org/web/20051125183807/http://mpt.phrasewise.com/discuss/msgReader$173 <comment><USER2> This is a big problem with free software. Just like everyone else here, I used to believe that code was everything, and if only I wrote beautiful code, the world would come to me.

Then I discovered the dark side of business, money, marketing (and meetings, partnership negotiations, etc.).

You need both. But if you are an independent open source project with no backing from Sun, Intel or IBM, you are pretty much stuck with the "happy geek" problem.

Usability is one of those features that geeks tend to be most blind about. My favorite recent quote from such a geek: "the iPhone is nothing new, there are plenty of phones with the same specs".

Some people are trying to solve that problem as we speak you know ;-)

<comment><USER3> I agree insofar as that your average 'geek' has a far different definition of 'usability' than the majority of computer users and that, until relatively recently, free software was written by geeks and for geeks.

However, I am moderately jaded by the notion of usability defined as being "no learning required" - for example, which is more usable, vi or MS notepad? Anyone who has put in the effort would surely be able to use the former far more effectively than the latter, despite the difference in immediate accessibility.

It sort of muddies the water a little, I know, but I just don't think that 'ease-of-use' can be the last word in usability, and I think this is where free software excels - look at Firefox, for example. It has the instant gratification of any modern web-browser, yet offers almost emacs-level configurability.

I think that this is the happy medium that can only really come out of the free software world being, as it is, relatively immune to the sort of market forces that have forced the commercial sector to constantly chase the lowest common denominator. (who, let's face it, are bizarrely resistant to the idea that the incredibly complex piece of machinery in front of them might actually require some _knowledge_ to use properly).

<comment><USER2> We are both correct.

Ease of use doesn't equate "simple". Ease of use should mean that you can start using it with no learning curve, but that as your experience grows, you naturally learn to do more complex tasks.

The secret of ease of use is that for each level of expertise, from beginner to expert, the tool will seem intuitive, and also take you to the next level non-intrusively.

That's why it's so difficult to design right!

</comment></comment></comment><comment><USER4> The commercialisation of open source has added an instrinsic reason for suckage.

With closed source software the most common model is the license fee. Support calls and interaction with the user is a cost and something to avoid if possible. You polish your code and your interface until the users leave you alone.

With the rise of support-supported open source, the converse is true. You make your money from support, so typically the more polish, the less revenue. This is a fundamentally broken feedback loop IMHO with an intrisinic tension between product quality and cash. You want the product to very nearly work perfectly, but require work to integrate.

<comment><USER5> I'd say it depends on the support model. If, for instance, you sell support as a yearly subscription, then support calls are a variable cost against a fixed revenue, and so the incentive goes back to creating streamlined and non- confusing UIs to lower support costs. Still, it's a good point.

<comment><USER4> You're right of course. Except perhaps that quite a few people won't bother with a yearly support contract, if the software is so polished that it doesn't need vendor support.

I;d just like to clarify one thing. I don't think that open source software sucks, I think much of it is excellent, I just think that there is an inherent tension that tends to pull it towards suckage in a purely commercial market.

</comment></comment></comment><comment><USER6> Sorry, i have read opinions like the one in the article many times, but i think they are just plain wrong. They are a myth. They were true in times when gtk1, gnome 1 or fvwm were standard. (And that was imo long before 2002). But times have definetly changed. I prefer the design of linux and of open source apps. I am no open source developer, but i am using it every day, so:

1\. Most linux distros have well designed UIs, most linux apps too. I would say that open source apps have a focus on efficiency while many windows apps have a focus on first-time-users.

2\. Many existing flaws of open source user interfaces have practical reasons: open source is always somehow "work in progress" / many open source desktop apps are somehow frontends for command line apps / many open source apps are grown products which for example come out of old gtk-times.

3\. The real horror are many closed source apps which just ignore all developed gui standards just because of marketing reasons: Why does my windows desktop firewall or antivirus need their own gui design and even changeable skins?! Why does my windows office software give a sh __on what i think is the best ui for my needs? Why does every app i install have to clutter my desktop with wizards, autoupdate-system notifications (which somehow look more like company ads) and hints to other products?

</comment><comment><USER7> Same author's follow-up from late 2008:

"Why Free Software has poor usability, and how to improve it"

<http://mpt.net.nz/archive/2008/08/01/free-software-usability>

</comment><comment><USER8> This looks like it would have been accurate 7 years ago when it was published, but a lot has changed since then.

I don't mean to say that OSS doesn't continue to have usability issues, but certainly the role of usability folks within the major desktop projects has changed very significantly since then. Usability in OSS started gaining traction right around the time this was written and has in the meantime and it does show.

<comment><USER9> OSS generally _looks_ better than it did 7 years ago, but I don't see how true usability has improved too much. The major packages are a bit better, but the average project still suffers.

<comment><USER10> Massive improvements in usability have come about through bug fixes, increasing the completeness of applications, and better packaging of applications. I doubt the people doing that work thought of it as "usability" work, but it makes a huge difference. A lot of Linux's traditional usability problems have simply been missing functionality: missing GUI applications or missing features in major applications. Power users can often fill in the blanks by using extra utilities (transcoding a video file if their favorite video player won't play it, for example) but average users will be completely stymied, with the extra insult of spending ten minutes searching through the app's menus and preferences trying to find a feature that isn't there.

</comment></comment></comment><comment><USER11> It assumes that free software means unpaid developers.

The idea that free software tends to have complex user interfaces is not convincing. There are lots of things with very simple UIs, including the Gnome desktop and almost all Gnome apps.

His links seem to disprove, rather than provide evidence for, his points. One is to a Mozilla enhancement request for an additional setting that was rejected, the other is to a Gnome usability study - did it lead to changes (disproves is point) or was it ignored (proves his point).

</comment><comment><USER12> I think the reason is simpler - there is little evolutionary pressure. Coming from an ISV background, you will see that better designed user interfaces almost always sell better. Complicated or difficult to understand user interfaces will sell worse. So there is some type of pressure in commercial software to go for somewhat better user interfaces.

This pressure does not exist for open source software in the most case. If the people who are involved in the project find that it solves their needs, they don't see any need to modify it to fit the needs of new users. So the interface stagnates at what the core contributors are familiar with.

</comment><comment><USER13> It's not limited to Free Software. Proprietary and enterprise software usability tends to suck too.

</comment><comment><USER14> I mirrored the old mpt site here:

<http://mpt.mirror.theinfo.org/discuss/msgReader$173>

in hopes that Google will index it.

</comment><comment><USER15> Maybe this is obvious, but why does this link use the archive?

<comment><USER16> Because the article is from 2002 and not available on this URL anymore.

</comment></comment><comment><USER17> The author is right that software is often not designed for ease of use by a novice or traditional aesthetic appeal.

But that's by design - not by "suck".

People building free software generally have themselves as the target demographic; they're not trying to appeal to novices or compete with Microsoft or Apple. They have a different definition of "good".

<comment><USER18> _People building free software generally have themselves as the target demographic_

People building free software generally have themselves as the target user, which is not the same thing.

Advanced users benefit from straightforward design and simple workflows as much as anyone else. The programmer may want every facet of functionality to be readily available, but the majority of users, novice or otherwise, will not care. The user should not be forced to have the same depth of understanding as the person who made the software, even if the user is perfectly capable of attaining it.

<comment><USER17> What's the difference between a target "user" and a target "demographic"?

You're right that advanced users benefit from straightforward design and simple workflows. But I think saying "Linux usability sucks" is tackling a much broader issue than that.

Plus, I would argue that Unix, and Linux, are all about straightforward design and simple workflows. Think about pipes and the command line.

<comment><USER18> A user is a specific person (in this case, the developer), who is not an accurate proxy for a broader classification of people (in this case, people whose technical acumen is similar to the developer's).

And as to pipes, they're useful in the way LEGO blocks are useful: you can make pretty much anything you want from them. But sometimes it's just more fun to have a toy you can play with immediately, no construction required.</comment></comment></comment></comment>


Ask HN: Motivation in open source - <AUTHOR>

TL;DR A really short survey on motivations in open source, wont take a minute and it is our intent to release the results as soon as we can. Here's the link:
https://docs.google.com/forms/d/1FigRXVstzstH0L7A4QDv6U5ecpJPS8rgRLDxqXMbTm8/viewform
We're writing our bachelor's thesis on the motivations of open source developers. This is a follow up to the earlier survey we did where we asked you to write shortly on what motivates you. We had a great turnout and amazing answers!
In a similar vein this is very short and quick! We're looking at which factors motivate you more and which do less. Help us show the world what an extraordinary phenomenon the open source community is! <comment><USER2> Will the results be shared?

<comment><AUTHOR> Yes</comment></comment>


The Day Coco Cola Came to France (and How Parisians Reacted) - <AUTHOR> http://www.messynessychic.com/2015/09/04/the-day-coco-cola-came-to-france-and-how-parisians-reacted/

<comment><USER2> Couldn't get through the article with all the ad images popping and sliding in.</comment>


Go 1.1beta1 now on the benchmarks game - <AUTHOR> http://benchmarksgame.alioth.debian.org/u64/benchmark.php?test=all&lang=go&lang2=v8&data=u64

<comment><USER2> I'd love to see how Go 1.1 compares against modern JITted scripting languages, because I think those will be a major part of Go's current and future competition.

Hopefully the benchmarks game will one day include those JIT variants. V8 is there, but sadly for example PyPy, HHVM (Facebook's PHP TJIT) and LuaJIT are not.

<comment><USER3> I think we're in dire need of a new benchmarks game. The author:

removed PyPy

removed the clear overview table that showed all languages, keeping only the barely visible gray bar charts with vertical text (why not horizontal bar charts, they can be scrolled and read without head tilting)

refuses to add LuaJIT and other languages

responds to most change inquiries with "publish your own version" which probably means that he doesn't really care about the project anymore

As a result, the spirit of the benchmarks game was lost a long time ago as its made less fun with each iteration.

<comment><USER4> Not only that, but "the author" has for many years provided the source code for the scripts to make the measurements -- so anyone who actually wants to can easily start a new benchmarks game.

Go do!

<http://benchmarksgame.alioth.debian.org/play.php#languagex>

<comment><USER3> Its far from "easily". Its not like you could just fork the code and run the benchmarks game - you would not only have to setup the environment for all languages, but also understand the not-so-well documented idiosyncrasies and deficiencies of the implementation (hardcoded paths? seriously?)

It doesn't seem like the code was originally written to be understood and modified by others and its not fully documented. As such your claim that its simple to fork it isn't really valid. (However I'm willing to admit the possibility that the configuration complexity is not easily avoidable)

I agree that its far from easy to write a benchmarks game, setup a test environment and invest oh-so-many CPU cycles into running the tests periodically. But I wouldn't go around telling people that forking the original is easy either - that would be very misleading.

Much will have to be done to improve the current engine to make it easier to fork. I'm seriously considering doing that (or alternatively making a new benchmarks game from scratch with the intent of making it easy to configure and fork)

<comment><USER4> > Its not like you could just fork the code and run the benchmarks game...

Some people download the scripts and make measurements straight-away, as always YMMV.

        1) REQUIREMENTS
         Willingness to read the README
         Willingness to write ini file name=value properties
         Willingness to (sometimes) write make commands
         Install Python 2.5+ (these are Python scripts)

<comment><USER3> > Some people download the scripts and make measurements straight-away, as > always YMMV.

Without setting up the language environments? I doubt it. Some highlights:

        3) LINUX QUICK START [ WIN32 QUICK START ]

        3.1) unzip in ~ directory [ unzip in c:\ ]

Requiring a path? Very poor.

        *** TO BE CONTINUED ***

Oh so its not fully documented, but its easy to use straight away...

I'll take the bite. Lets try and add luajit and compare it to lua.

> 12.1) In the [tools] section of the ini file, define a name that will > substitute for the location of the new language implementation.

Where is that INI file? The README doesn't say. Oh its my.linux.ini (its not mentioned anywhere in the document).

> For example

          [tools]
          PYTHON3 = /usr/local/src/Python-3.2/bin/python3.2

Fair enough, lets add my current luajit

        LUAJIT = /usr/local/bin/luajit

> 12.2) Choose a file extension to identify programs > and measurements made > with the new language > implementation, for example - python3.

Okay, picking .luajit

> 12.3) In the [commandlines] section of the ini file, define a command line > that will be used to run program source code files that have the new file > extension you chose. > For example, for file extension python3

          [commandlines]

          python3 = $PYTHON3 %X %A

No comment on what %X or %A may mean - they could mean anything, really. Of course %X is the source (or built) file and %A are the arguments. Easy enough.

        luajit = $LUAJIT %X %A

> 12.4.1) EITHER alias existing source code files that have a different file > extension with the new file extension, in the [alias] section of the ini > file. > For example, re-use all source code files with file extension python > but make measurements identified with file extension python3

        [alias]

        python = python3

So let me get this straight, to define the "python3" alias, I need to add the "python" key to the alias section and set it to "pyton3". Definitely not intuitive, I would rewrite this to be reversed.

But okay, I'll define the luajit alias

        [alias]

        lua = luajit

> 12.5) Run the bencher.py script.

Running.

        bencher release 0.9
        gtop import failed - measure cpu & elapsed time
        Wed 21:22:51 .....OK .....nbody.python [2]
        Wed 21:22:58 .OK .....regexdna.python [1]

What, only python? Oh, I need to copy the programs from the "bench" dir. Where in the readme does it say that? Nowhere.

Okay, did that, re run the script, and it runs all nbody and regexdna benchmarks, and none of the others. Why?

Going back to my.linux.ini. Could it be "onlydirs" perhaps? So I should add all the items in onlydirs, lets try that.

Okay, now its working - at least for the extensions that have a command defined. Its time to wait...

But wait, it complained about gtop? Why? Oh, it uses an old way of importing GTop, the new way is to use the introspected bindings

        from gi.repository import GTop

lets patch uselinux.py

        Wed 21:55:42 .EMPTY pidigits.luajit

of course, I had to remove everything in tmp/* before re-running the test, otherwise it thinks there is "nothing to be done".

Okay, that didn't quite work. Lets forget about gtop for now and look at the results we got without it

> 6) LOOKING AT THE MEASUREMENTS > ~/bencher/summary/all_measurements.csv > > Open all_measurements.csv with a text editor.

No summary dir here. Well shoot, what does the README say about a missing summary dir? Nothing.

Oh, its in ~/bencher/tmp/all_measurements.csv So what do the times say?

binarytrees,luajit,3,0,633,0.004,0,0,%,0.010 binarytrees,lua,2,0,525,0.000,0,-2,%,0.005 binarytrees,lua,3,0,633,0.000,0,-2,%,0.007 binarytrees,luajit,2,0,525,0.000,0,0,%,0.003

Lets compare that with the summary data:

binary-trees,Lua,2,12,446,0.796,4516,0,0% 0% 1% 100%,0.801

So uhh, I have to configure the parameters for every benchmark. Why don't you share your configuration? Oh, I see, there are various paths defined there appropriate for your environment.

Wait what? Why don't you separate the test configuration from the environment configuration?

First conclusion:

The bencher needs more work to make it easier to fork:

* improve readme by actually mentioning which ini file users should look at, telling them about the tmp dir, explaining the value syntax for the commandlines section etc. (important)

* invert entries in the [alias] section, because the way its set up now it makes no sense. (not that important)

* separate test and environment configuration in different files and share the test configuration files used on the website to help people reproduce the same results. (very important)

* fix the script to use the introspection bindings for gtop

Second conclusion:

The claim that its "easy" to set up has been nullified.

<comment><USER4> >>Without setting up the language environments? I doubt it.<<

You seem to have run nbody.python without setting up the language environment for it.

I'm going to ignore all the rest of your editorializing and try to find something of substance.

Let's just note that you've jumped from #3.1 to #12.1 -- ignoring #3.2 which checks for problems and the subsequent sections that work through those problems and explain some of what you later find so puzzling.

>>Where is that INI file? The README doesn't say. Oh its my.linux.ini (its not mentioned anywhere in the document).<<

You seem to have found the ini file.

>>No comment on what %X or %A may mean<<

Actual comments on what %X or %A may mean:

        ; %X %T %B %I %A in commandlines are replaced like this:
        ;
        ; nbody.python-4.python %X = nbody.python-4.python
        ; nbody.python-4.python %T = nbody
        ; nbody.python-4.python %B = nbody.python-4
        ; nbody.python-4.python %I = 4
        ;
        ; %A = [testrange] value or 0 when the program takes input from stdin

>>What, only python? Oh, I need to copy the programs from the "bench" dir. Where in the readme does it say that? Nowhere.<<

You don't seem to have read sections #3 through #11.

>>Okay, did that, re run the script, and it runs all nbody and regexdna benchmarks, and none of the others. Why?<<

You don't seem to have read sections #3 through #11.

>>Oh, it uses an old way of importing GTop<<

That actually is worth updating the readme about!

>>of course, I had to remove everything in tmp/* before re-running the test, otherwise it thinks there is "nothing to be done".<<

No you didn't. You don't seem to have read sections #3 through #11.

>>No summary dir here.<<

That actually was a bug! Empty directories weren't included in the snapshot zip.

>>improve readme by...<<

You didn't seem to read sections #3 through #11 (very important)

<comment><USER3> No, _you_ didn't seem to read my suggestions at all.

>>What, only python? Oh, I need to copy the programs from the "bench" dir. Where in the readme does it say that? Nowhere.<<

> You don't seem to have read sections #3 through #11.

If you grep the file, there is no mention of the bench dir anywhere in sections 3-11. Please do tell where you found it. The readme does say how to add new programs, but it doesn't say where the original programs of the shootout are in the distribution.

>> of course, I had to remove everything in tmp/* before re-running the test, otherwise it thinks there is "nothing to be done".<<

> No you didn't. You don't seem to have read sections #3 through #11.

No, _you_ didn't read what I was doing. I had to remove everything in tmp/* because I was trying to enable gtop by editing the source code of the program. The old results were made without gtop and only contained cpu and elapsed time.

Finally the "actual comments" on what variables are available for the commandline strings aren't written anywhere. Only "%A" is explained in 9.3 and "%I" isn't even mentioned.

So it looks like all my suggestions remain valid:

From the first suggetion, removing the "tmp" dir assuming that the summary dir bug is fixed in the future:

1) improve readme by mentioning the location of my.linux.ini and my.win32.ini and adding the complete syntax for the commandlines section etc. (important)

2) invert entries in the [alias] section, because the way its set up now it makes no sense. (not important)

3) separate test and environment configuration in different files and share the test configuration files used on the website to help people reproduce the same results. (very important)

4) fix the script to use the introspection bindings for gtop

Note that you failed to comment on (3) which will by far improve the bencher the most. Infact, that is exactly where I stopped trying to reproduce your results - I stopped at the point where I had to extract all the values for the testrange from your CSV files, as the ones used on the website aren't distributed _anywhere_.

But of course, you're free to continue ignoring useful comments from other people. Which brings me to the original point, we're in dire need of a new benchmarks game.

<comment><USER4> >>The readme does say how to add new programs, but it doesn't say where the original programs of the shootout are in the distribution.<<

You seem to have found the benchmarks game "original programs" in the project tarball.

People measure _their own programs_ with bencher, not the benchmarks game programs -- it's not dependent on the benchmarks game programs.

>>I had to remove everything in tmp/* because...<<

        #5.3 #5.4

>>what variables are available for the commandline strings aren't written anywhere<<

        my.linux.ini [commandlines]

>>testrange from your CSV files, as the ones used on the website aren't distributed anywhere<<

        nanobench/makefiles/u64q.ini
        nanobench/makefiles/u64.ini
        nanobench/makefiles/u32q.ini
        nanobench/makefiles/u32.ini

>>you're free to continue ignoring useful comments<<

You're comments are useful because they show what someone might become confused about.

<comment><USER3> > You seem to have found the benchmarks game "original programs" in the > project tarball.

> People measure their own programs with bencher, not the benchmarks game > programs -- it's not dependent on the benchmarks game programs.

It is not, but if you sincerely want to make it easy for people to reproduce all or parts of the benchmark, you should at least document where they can find all the settings of the original.

>>I had to remove everything in tmp/* because...<<

        #5.3 #5.4

Fair enough, I missed those two points in the README. A weaker point still remains though: its not very user friendly or obvious, like say a --force flag (or something in the spirit of make's --always-make).

These things may not seem important, but I think they are when distributing software with the intent of someone else running it.

>>testrange from your CSV files, as the ones used on the website aren't distributed anywhere<<

        nanobench/makefiles/u64q.ini
        nanobench/makefiles/u64.ini
        nanobench/makefiles/u32q.ini
        nanobench/makefiles/u32.ini

Ah in nanobench. Well that was definitely not easy or obvious, was it? My fault for not using find on the directory.

And how about that suggestion of splitting the configuration file to two separate files: program configuration and environment configuration? It would make it easier to run the benchmarks on the same set of programs with the same parameters, except in a differently configured environment. (the set of language implementations and their build and run commands would be a part of the environment configuration)

> You're comments are useful because they show what someone might become > confused about.

That was exactly my point - to prove that your "easily" claim is a stretch. The README does not cover everything, especially not the parts needed for someone to bench the programs found on the website. Which is understandable since its a README for the bencher program.

Perhaps a separate README for the entire archive (documenting where the original configurations and programs are) will fix most of these confusion issues. More descriptive directory names would also help (e.g. "game-programs" and "game-configurations")

And if I seem so negative, its because I used to love the benchmarks game and felt that every change you've made lately significantly subtracted from the game's fun factor of it while not significantly adding anything.

For example, that recent removal of the (not very useful, but still extremely fun!) combined language comparison table. Why remove things? Its sufficient to simply warn the user. If they ignore the warning and take those numbers seriously, that is their own fault. Why should they be ruining the fun for everyone else?

Oh well...

<comment><USER4> >>to prove that your "easily" claim is a stretch<<

Yes, _you were_ trying to prove that -- you were finding fault instead of finding how to make things work.

Other people found how to make things work, because that's what they were trying to do.

>>a separate README for the entire archive<<

Already done.

>>Its sufficient to simply warn the user.<<

Was it sufficient to list

        Willingness to read the README

as a requirement? Apparently not.

<comment><USER3> >>to prove that your "easily" claim is a stretch<<

> Yes, you were trying to prove that -- you were finding fault instead of > finding how to make things work.

> Other people found how to make things work, because that's what they were > trying to do.

Not really. The first time I downloaded the zip (about a year ago) I sincerely tried to make it work and did read the readme. Spent about 1 hour then gave up. This time I simply retraced those exact same steps with the intent of showing the current deficiencies.

>>Its sufficient to simply warn the user.<<

> Was it sufficient to list

> Willingness to read the README

> as a requirement? Apparently not.

Yes it is. Its my fault for not reading the README completely. (but to be fair, all directories of the distribution were not quite covered)

You don't have to remove the complete zip archive then add a quiz to the website testing if the user read the README before allowing them to download the complete archive.

If that doesn't work either, what then? Will you completely remove the download link to the archive, ruining it for those willing to read the README? The way I see it, you've done your part, the rest is up to the user.

This is where I strongly disagree with your approach - and this is why I want to make a new benchmarks game.

<comment><USER4> > I downloaded the zip (about a year ago)

Do you mean the project tarball or do you mean the bencher zip?

> I sincerely tried to make it work

Did you ask for help?

> This time I simply retraced those exact same steps

This time you've told everyone such-and-such isn't in the README when it is; such-and-such aren't written anywhere when they are; such-and-such aren't distributed anywhere when they are.

None of that stuff changed in the last year.

>>and this is why I want to make a new benchmarks game<<

So get the tarball tomorrow, read the README, find out what doesn't work for you and fix-it (if you're missing python-gtop install it), make measurements and publish them. Easy.

<comment><USER3> > This time you've told everyone such-and-such isn't in the README when it is

I clearly demonstrated all the deficiencies of the current distribution, especially in regards to running the same programs (with the same arguments) as those on the website.

your explanation of the commandline variables was missing from the readme

reference to the actual location of the ini file (my.linux.ini). I expect a section like this:

        The bencher is configured with an INI file.
        There are two example ini files included with the
        distribution: my.linux.ini and my.win32.ini,
        located in the "makefiles" directory.

this can't be found anywhere in the distribution:

        The ini files from the game website can be found
        in the nanobench/makefiles directory:

        <listing of the files>

Then I will agree that the documentation is complete, and that the process to run your own benchmarks is almost "easy".

If you separate the configuration files, organize the directories more appropriately and write a more condensed README that skips the condescending act towards the user, then I will agree that running your own benchmarks is easy.

> Did you ask for help?

I wouldn't have had to ask for help if the documentation was complete and adequate.

I will however check out the tarball tomorrow.

Oh and what about the suggestion to separate the environment configuration from the programs configuration? No comment, I guess...

<comment><USER4> >>your explanation of the commandline variables was missing from the readme<<

The explanation is not missing.

The explanation is where you need to see it -- where you write the commandline variables in the ini file.

>>I expect...<<

Speaking about your expectations would have been better than stating something is "not mentioned anywhere in the document".

>>I wouldn't have had to ask for help...<<

I guess you didn't ask for help.

>>what about the suggestion to...<<

What about making and publishing measurements?

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER5> It would be nice to compare it to the old version. At any rate, it seems like it's a lot more competitive with Java in performance and it uses a lot less memory:

[http://benchmarksgame.alioth.debian.org/u64/benchmark.php?te...](http://benchmarksgame.alioth.debian.org/u64/benchmark.php?test=all&lang=go&lang2=java&data=u64)

It's certainly much faster than the fastest "scripting" language:

[http://benchmarksgame.alioth.debian.org/u64/benchmark.php?te...](http://benchmarksgame.alioth.debian.org/u64/benchmark.php?test=all&lang=go&lang2=perl&data=u64)

<comment><USER4> >>It would be nice to compare it to the old version.<<

12 days ago

<https://news.ycombinator.com/item?id=5494113>

</comment></comment><comment><USER6> I dunno about you but I don't use Go where I could use javascript. And also, I use multicore machines only.

So I prefer this URL: [http://benchmarksgame.alioth.debian.org/u64q/benchmark.php?t...](http://benchmarksgame.alioth.debian.org/u64q/benchmark.php?test=all&lang=go&lang2=gcc&data=u64q)

:P

<comment><USER7> ... That's using Go 1.0.3.

<comment><USER8> Why are some benchmarks using Go 1.0.3 and some 1.1beta1? And why is the PCRE program broken? [http://benchmarksgame.alioth.debian.org/u64/program.php?test...](http://benchmarksgame.alioth.debian.org/u64/program.php?test=regexdna&lang=go&id=7)

As far as I understand it just needs a "go get github.com/glenn-brown/golang- pkg-pcre/src/pkg/pcre"

<comment><USER4> <https://news.ycombinator.com/item?id=5565769>

<comment><USER8> Thanks.

</comment></comment></comment></comment></comment><comment><USER9> Why the spectacular loss to V8 in the Regex tests? Is Go's regex engine a naive implementation as of now?

<comment><USER10> Russ Cox, in response to a regex benchmark vs. Python/Ruby.

"You assume the benchmark is worth something.

First of all, Ruby and Python are using C implementations of the regexp search, so Go is being beat by C, not by Ruby.

Second, Go is using a different algorithm for regexp matching than the C implementations in those other languages. The algorithm Go uses guarantees to complete in time that is linear in the length of the input. The algorithm that Ruby/Python/etc are using can take time exponential in the length of the input, although on trivial cases it typically runs quite fast."[1]

[1] [https://groups.google.com/d/msg/golang- nuts/6d1maef4jQ8/yg4N...](https://groups.google.com/d/msg/golang- nuts/6d1maef4jQ8/yg4NY5qRtsMJ)

<comment><USER11> As a member of the masses of programmers that typically deal with truckloads of trivial problems, his reply is worth as much as the benchmark he criticizes. I've never used anything but a trivial regexp (for some values of trivial) in production code (one-shot problems don't count) and I don't give a damn what is being benchmarked here - I only care if my Python script runs fast.

<comment><USER12> Actually, I might agree with Go here. I agree that most of my regexes are the trivial kind that don't exhibit exponential growth, but that's only because I also control the input to all those regexes. But Go's intended niche appears to be for user-facing server-side programs, and in that environment if you ever run a naive exponential-time regex against user-supplied input you're setting yourself up for a potential DOS attack.

<comment><USER13> Why not use the potentially exponential algorithm initially and timeout and fall back to the linear case if the sometimes-quick one has taken longer than the linear one would have? At most a 2x slowdown for complex cases, and substantial speedup for the simple ones.

<comment><USER14> It depends, if you have the opportunity to build a DFA once, why not do it? It's only a one-time cost.

I think the more serious problem is that what most people consider to be a 'regular expression' does not express a regular language, and hence cannot be expressed as a finite state automaton.

</comment></comment></comment></comment></comment></comment><comment><USER15> I'd be interested in seeing compile times. In a talk posted recently Rob Pike seemed to be kind of emphasizing #include inefficiencies and bytes read by compiler to bytes of source input ratios for C/C++, and how was better at this.

</comment><comment><USER16> Isn't comparing against a scripting language apples and oranges? Compiled vs interpreted one would assume to always look like this. Although the modern sophisticated JITs have definitely narrowed the playing field.

<comment><USER4> [http://benchmarksgame.alioth.debian.org/dont-jump-to- conclus...](http://benchmarksgame.alioth.debian.org/dont-jump-to- conclusions.php#comparison)</comment></comment>


Restoring an unusual vintage clock display - <AUTHOR> https://tinkerings.org/2016/05/21/restoring-an-unusual-vintage-clock-display/ <comment><USER2> These are known as "projection displays":

[http://www.decadecounter.com/vta/tubepage.php?item=10](http://www.decadecounter.com/vta/tubepage.php?item=10)

[http://www.decadecounter.com/vta/articleview.php?item=989](http://www.decadecounter.com/vta/articleview.php?item=989)

One company that makes them is still around:

[http://www.ieeinc.com/about-us](http://www.ieeinc.com/about-us)

A lot of other interesting old display technologies here:

[http://www.electricstuff.co.uk/count.html](http://www.electricstuff.co.uk/count.html)

<comment><USER3> Thanks for the links. I was curious to know how each digit is projected on the same place. Looks like the masks are on a curved plate.

</comment></comment><comment><USER4> Oh, those things. I used to use UNIVAC 1108 computers, which had the system clock on the console with those displays.[1] It took about a hundred small printed circuit cards to drive the thing. It actually was the system's time of day clock, read by the computer, not a remote display of a counter elsewhere. If the muffin fans under the console were not regularly cleaned, the clock would make intermittent errors, which caused the operating system to have problems. I once had to write software to detect this.

[1] [http://www.silogic.com/Athena/Univac%201108.html](http://www.silogic.com/Athena/Univac%201108.html)

</comment><comment><USER5> Here's a guy who used a two digit "one-plane display" like this as a "period correct" digital speedometer in his 1973 beetle.

[http://thegarage.jalopnik.com/project-make-the-weirdest- peri...](http://thegarage.jalopnik.com/project-make-the-weirdest-period- correct-digital-dash-1728464825)

</comment><comment><USER6> _" Which, for a clock showing HH:MM:SS, means 72 light bulbs to replace."_

??? There are only ten digits, and you don't even need all of them everywhere. By my reckoning, you would need 3+10+6+10+6+10=45.

If you add the ability to display dd-mm-yy, you till would only need 3+10+6+10+10+10=49. I wonder what they did with the remainder. Spelling out the word "ALARM!"?

Or did they simply ship spare bulbs inside the product?

<comment><USER7> I would imagine they wanted 6 identical modules just for the manufacturing efficiency.

That still leaves the question of why 12 lights instead of 10. I would bet that the separator colons are actually produced by a separate mask+lamp, rather than having different masks for each digit on those two modules. I.e. to show "8:" you light up both the "8" lamp and the ":" lamp at the same time. That gets us up to 11. No theory on the 12th one though.

<comment><USER8> One for each . In the colon?

<comment><USER9> Almost certainly this. In one of the links by another commenter here, you can see a voltmeter where the guy changes the decimal. The dots are bizarrely high to be a decimal point, but right where you'd expect it if it's the bottom dot on the colon.

<comment><USER10> I didn't find that video, but several of these seem to be British made. The decimal point in British use was traditionally centred: 3·141.

(I still write it like that, in handwriting.)

</comment></comment></comment></comment></comment><comment><USER11> I had figured that it would be about NIXIE tubes but was happy to learn about something I hadn't come across before. Pretty neat.

Here's an interesting channel on youtube I came across and the newest video happens to be about the NIXIE tube. [https://www.youtube.com/watch?v=jytF5bvPGcU](https://www.youtube.com/watch?v=jytF5bvPGcU)

</comment><comment><USER12> When I was a kid, my dad would sometimes bring home scrap electronic equipment from his lab and I'd have fun taking it apart. I remember one of those displays, with the arrays of tiny bulbs.</comment>