Ask HN: Advice for an aging software developer? - <AUTHOR> I am pushing 40 this year. I've been a PHP dev for the past few years - it is neither challenging nor interesting. For a bunch of reasons, changing jobs isn't that easy at the moment.
I am worn out, tired and depressed. While I still love learning and still love coding, I am not good enough to compete with younger, hipper crowd and I am not FAANG material.
I'd be happy if I can make 4-5k USD after taxes, if I can work less than 30 hours a week, on my own schedule and stress free.
Given this background, any advice on what avenues to pursue? What to learn?
I am a decent writer, very good product designer, average coder - if this helps in you giving me recommendations <comment><USER3> I turned 58 this year, 40 years programming. I work as a freelance consultant supporting legacy systems and doing infrastructure support (system admin) and programming for smaller companies that can't afford or attract/hire staff. As far as I can tell that's a huge unserved market — I turn work away now.

Don't try to compete in the young developers world of startups or sexy Silicon Valley tech companies. Almost every company depends on software and web sites, and a lot of them can't even get resumes for their job postings, much less a qualified person who might hang around long enough to learn the business and add value.

Rates for this kind of work vary, I charge $100 - $200/hr depending on the kind of work, giving a break to non-profits.

To work on legacy systems you need the skills to jump into a system; find, diagnose, and fix problems; enhance a legacy codebase when rewriting is off the table (because of budget, risk, training/conversion hassle). Most of what I do is PHP + MySQL, but I used to work mainly with C++ and Java.

<comment><AUTHOR> This gives me hope!

 _programming for smaller companies that can't afford or attract /hire staff_

Could you talk a bit about how you got your first client? What does your typical project look like?

<comment><USER3> I work through an agency now, so my typical client is a small or medium-size business that can't hire or doesn't need a full-time programmer or system admin. Usually they've been burned by outsourcing and gig sites and want someone who will take the time to understand their business, not just a coder who requires detailed specs and then beats them up with change orders.

I got my first freelancing gig more than ten years ago, while working f/t at an educational software company that was slowly going under. A friend I had worked with put me in touch with a friend of hers who had a successful web design/marketing agency, and he had clients who needed programming work (back end) that he couldn't do. He started sending me work and then referred me to other design/marketing firms who needed the same kind of thing. If I was starting out today knowing what I know I would approach design/marketing agencies because they find the customers and frequently outsource anything beyond HTML/CSS or installing a Wordpress theme. Before long I connected with a company with a successful web-based business who had lost their developers (an outside firm that broke up and quit the client with short notice). I took that over. About the same time I gave a talk at a PHP user group about working with legacy code and got a job at the end when a guy who ran a non-profit approached me, telling me how his developer had quit and he had a long list of bugs and enhancements. I still work for both of those companies.

To get clients you need to tell everyone you know that you're available, not get too fussy about what kind of work you do, focus on business requirements and needs rather than technology. Most important: listen to and communicate with your clients. The number one complaint I hear from my clients is that their last developer stopped returning calls and emails. Don't pigeonhole yourself, recognize that languages and frameworks and tools are more alike than not, take on work that will push you a little. In the last couple of years I've gone from knowing nothing about AWS to managing cloud infrastructure for several companies, with some help from a friend who has a Linux/cloud security consulting practice.

My background is in enterprise logistics and business (accounting, payroll, AR/AP, etc.), so heavy on relational databases. I have worked in non-software businesses long enough to know the difference between a business problem or requirement and a technical problem. I don't care much about languages or shiny new things, because my clients usually don't. They want to fix bugs, reduce costs, increase revenue, scale their business. No business ever had the requirement "We need 2,000 more lines of Javascript code by next month" or "Let's rewrite our web app with React because it's cool."

<comment><AUTHOR> This is very helpful, thank you for taking the time to write a detailed answer.

 _If I was starting out today knowing what I know I would approach design /marketing agencies_

This sounds very logical. I was thinking about this, but for data analysis work. I used to work for a healthcare software firm and I know there is a lot of data analysis work in healthcare - this is probably true in other industries too.

I just need to find the right approach.

</comment></comment></comment></comment><comment><USER4> I echo what @Rjevski said about consulting. His suggestion might be better than mine, but another option is to do Wordpress sites. As a PHP dev I imagine you can make some killer Wordpress sites pretty quickly. That's what most people and small businesses need.

Have you considered getting into the product side? Get some Scrum or Agile cert(s) and make the change. I work for ITPro.TV, we have a lot of content on the subject, for instance [https://app.itpro.tv/course-library/agile- foundation/overvie...](https://app.itpro.tv/course-library/agile- foundation/overview-agilefoundation/).

<comment><AUTHOR> _but another option is to do Wordpress sites_

I am not sure I want to get into wordpress/drupal etc, unless I am left no other choice. I am looking into doing data analysis type of work, as I am better at it than fighting with CSS :)

 _Have you considered getting into the product side?_

Yes, this is one thing I can confidently say I am good at. My own product manager asks me for advice all the time. I am just not sure how to transition

<comment><USER4> > Yes, this is one thing I can confidently say I am good at. My own product > manager asks me for advice all the time. I am just not sure how to > transition

Could you ask your product manager for advice, or would that raise red flags?

You feel very stuck right now, I can tell because as a developer you're always learning. And you can learn how to make the transition into product manager. You can absolutely figure this out! :) You will have a job in 6 months (maybe sooner) on the product side as soon as you go for it.

In fact, there is a very active discussion on hacker news right now about this, [https://news.ycombinator.com/item?id=18823616](https://news.ycombinator.com/item?id=18823616)

</comment></comment></comment><comment><USER5> My advice - stop seeing yourself as a developer / software engineer and become a consultant.

Start with contracting - you'll still be doing software but instead of being employed you're now running your own company offering _solutions_ to others.

After a year or two of that you'll have references and can look at the bigger picture - there are a lot of companies out there suffering with either shit software, shit/pointless processes, or both.

You can solve their problems; often the solution will be a mix of better software and review of the processes (why are they doing this in the first place? Can it be automated away, or just done away with completely?).

If you haven't already, start a LinkedIn and play the LinkedIn game - <USER2> pretty much everyone (as long as the profile is legitimate, nearby, relevant to your industry) and engage with recruiters - that's where all my business comes from nowadays as a contractor, used to be only recruiters but now companies are reaching out to me directly.

Good luck!

<comment><AUTHOR> _Start with contracting_

Any advice on how to break into contracting? I'll start a blog (I enjoy writing, so blogging should be fun) and create a LinkedIn account - any other steps?

 _often the solution will be a mix of better software and review of the processes_

This I think I can do well. Is this your business? Do you offer advice/solutions to small businesses? If possible, can you give me an example of a typical project that you do?

Thank you for taking the time to reply

<comment><USER5> LinkedIn is how I got started. Recruiters are always hungry for fresh meat so it's an easy way to get your first gigs and build relationships with clients directly.

A blog might be good but honestly a lot of clients don't know what they want so a tech blog is unlikely to bring them your way (if they're reading a tech blog chances are they're already developers and might not need your services). I personally write but I do it more for the fun and for giving free advice rather than a way of gaining clients.

It is not my business yet (I'm still just a contract software engineer) but I'm going to look into this next year. I know one of my ex bosses has a successful small business developing bespoke business software so I think it's a good market, and if anything will make a few lucky people happy with great software instead of the usual Oracle/SAP/Salesforce garbage.

My email is in my profile. Feel free to get in touch if you want some advice.

<comment><AUTHOR> Oh okay, that makes sense. Let me start with LinkedIn then.

 _small business developing bespoke business software_

If possible, can you elaborate what software it is? Is it SaaS application or productized service?

Thank you, I'll email you! Thanks again, for taking the time to reply

<comment><USER5> A lot of businesses have custom ways of working that can't be modelled in off- the-shelf ERP software - they need something custom to either bridge the gap or completely replace their current ERP for example.

It's all custom, there is no one-size-fits-all approach so it's more about selling an unique product to each one rather than offering it as an SaaS.

</comment></comment></comment></comment></comment><comment><USER6> Please, don't confuse exhaustion and the depression that comes with it as something more permanent. I've been programming for over 50 years. I'm not as fast as I was, but I'm still very good. I did not do my best work until I was over forty. Tech is appallingly misinformed about the effects of aging. Don't let the prevailing nonsense mislead you!

Listen to me my friend. Take a 3 week stress-free break away from home. Away from home is essential. Go to an all-inclusive resort like Club Med. Make sure it's 3 weeks at least and stress-free.

You are about to enter the most productive period in your life. When you come back, you will be ready for it and eager to show the world.

DO IT!

</comment><comment><USER7> PHP wore me out and depressed me learning software development. I only ever became a software developer because of the immense promise of how statically- typed languages can improve informatics. Java turned me off because of the lack of point-and-click interface, lack of solid "turnkey" web development, and lack of functional programming. So C# became the language of choice, and I've been able to develop without going crazy. In the last 6 years, Typescript's become highly appealing as well. I've advanced incredibly quickly by avoiding any Javascript bundling other than Typescript modules and runtime bundling. Websites are built page-first; single-page application design is used extremely sparingly.

Languages that insufficiently describe the flow of information or insufficiently model domains are dead ends.

<comment><USER3> If you care that much about programming languages then you belong in a lab or university. If you want to make a living programming you find businesses that need help solving real problems (lack of static typing is not a business problem). For every project a finicky programmer wants to do I can point to 100 business applications that have no sex appeal but do have budgets and happy clients behind them.

</comment></comment><comment><USER8> What helped me, was moving into a different programming field. I moved from Python/C/C++ to iOS development. Learning the new APIs can give you a big boost in job satisfaction.

> For a bunch of reasons, changing jobs isn't that easy at the moment

There's always a reason to not rock the boat. I prepared plans to start freelancing, and then our daughter was born. Quickly after that, my partner left me. I still struggled on and went freelancing. Now things are fine again, the relationship healed, etc. but you need to make changes, and make them quickly or else you may ruin your career.

</comment><comment><USER7> In short: the advice is to learn how computers work, build an impressive demo on your own (probably with vacation time/paid unemployment benefits/time stolen from your employer), and apply for contract work everywhere you can find.

Finally, consider the ratio of openings to qualified job-seekers in specific disciplines, instead of the raw number of openings.

<comment><AUTHOR> _consider the ratio of openings to qualified job-seekers in specific disciplines_

Where do you find these?

</comment></comment><comment><USER9> The search for decent software architects is not minimal. Maybe look into that? Use your writing skills to help with getting you into that trajectory. If you do it as a consultancy you can arrange your own schedule and choose where to work and on what.

</comment><comment><USER10> >> I am a decent writer

Leverage that. Create professional blog catering to enterprises. Write "how to" [solve business problems] - based on your ample experience.

Position yourself as an industry expert.</comment>


Show HN: Pulsefeed builds a stream from your Facebook, Twitter & RSS feeds - <AUTHOR> http://pulsefeed.com/public

<comment><AUTHOR> Got the correct link this time; a major update on the previous version; full update details are listed here: <http://blog.pulsefeed.com/post/15></comment>


C++11: Try/Catch/Finally Pattern Using RAII & Lambdas - code-dog http://nerds-central.blogspot.com/2012/03/c11-trycatchfinally-pattern-using-raii.html

<comment><AUTHOR> What the OP describes here is a common C++ pattern known as "scope guard" (check "Solution 4" in <http://drdobbs.com/184403758>). It was possible to implement it in C++03 with some tricks but C++11 lambdas make it much easier.

This is a very nice small implementation but, as always with C++, devil is in the details:

* Creation of an std::function needs a dynamic allocation, so if the allocation fails an exception will be thrown and if the _finally_ is guarding a resource, the resource will be leaked

* std::function has a non-negligible calling overhead, hence this should not be used in performance-sensitive code

* Checking a condition inside the finally clause is not very elegant, a better idiom in C++ is to support _dismissing_ a scope guard.

* The finallyClause may throw an exception, and since it is called in a destructor this is generally considered a bad idea. I don't know what could happen in this case, but some scope guard implementations I've seen catch the exception and explicitly call std::terminate(). I guess this is for performance reasons, because the destructor can be declared nothrow.

Here there is a more complex implementation, which addresses most of the corner cases:

[http://channel9.msdn.com/Shows/Going+Deep/C9-Lectures- Stepha...](http://channel9.msdn.com/Shows/Going+Deep/C9-Lectures-Stephan-T- Lavavej-Advanced-STL-6-of-n#c634477472460000000)

<comment> code-dog I get your points. In general, the use cases for this pattern are not production code. The post points out this is not a good way of handling resource and that the example is about debugging. It would be up to the implementer to ensure the finally clause does not throw and exception or to catch it (I think there is something about nesting).

As for memory allocation failures, my experience is that depends a lot on the platform. It is a common misconception that dynamic memory is likely to run out and therefore we need to worry about that but not automatic memory. However, I have seen stack overflow many many many more times than a genuine 'out of memory'. Further, if an application has actually run out of memory so badly that a allocation of the closure's internal storage barfs then I suspect it cannot be retrieved. Naturally this does not apply if your platform has a very low heap size (e.g. realtime hardware or some such).

</comment></comment><comment><USER2> I've done this before, and this version has a significant flaw: it is not exception-safe. The destructor should not read as it does:

        ~finally() {
            finallyClause();
        }

This allows exceptions thrown by finallyClause() to propagate out of the destructor, which, if an exception is already being thrown, will result in a call to std::terminate(), causing the application to die horrifically. Because C++ kinda-should've-but-really-doesn't have checked exceptions, we must simply discard them:

        ~finally() {
            try { finallyClause(); } catch (...) {}
        }

You can also avoid problems with exceptions and std::function's dynamic allocation by using a template instead:

        template<class F>
        class finally_type {
        public:

            explicit finally_type(F f) : function(f) {}
            ~finally_type() { try { function(); } catch (...) {} }

        private:

            finally_type(const finally_type&);
            finally_type& operator=(const finally_type&);
            F function;

        };

        template<class F>
        finally_type<F> finally(F f) { return finally_type<F>(f); }

This can be used like so:

        void test() {
            int* i = new int;
            auto cleanup = finally([i]() { delete i; });
            may_throw();
        }

Finally (har!) the equivalent idiom in C++03:

        void test() {

            int* i = new int;

            struct finally {
                finally(int* i) : i(i) {}
                ~finally() { delete i; }
                int* i;
            } cleanup(i);

            may_throw();

        }

<comment><AUTHOR> > Because C++ kinda-should've-but-really-doesn't have checked exceptions, we > must simply discard them:

This would make the error pass silently, possibly leaving the program in an inconsistent state. It is probably better to call std::terminate() instead, which is what C++ does when an exception is thrown when another exception is active.

<comment><USER2> You're quite right that ignoring the (programmer) error is too lax, but std::terminate() is far too extreme. This is perhaps a situation for std::nested_exception:

        ~finally_type() {
            try {
                function();
            } catch (...) {
                std::throw_with_nested(std::logic_error
                    ("Exception thrown from \"finally\"."));
            }
        }

It might pollute calling code a bit with calls to std::rethrow_if_nested(), but I think it's worth it for the safety.

<comment><AUTHOR> No, if the finally clause is called while an exception is active, the runtime will call std::terminate(). This is why it is bad practice to throw exceptions in destructors.

Hence, in most cases where the scope guard pattern is used (to guarantee exception safety), your code is basically equivalent to calling std::terminate().

<comment><USER2> Alright, yeah, no exception should escape the finally destructor. After so many years of using it, I should know better than to write C++.

But anyway, the problem is still _programmer_ error. Just as you shouldn't throw an exception from a destructor, you shouldn't throw an exception from a "finally", because it is, by definition, run in a destructor. So, sure, calling std::terminate() explicitly makes about as much sense as anything, but I'd prefer to ignore (and perhaps log) such erroneous exceptions, for reasons of stability.

</comment></comment></comment></comment></comment><comment><USER3> I was not expecting this to produce so much interest. I guess a lot of people have asked about how to implement try/catch/finally in C++.</comment>


Advice for my nephews? - <AUTHOR>

I went home for Xmas and my nephews are getting into  computers (mainly playing runescape on-line).  I left the older one with a copy of Lutz 'Learning Python' and installed it on his desktop and showed the younger one how to make a simple html page and sent him a copy of 'A Kid's Guide to Creating Web Pages for Home and School' via amazon.  you can't force anyone to be interested in a subject but i figured i'd open the door - this probably would have been enough for me at their ages.  what would you have done? <comment><USER2> My kids already do plenty of simple web stuff on their computers at school so I generally encourage them to do other things at home.

My son has an iBook and my daughter has a MacBook. I got them both subscriptions to several online games years ago to get them through that stage as quickly as possible. They still like to play games, but now they are into the ones they can modify themselves.

Recently I installed Inform 7 and some text adventures on both their computers. I also wrote an incomplete adventure involving finding the owner of a lost dog at a local park. My daughter really enjoyed playing Zork and so I showed her how my small adventure worked. Now we've traded places - she's added more details to it and I do the playtesting.

<comment><AUTHOR> that's a nice progression. i like the text adventure/add your own bits angle.</comment></comment>


Simple Sabotage Field Manual (1944) - <AUTHOR> https://www.cia.gov/news-information/featured-story-archive/2012-featured-story-archive/simple-sabotage.html <comment><USER2> A discussion from 2012: [https://news.ycombinator.com/item?id=4831363](https://news.ycombinator.com/item?id=4831363)

<comment><USER3> Clicking the "past" button above shows six other discussion threads

<comment><USER4> Thanks for pointing this out. It's the first time I'd noticed this small but very information-rich button in the wild.

I notice that "past" is also present in another evergreen posted today, the one on crowd dynamics ([https://news.ycombinator.com/item?id=10488996](https://news.ycombinator.com/item?id=10488996)).

</comment></comment></comment><comment><USER5> > When possible, refer all matters to committees, for "further study and > consideration." Attempt to make the committees as large and bureaucratic as > possible. Hold conferences when there is more critical work to be done.

I assumed that every place I ever worked was just managed by morons. I never considered that they could be infiltrated by saboteurs!

<comment><USER6> Where do you think the CIA got all their ideas from?

<comment><USER7> Are you kidding!? They got the ideas from people who work in these areas!

Reading part of the text drives me nuts because I've seen people essentially do many similar things inadvertently and had to enlighten them to the potential hazard/damage that could result.

Ever had a mechanic with filthy grit-covered hands start to grease your front wheel bearings? Ever seen someone start to clean a paintbrush with gasoline?

The book simply compiles these errors in one place and presents them as "sabotage". Most of the time when they occur in the real world they're chalked up to Hanlon and human ignorance:

"Hanlon's Razor: Never ascribe to malice that which can be adequately explained by stupidity."

</comment></comment></comment><comment><USER8> In a similar vein, if one were so inclined, how hard would it be to make a modern city come to a grinding halt?

Seems to me that this kind of "economic terrorism" would be very low hanging fruit, achievable with even modest means and at a low risk of exposure.

If the "clash of civilizations" is real and the western world is really under such a severe existential threat as so many seem to believe, why aren't we seeing more of this?

<comment><USER9> I live in Seattle, and traffic during rush hour here is a nightmare.

There are perhaps 5 key routes of getting in and out of downtown. Last summer, one of these was blocked by an accident [1], leading to a complete gridlock on the highway for five hours, and downtown traffic was taking roughly ~30 minutes to travel a block.

It would be relatively easy to cause five significant wrecks on each of these corridors. Rent a moving truck and crash it into several vehicles at high speed. Traffic would be so congested, it would take hours for emergency crews to get to the scene. If you did this during morning rush hour, I imagine you could shut down a lot of the city for the day.

[1] [http://westseattleblog.com/2014/06/4-miles-of-highway- closur...](http://westseattleblog.com/2014/06/4-miles-of-highway- closure-5-hours-of-gridlock-this-cant-happen-again/)

<comment><USER10> You wouldn't even have to cause a crash. All it would take is to stage a couple of car breakdowns at key points in one or several highways.

Heck, even simultaneously driving slow on all lanes with conspirators just long enough to not get pulled over would start a chain reaction that could screw up traffic for hours.

<comment><USER11> The chaotic good in me has to wonder if you could take it one step further - do this every third day for a few weeks, then "claim responsibility" as some Islamic terrorist group. Get the city panicked and scrutinizing hard on anyone driving too slow, broken down on the side of the road, or in a minor accident. Get the invasiveness and paranoia high enough that everyone is forced to see the ridiculousness of it first hand, rather than blindly believing story time from the terrorists behind news desks.

<comment><USER12> _chaotic good_

Good god almighty, I read your post, chuckled slightly having fully understood the DND reference, then I read it again and damn. If there were __ever __a perfect descriptor for what you just described. Having lived in a city with unending traffic problems among a populace that seems hellbent on voting against it 's own desires to _fix_ said problems (Austin Texas), holy cow.

</comment></comment></comment></comment></comment><comment><USER13> Huh. I always assumed Stalin was being overly paranoid when he exiled all of those folks to Siberia for breaking farm equipment, etc. Still a terrible, awful way to address the problem, but it makes a bit more sense if that's exactly the sort of thing the subversives are being told to do.

</comment><comment><USER14> I'm beginning to suspect CIA influence at the DMV.

<comment><USER15> Add one to C and you get D.

Flip the A upside down and it looks like a V.

I'll leave you to discover the rest on your own.

<comment><USER16> Bend the I and you can make an M! (a small one tho)

<comment><USER17> If the I has serifs, then it's doable.

</comment></comment></comment></comment><comment><USER18> Reading this made me consider the possibility that people with anti-government sensibilities have intentionally gotten themselves into critical government roles and employed these, or similar, techniques. The procedural productivity killers seem like they would be extremely effective, and easily passed off as incompetence or a simple proclivity for bureaucracy.

Wouldn't it be interesting if the slow moving, budget draining, enthusiasm killing bureaucrat were really a subtle and effective anarchist?

<comment><USER19> Honestly, I think that sort of thing is happening.

Look at the changes to the Post Office. Two seemingly small things combine to put real pressure on what is otherwise able to operate just fine.

One was a change in rates, which basically favored large publishers. Small distribution and citizen mail subsidize big publishing, who then can ramp up on their volume.

The other was a pre-pay requirement for benefits that is just nuts! Something like 25 years.

Now, the Post shows a loss and there is a lot of discussion about how to "improve" it, privatize it, etc...

I'll bet there is a fair amount of this type of thing going on. Some analysis to identify critical targets, planning to impact them, then messaging to maximize the leverage / profit / change from those impacts.

Anyway, back to the Post. Either one of those things would have been both manageable and to a degree justifiable. Both combined are a real mess.

</comment></comment><comment><USER20> There was later a cartoon sabotage manual that isn't so wordy.

[http://www.nytimes.com/1984/10/19/world/cia-linked-to- comic-...](http://www.nytimes.com/1984/10/19/world/cia-linked-to-comic-book- for-nicaraguans.html)

</comment><comment><USER21> This reminds me of the John Shirley proto-cyberpunk novel "Transmaniacon," where the pro(an?)tagonist's role was to incite anger/riots in a group of people by doing a bunch of little things that, on the surface, seem perfectly reasonable, but when combined in the right way created absolute chaos.

</comment><comment><USER22> > Forget to provide paper in toilets

War is hell.

</comment><comment><USER23> This sounds like the handbook of every industrial contractor I've ever worked with. Particularly the bit about leaving scrap iron in the turbine (I worked in a power plant for a couple years...)

</comment><comment><USER24> I thought the sugar in the car's fuel tank was a myth. Yet it's there on page 13-14 (PDF pg. 10-11)

And I never ever heard of using sugar to compress a sponge in order to clog the drain.

<comment><USER25> It is a myth, mythbusters tested it. You can put a lot of sugar in a fuel tank, it won't make the car not run.

<comment><USER26> polystyrene foam on the other hand might do the trick

<comment><USER27> Absolutely. Gasoline gells.

</comment></comment></comment></comment><comment><USER28> I now suspect my wife may work in a workplace full of spies.

<comment><USER29> just your wife? you must be a very lucky man!

<comment><USER30> Polygamous marriages are typically frowned upon; at least in the US.

</comment></comment></comment><comment><USER31> Remember people, when the CIA does it, it's "sabotage." Don't be using the "t" word now.

<comment><USER32> "T" as in "teambuilding"?

</comment></comment><comment><USER33> It's interesting to think about this sort of thing in regards to corporate influence on government processes.

</comment><comment><USER34> .cC(better turn on TOR before I get it)</comment>


Firefox Developer Tools, Part 2: Scratchpad and Style Editor - <AUTHOR> https://hacks.mozilla.org/2013/11/reintroducing-the-firefox-developer-tools-part-2-the-scratchpad-and-the-style-editor/

<comment><USER2> I've noticed a curious transformation in my habits over the past several Firefox releases.

I debug sites in both Chrome and Firefox, and very frequently when in Firefox my brain misfires and performs the key combo to open Chrome's devtools (Ctrl+Shift+i) instead of launching Firebug, with the effect of opening Firefox's own built-in devtools. Originally this would elicit nothing more than a grunt of frustration as I fumbled for the F12 key; Firefox's own tools were simply far too primitive to bother with (though I couldn't help but notice how much more responsive they were than Firebug). But as the months wore on and features accumulated ("a network panel, _finally!_ "), I found myself bothering to correct my error less and less frequently. Just today, in fact, I realized that I had happily spent all morning in the built-in tools without ever yearning for Firebug.

That said, there are still lots of things that Firebug still does better (more convenient object inspection in the console, for one). But the built-ins launch _so much damn faster_ and keep my general browsing experience so much more responsive that it's starting to get difficult to justify having Firebug installed at all.

Hey Firefox dev tools team: nice work. Keep it up! :)

<comment><USER3> > _Ctrl+Shift+i_

Try Ctrl+Shift+C. It jumps straight into select/inspect mode.

Prior to Firefox 25 this would open Firebug. Now it opens Firefox's dev tools (also select/inspect mode).

I rebound Firebug's shortcut to Ctrl+Shift+X. This way I can still use it if I want.

</comment></comment><comment><USER4> I switched back to Firefox, after a long stint with Chrome, because of things like this...

The Firefox Dev team has really been stepping up their game (relative to the other browsers) and is incredibly receptive to feedback (especially the dev tools). The browser has been getting faster, and the dev tools are starting to be on par, and in some cases, better than Chrome's.

Also, for those appreciate Chrome's aesthetics, the "UX" build is pretty damn sexy these days... and is actually quite stable. I'd give it a strong recommendation!

[http://people.mozilla.org/~jwein/ux- nightly/](http://people.mozilla.org/~jwein/ux-nightly/)

<comment><USER5>
      ... and is incredibly receptive to feedback ...

I'll take this with a grain of salt due to being slapped with WontFix multiple times in the past.

<comment><USER6> "Receptive to feedback" isn't the same as "do everything I want".

<comment><USER5> Neither it's the same as "we listen what we want".

</comment></comment></comment></comment><comment><USER7> Style editor needs some work still. For example searching for text there is hard to use. There are no "find next" or "find previous" shortcuts, one has to open a dialog again each time.

And there is no way to search in all style sources at once. Which makes tracking stuff harder if there are many sources provided.

<comment><USER8> In Aurora, the tools now use Code Mirror as the editor. Along with that change, we now use Code Mirror's searching, so Cmd+G and Cmd+Shift+G will cycle through next/previous search results.

I filed a bug for a more discoverable UI: [https://bugzilla.mozilla.org/show_bug.cgi?id=934624](https://bugzilla.mozilla.org/show_bug.cgi?id=934624)

Here is this bug for searching across all sheets: [https://bugzilla.mozilla.org/show_bug.cgi?id=932093](https://bugzilla.mozilla.org/show_bug.cgi?id=932093)

It looks like it slipped under the radar, but I just talked with Heather who has worked on the Style Editor the most, and so it should be back on the radar now :)

Anything else? :)

<comment><USER9> Here are a few random things that are still bugging me (using Linux):

1\. Please either respect the font sizes I set in the Firefox Preferences, or add a setting to change the font size inside the devtools. Currently the inspector and style panel on the right, among others, seem to use a fixed size that is just tiny enough to be seriously annoying.

2\. All URLs everywhere should be clickable, middle-clickable, and have a context menu for these actions as well as other common stuff like copying it to the clipboard. Last time I checked there was no way to get the full URL of a stylesheet, clicking on it would only open the Style Editor which doesn't seem to expose the URL anywhere either.

3\. Sometimes the devtools get stuck somehow, i.e. I suddenly can't open the Inspector anymore, or the console wwill stop displaying messages. This happened at least up until FF25, at which point I gave up and installed Firebug again.

4\. Please support all different color syntaxes (ideally as in Firebug where I can choose my preferred format and have everything converted to it)

Otherwise it seems you're doing a great job, I just wish you would get the basics right first before adding stuff like a 3D view ;-)

<comment><USER8> > 1\. Please either respect the font sizes I set in the Firefox Preferences, > or add a setting to change the font size inside the devtools. Currently the > inspector and style panel on the right, among others, seem to use a fixed > size that is just tiny enough to be seriously annoying.

We have a bug open for respecting the system font size here: [https://bugzilla.mozilla.org/show_bug.cgi?id=760825](https://bugzilla.mozilla.org/show_bug.cgi?id=760825)

In the meantime, you can change the devtools font sizes with Cmd+<+> and Cmd+<->

> 2\. All URLs everywhere should be clickable, middle-clickable, and have a > context menu for these actions as well as other common stuff like copying it > to the clipboard. Last time I checked there was no way to get the full URL > of a stylesheet, clicking on it would only open the Style Editor which > doesn't seem to expose the URL anywhere either.

Agreed, we have various bugs open in different bugzilla components. Will ping people about it.

> 3\. Sometimes the devtools get stuck somehow, i.e. I suddenly can't open the > Inspector anymore, or the console wwill stop displaying messages. This > happened at least up until FF25, at which point I gave up and installed > Firebug again.

Do you want to try out Aurora again? I recall a couple issues like what you described that got fixed (one of which was my fault, woops!) and I'd love to know if you are still experiencing this or if it is groovy now.

If you are still experiencing it, please file a bug!

[https://bugzilla.mozilla.org/enter_bug.cgi?product=Firefox&c...](https://bugzilla.mozilla.org/enter_bug.cgi?product=Firefox&component=Developer%20Tools)

> 4\. Please support all different color syntaxes (ideally as in Firebug where > I can choose my preferred format and have everything converted to it)

You mean custom syntax highlighting? Would be nice to have, but honestly probably not a priority. Everyone is very busy trying to bang out features and bug fixes, and even just the two themes we support now feel like a burden (at least to me). Hopefully we can do this sometime in the future, though!

> Otherwise it seems you're doing a great job, I just wish you would get the > basics right first before adding stuff like a 3D view ;-)

Thanks! :D

For the record, the 3d view was either a GSoC project or an intern project, and hasn't really had much (basically any) maintenance burden.

On top of that, I think it is cool because it might not teach people who know about the web much, but it has the possibility to excite people who know nothing and make them want to learn more. I first got involved in web dev when I was like 10 or 11 and being able to view source was magical. Hopefully the 3d view helps give people that same feeling now days of being able to see a little under the hood and get them excited and draw them in.

Cheers!

<comment><USER9> Thanks for the answer! I'll take another look at the latest Aurora.

As for point 4, at the moment colors are always displayed with rgb() syntax, even if they were specified as a hex-string or with hsl() syntax in the stylesheet. In Firebug there's a dropdown menu on the style tab where you can choose between "Colors as Hex", "Colors as RGB" and "Colors as HSL".

<comment><USER8> Ah yes, I see! You can actually configure that via the options tab (the sprocket to the left of the console tab).

Soon, we will show you the colors as they were authored by default. I can't seem to track down the bug, but I know the inspector folks have it on their radar.

<comment><USER9> Yep just noticed it in the latest devtools blog post, the color swatches are awesome too!

</comment></comment></comment></comment></comment></comment></comment><comment><USER10> Still waiting for the Style Editor's search not to suck complete and utter ass...

<comment><USER11> see [https://news.ycombinator.com/item?id=6671062](https://news.ycombinator.com/item?id=6671062)</comment></comment>


Show HN: Mandelwave: A mandelbrot inverse spectrogram with Griffin-Lim algorithm - <AUTHOR> https://github.com/iRyanBell/mandelwave <comment><USER2> Parts of that sound like it comes straight from 2001: A Space Odyssey.</comment>


Milk: Kevin Rose's New Company Aims to Solve Big Problems on the Mobile Web - <AUTHOR> http://techcrunch.com/2011/04/04/milk-kevin-roses-new-company-aims-to-solve-big-problems-on-the-mobile-web/

<comment><USER2> To summarize: Kevin doesn't really have an idea yet (or at least doesn't have one that he wants to announce), but he did hire some people and he's not going to stick by any idea that isn't immediately successful.

Oh, and: mobile.

Isn't this a non-story? An announcement of an intent to create something in the future?

<comment><USER3> I don't think it's fair to call it a non-story. I think this approach is refreshing. Get great people together, play on their strengths, find something that works, grow it. But importantly, I think it's significant since Rose has clearly demonstrated his creative potential and you'd be foolish to bet against him doing some interesting stuff with Milk. It might be a non-story if it was about you or I.

<comment><USER4> This approach is not refreshing. It amounts to: lets get a bunch of people to brainstorm great ideas! Then we can build them!

Rings kind of hollow to me

<comment><USER5> I think you're downplaying the "pivot" aspect of Milk. It's not just a think tank, but an agile team that can switch up their tactics (revenue models, branding, priorities, etc.) at the drop of a hat. I'm excited to see what they can come up with in the next year.

<comment><USER2> It's easy to pivot when you don't have a product that people use. I'm sure many people on HN (myself included) have pivoted several times in the last year as well. Assuming one of their projects stick they'll become less agile. Unless they are just interested in being a flip factor.

</comment></comment></comment></comment></comment><comment><USER6> Thinking back to pg's weekend post (<http://news.ycombinator.com/item?id=2403696>), this seems like a good example of the kind of thing that drags down the quality of HN.

The article itself is very nearly content-free, and definitely does not gratify my intellectual curiosity. Reading it just felt like a waste of my time.

Most of the comments here are pretty mean and snarky - attacking Kevin Rose, Digg, Milk, or all three.

Hacker News used to be a lot better than this. I flagged it, fwiw.

<comment><USER7> As a dreamer who has difficulty taking projects past the proof of concept stage, I think it's fascinating Rose is starting a skunkworks/experimentation- style company. I would love to have a business like that where I had a staff and we would quickly develop ideas to the proof of concept stage and spin off companies. That's not something you see much in the wild... all you really hear about are the companies where a team took an idea all the way (to scale, if not to profitability).

I find this far, far more interesting from a business perspective than most of the "so-and-so is launching a startup" articles.

And honestly, I think it's far more relevant to hackers than, say, the Path announcement. Rose is basically starting a company where the business strategy is hacking. Not customer development or venture-backed growth... just hacking together cool projects and see what sticks.

So, not flagged.

</comment></comment><comment><USER8> A development lab, not an incubator, but they don't plan on growing the team beyond ten people for at least a year. What do you all make of this?

My initial reaction is that they have assembled a team of people to work on crazy ideas to see if any of them catch on and then ideas that catch on will be spun off into separate companies. Sounds like a good match for Kevin's product ADD, but I feel like this could quickly spin into Digg again where people are spread too thin working on products with no future.

<comment><USER9> So, solutions in search of problems, then.

</comment></comment><comment><USER10> So what happens if Milk quickly stumbles upon the next Twitter? It sounds like Kevin would expect to still develop new ideas, but wouldn't Twitter have faltered if Ev continued to try new things instead of deciding to focus on his success with Twitter?

<comment><USER11> What's funny is that Ev stumbled on Twitter while working on Odeo . . .

</comment></comment><comment><USER12> I like how they got 'milk' on Twitter and Facebook.

How long until they pick up milk.com? - <http://milk.com/value/>

<comment><USER13> Not really directed to you (unless you have the answer):

Is there any way for regular people (i.e not large corporations or Kevin Rose) to request a screen name from twitter, assuming that they have a registered business with the same name? I realize twitter isn't mandated to do so, but it would be nice if small startups or individuals could request screen names if the screen name is inactive.

</comment></comment><comment><USER14> This is brilliant. 10 people really is the limit of organizational size where everyone can know everybody else and what they are working on. Better to focus on gathering the best group of 10 people and empowering each to do brilliant work.

You weren't meant to have a boss: <http://www.paulgraham.com/boss.html>

<comment><USER4> What about when those 10 people are working on 5 completely different ideas? 5 - 2 person teams to make 'world-changing' products? I don't think so

</comment></comment><comment><USER15> Great quote from Rose- "People talk about pivoting all the time now, but if something isn't working after four months, we'll just shoot it in the head and start again,"

This "Small Team + Many Ideas" format is very exciting, and I look forward to seeing its agile manner against the traditional format.

<comment><USER16> Or: "Small Team + Big Ideas," no? Since the article says, "A year from now, he expects the company won't have launched 20 small, cool ideas, but it will have developed four-to-six big, audacious ones."

<comment><USER17> Yes, big audacious ideas that can be implemented and proven successful by a couple of guys in four months.

</comment></comment></comment><comment><USER11> A small team building multiple different projects to see which one "catches" and THEN focus on successes.

My inner shiny-object entrepreneur says this is awesome.

My inner Confucius says he who chases two rabbits catches neither.

As an entrepreneur that, like most, struggles with FOCUS this seems like letting the inmates run the asylum.

Fun to watch, but not sure a recipe for success.

</comment><comment><USER18> I feel as though, like Digg, this is going to be an astonishingly effective mechanism for getting Kevin Rose attention.

And probably not much more than that.

What mystifies me is why he doesn't just focus on the thing he's good at: being in the spotlight. I think Digg made pretty clear the fact that he's just not the guy you want doing the day to day, tedious, mostly obscure work of running a company.

 _Which is fine_.

Maybe he could go to acting school. Or do a vlog?

<comment><USER19> I apologize for the accidental downvote.

 _I feel as though, like Digg, this is going to be an astonishingly effective mechanism for getting Kevin Rose attention._

I think you are taking away from Kevin. He actually changed the way we consume news online. It is arguable that he invented the very social-news-voting system we are using on HN. I can guarantee you a very small percentage of people who use sites that follow the Digg model know who KR is.

Edit: And I do not mean to be rude, but how does your contribution to the internet compare to his?

<comment><USER18> Reddit was founded without any knowledge of Digg. I'm not sure that removing Kevin Rose from our timeline has a material impact on how we consume news in 2011, except by dumping Digg's user base into Reddit that much sooner.

> It is arguable that he invented the very social-news-voting system we are > using on HN.

Given that Reddit was a Y Combinator company, my strong suspicion is that HN took its inspiration from sources other than Digg.

> Edit: And I do not mean to be rude, but how does your contribution to the > internet compare to his?

My contribution is immaterial to the discussion. Pointing out that Kevin Rose does much better work as an internet celebrity than as a business leader would remain true (or false) whether I'm Danilo Campos or Vinton Cerf.

<comment><USER19> I just found your original comment to be a bit mean. Sometimes you guys forget that people read this stuff, and words can hurt.

</comment></comment></comment></comment><comment><USER20> So does the name on the incubator have anything to do with Harvey Milk, or am I reading too much into it?

<http://en.wikipedia.org/wiki/Harvey_Milk>

<comment><USER21> I assumed it was because [for all non-human species] something that drinks milk is usually in its infancy.

</comment></comment><comment><USER22> Well if he has money to spend, actually this may be the best approach for him because he is a nice guy but not a tech visionary.

Bringing together a group of smart and talented people and let them experiment with little apps and see what catches on may be the best way to come up with a successful product.

Also, lets not forget that we live in a time when the 'coolness' of an app makes a it a company, not its revenue.

</comment><comment><USER23> "People talk about pivoting all the time now, but if something isn't working after four months, we'll just shoot it in the head and start again,"

Early adopters beware. If the idea doesn't work out for them, they'll pull the product from under you.

</comment><comment><USER24> This sounds like the formalization of market forces into one company. I could see real value in fine-tuning the right team.

It's all about the execution, right? :)

I love the idea of this business model and wish them the best.

</comment><comment><USER25> So 10 super ninja rockstar pirate devs? They build out awsome ideas, sell them and move on to somthing else? Never keeping a product long enough for it to implode?

I guess he was serious about what he learned at Digg.

</comment><comment><USER26> Let me know when something has actually been created. Ideas and intentions are worthless until you actually do something with them.

</comment><comment><USER27> How about just solving one problem first and then moving onto the next?

</comment><comment><USER19> I would like to see more of these types of companies; a dozen of engineers, + 1 business/marketing gal/guy coming together and pushing out 12 products/year.

</comment><comment><USER19> Side note: Several people have been saying KR is a non-technical founder, but you should know that he actually studied computer science.

<comment><USER28> > actually studied computer science

...before dropping out in 1998.

<http://en.wikipedia.org/wiki/Kevin_Rose#Early_life>

<comment><USER29> Not sure if you're implying that KR isn't a technical guy (he may or may not be, I don't know enough about him), but with your logic, Bill Gates isn't a technical guy either, seeing that he dropped out of college too (although before choosing a major).

Majoring in comp sci = having some technical knowledge, whether you graduate or not.

Not majoring in comp sci != not being a technical guy.

<comment><USER28> I wasn't suggesting Kevin is or isn't a technical guy. I merely think that it's very biased and weird to 'remind' everyone that Kevin studied computer science as an argument to say he's technical - but not mention that he dropped out.

I was trying to add relevant facts to a biased post without trying to get involved in the discussion...guess it's too late for that.

I don't know enough about him either, so I'll stop bringing things up here on this topic. :)

<comment><USER29> Yeah, sorry if that came across as hostile. It just seemed like you were saying "he's not technical because he dropped out."

I do agree with you in that his major doesn't necessarily mean he's technical, though.

</comment></comment></comment></comment></comment><comment><USER30> There's already an app for when it fails: Remember the Milk.

<comment><USER29> A little snarky, no? With all the talk of "save HN", comments like this _really_ don't seem to add anything worthwhile to the discussion.

<comment><USER30> A little snarky, yes. Naming a development team 'Milk' is like naming an iPhone app 'Color'.

<comment><USER29> Your previous comment had nothing to do with the disadvantages of the name and everything to do with making a clever, ironic joke, which, by the way, was negative to begin with ("for when it fails".)

Unless you think that "Milk" is a bad name because a random iPhone app's name can be used in a roundabout way.

I hate to be so critical, but Reddit-style comments like this _really_ don't belong here.

<comment><USER30> O. I forgot to mention that–it was also a test to see how a reddit-comment would fare. Mixed results–but I'd say HN has fallen, considering only one person attacked me for it.

</comment></comment></comment></comment></comment><comment><USER31> Frankly, I am surprised it took him this long to come up with the idea of doing an idea lab. I am also surprised there aren't many more of these in the valley.</comment>


Automata Memory Processor Points to Future Systems - <AUTHOR> http://www.nextplatform.com/2015/12/03/2304/ <comment><USER2> What goes around .....

Memory executing operations is an explored space, although one that came to a dead end pretty quickly, but that's no reason to dismiss it.

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

The CAPP executes a stream of instructions that address memory based on the content (stored values) of the memory cells. As a parallel processor, it acts on all of the cells containing that content at once. The content of all matching cells can be changed simultaneously.

One of the early Air Traffic Control computers ran such an architecture in 1972

"STARAN might be the first commercially available computer designed around an associative memory. The STARAN computer was designed and built by Goodyear Aerospace Corporation."

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

A paper about it

[http://www.cs.kent.edu/~parallel/papers/p405-batcher.pdf](http://www.cs.kent.edu/~parallel/papers/p405-batcher.pdf)

There's also an interesting book, which I have read, on the subject :

Content Addressable Parallel Processors

Author: Caxton C. Foster

John Wiley & Sons, Inc. New York, NY, USA ©1976

ISBN:0442224338

</comment><comment><USER3> > _"When I was at Intel, and especially as we were looking at exascale > computing as a set of problems, the focus was at first, how to get memory > closer to the processor. Now it's shifted to how to get the processor closer > to memory." With Automata, however, he says Micron is bringing those lessons > together but then asking, "What about the role of memory for doing some of > the processing"? And herein lies the key. The memory becomes the compute._

This reminds me of all the memristor hype from a few years ago. Is there any overlap between the subjects?

</comment><comment><USER4> David Patterson (famous for RISK, RAID and computer clusters) tried to make IRAM (RAM chips with processors) happen 15 years ago. I think the idea is sound. It's just question of when.

[http://iram.cs.berkeley.edu/](http://iram.cs.berkeley.edu/)

<comment><USER5> See the Venray TOMI processors that do exactly that. Result is incredible performance at many fold lower cost in silicon.

</comment></comment><comment><USER6> At some point your operations have to get atomistic. A mult requires O(n^2) transistors for n bits, so having each machine word carry its own mult unit seems silly. I suppose one could have a single bit with an xor(add), and(carry/mult).... But isn't that just an FPGA?

<comment><USER7> Sorry to be pedantic but multiplication requires O(n ln(n)) not O(n^2) [1].

[1] [https://en.wikipedia.org/wiki/Multiplication_algorithm#Fouri...](https://en.wikipedia.org/wiki/Multiplication_algorithm#Fourier_transform_methods)

<comment><USER6> oh! very cool. Thanks! I knew about toom-cook, and based on what I do I figured it could be faster by breaking up into 'bigger power of 2 digits'. Now I know for sure (without having to implement it myself).

Realistically though, you're not gonna implement a FFT mult on a 64-bit integer/float even.

Pedantry is not annoying if it's a learning opportunity (or if it's excellently funny), IMO.

</comment></comment></comment><comment><USER8> Some more detail & discussion on the platform from a couple of years ago: [https://news.ycombinator.com/item?id=7314867](https://news.ycombinator.com/item?id=7314867)

</comment><comment><USER5> I see it's biggest application as an accelerator for any application that's basically pattern-matching. Mining text or network packets especially.</comment>


ES6 on AWS Lambda - <AUTHOR> http://www.rricard.me/es6/aws/lambda/nodejs/2015/11/29/es6-on-aws-lambda.html <comment><USER2> Depending on your use case, you can also use ES6 features on AWS Lambda by embedding another node version in your zip package. You then use the lambda supported version of node to launch/bootstrap your chosen version when the lambda function is activated. Of course, Webpack still supports more ES6 features than node at the moment, but the gap is rapidly shrinking.</comment>


Sources: NSA sucks in data from 50 companies (more Prism details) - brown9-2 http://www.theweek.com/article.php?id=245311

<comment><AUTHOR> This is one of the most cogent articles I've read today about this atrocious issue. At least, from a political standpoint. A lot of the technical details seems hokey:

> PRISM works well because it is able to handle several different types of > data streams using different basic encryption methods, the person said. It > is a "front end" system, or software, that allows an NSA analyst to search > through the data and pull out items of significance, which are then stored > in any number of databases. PRISM works with another NSA program to encrypt > and remove from the analysts' screen data that a computer or the analyst > seems to be from a US person who is not the subject of the investigation, > the person said.

"handle different basic encryption methods": what does that even mean? Are they able to decode AES? Likewise, "remove from an analyst's screen"?? Seems exactly like technical mumbo jumbo to impress an illiterate journalist.

But the main point still stands: the administration is relying on more and more creative interpretations of words like "analyze" and "collect", and is not raising the specter of terrorism to cover their naked grab for power.

</comment><comment><USER2> Seems the link has changed: [http://theweek.com/article/index/245311/sources- nsa-sucks-in...](http://theweek.com/article/index/245311/sources-nsa-sucks-in- data-from-50-companies)</comment>


Computer Scientists Make Progress on Math Puzzle - <AUTHOR> http://www.utdallas.edu/news/2010/10/28-6621_Computer-Scientists-Make-Progress-on-Math-Puzzle_article.html <comment><USER2> That article appears to be partly wrong and partly misleading. The game is described in a way that makes no sense and so the significance of the new proof is not made clear. I think this is more accurate:

In topswops we start with a shuffled deck of N cards numbered 1..N. In each move we reverse the order of the top K cards where K is the number initially on the top card. (After that reversal, the original top card, K, is now the Kth card down and the formerly Kth card down is now the top card. Any cards in between have reversed order.)

The game terminates when the card number 1 comes to the top. (For reversing the order of a single card has no effect.)

Here is what the article leaves out: If, when 1 comes to the top, the deck is _sorted_ 1..N, you win. Otherwise, you lose. This is a very tedious form of solitaire.

Note that if your shuffle produces an already sorted deck, you win trivially with 0 moves: the deck is already sorted and 1 is on top! If the shuffle produces a reverse sorted deck, N..1, you win trivially after 1 move!

If someone hands you a different shuffle, you might be playing for a very long time, uncertain whether you will win or lose.

For every deck-size N, there is some number of moves - call it ENOUGH(N) - such that if you haven't won in ENOUGH(N) moves, then you will not win with that deck. For example, if the deck has 12 cards, and you've been playing for 64 moves ... why you might as well quit. We know for sure that any shuffle that wins ends after at most 63 moves for a deck of size 12. ENOUGH(12) is 63. [supposedly, I haven't double checked the brute-force proof]

What is the formula for ENOUGH(N)? or at least an approximate formula?

For values of N up to (the article says) size 18, ENOUGH(N) has been computed by brute force.

Knuth gave a formula KNUTHTOPS(N) and proved that ENOUGH(N) <= KNUTHTOPS(N). His proof was interesting because, asymptotically, KNUTHTOPS(N) is lowest upper bound known. You can confidently stop a losing game after KNUTHTOPS(N) moves -- but it is possible you could have stopped earlier if you had a better formula.

These new guys gave a formula, HALnLINDAWOPS(N), and proved that HALnLINDAWOPS(N) <= ENOUGH(N). HALnLINDAWOPS(N) is interesting for being the highest lower bound known. Don't even think about stopping until you've made at least HALnLINDAWOPS(N) moves or you are guaranteed, in some cases, to quit part way through a winning shuffle.

The number at which you can quit safely, no fear of stopping a winning game, is between HALnLINDAWOPS(N) and KNUTHTOPS(N) (inclusive). The main advance is squeezing that range from below with a new proof.

</comment><comment><USER3> Solving that puzzle is far beyond my intelligence, but I did have Dr. Sudborough as a professor. He was one of the best professors I had at UTD, really taught Automata Theory very well.

I'm glad he's getting more recognition.

<comment><USER4> So did I. 2007 I believe. When did you?

<comment><USER3> Hah, same here. I graduated Summer of 2007, so I probably had him in the Spring 2007 class. As a tenured professor, he could've easily made me see a TA when I had questions. Instead, he let me come to his office and worked with me for a while on problems that were tough for me but rote for him. I really appreciated it.

</comment></comment></comment><comment><USER5> There seems to be a lot of disagreement about lower bounds here. The best case lower bound is trivially 0 since you could start with a terminating permutation. The article is talking about a worst case lower bound, which is what one would use to assign the problem to a complexity class.

</comment><comment><USER6> It's nice to see some noteworthy CS/Mathmatics accomplishments coming from outside Stanford and MIT. But perhaps I'm biased being from the Dallas area.

</comment><comment><USER7> I must be misunderstanding the problem. Why is the lower bound on the number of operations not 1, since you have a 1 in n chance of turning over the "1" card as your first operation?

<comment><USER8> The lower bound indeed is 1, however higher lower bounds can be found.

Here lower bound means that there exist a permutation that will take this many operations. Their goal is to find what the maximum number of operations assuming worst permutation. This is accomplished when the lower bound equals the upper bound.

Proving lower bounds is easy they just need to give an example. Proving upper bounds is hard, somehow they have a way besides running all possible cases. (The article doesn't explain how and I haven't delven deeper).

</comment></comment><comment><USER9> The article doesn't make sense. It implies that the lower bound proved is exponential but much better than the conjectured lower bound (also exponential):

"Knuth had previously proved an exponential upper bound on the number of Topswops steps, and conjectured that one might also prove a matching lower bound. What Dr. Hal Sudborough and Dr. Linda Morales did, however, was to prove a lower bound that is much better than that proposed in Knuth's conjecture..."

However, the paper cited says "A Quadratic Lower Bound for Topswops", so the lower bound proved is much worse than the one conjectured by Knuth.

<comment><USER2> You are right. The article is a muddle.

I think they meant: the quadratic lower bound is the highest yet proved -- not that it is "better" than Knuth's unproved conjecture.

<comment><USER9> It's more likely that the person who wrote this article doesn't even know what a lower bound is.

</comment></comment></comment><comment><USER10> ACM link for the paper: <http://portal.acm.org/citation.cfm?id=1866548>

<comment><USER11> Note that that is the ACM link to the citation; the paper itself is published in an Elsevier journal, and is not available to ACM Digital Library subscribers (like myself.)

<comment><USER12> [http://linkinghub.elsevier.com/retrieve/pii/S030439751000428...](http://linkinghub.elsevier.com/retrieve/pii/S0304397510004287)

You can see the article there if you have a subscription. If you don't have one, you can buy a copy for $40. Otherwise, you can just go to the library.

It's also not too difficult to find a 2005 review copy online. Preprints for the paper apparently date back to 1995.

</comment></comment></comment><comment><USER13> Vague title of the month award?</comment>


Using Visual Studio Code for Qt Applications - <AUTHOR> https://www.kdab.com/using-visual-studio-code-for-qt-apps-pt-1/ <comment><USER3> Thanks for this, I'm sure many would give it a try and will like the idea of having the possiblity and easier selection when working with their favorite IDE or editor when working with Qt.

Having said that, I will never leave QtCreator for VS Code, not that is not good, but QtCreator feels much solid and integrated than any other IDE when working with Qt/C++ or many C/C++ code bases out there, in matter of fact, QtCreator is my go to when doing c/c++.

I've tried CLion but I don't think will use that either.

Need to mention is so damn light ?

<comment><USER4> You're not the first person to mention QtCreator for c/c++ projects ( not even using QT ). Can you elaborate about what you like about QtCreator over other c/c++ IDEs?

</comment></comment><comment><USER5> I'd recommend using clangd together with the vscode-clangd extension instead of VSCode's "official" C/C++ extension. Properly set up with a compile_commands.json and its pretty much better than any C/C++ IDE I've ever used.

<comment><USER6> Interesting. I have used VSCode on Mac for C++ but it has been a royal pain in the ass recently with lldb-mi issues related to Catalina.

If you don't mind sharing I am very interested in your setup.

<comment><USER5> Sure!

I use CMake for all my projects, and passing "-D CMAKE_EXPORT_COMPILE_COMMANDS=ON" generates the compile_commands.json for clangd. I create a symlink to it in the main project folder so clangd can find it.

Clangd embeds clang-format and clang-tidy, so given appropriate configuration files formatting in VSCode just works with no extra extensions but vscode- clangd.

For debugging, I use CodeLLDB. Haven't had any problems with it so far, everything seems to work fine. Debug console works etc.

</comment></comment></comment><comment><USER7> I use Visual Studio 2017 to develop a Qt application on Windows. I use Qt Creator (QtC) for same app on macOS. I love Qt, am delighted to have converted from Win32.

Sorry but VS still feels as solid as a tank, Qt Creator is less responsive to my needs.

\- 'asserts' in QtC bring the debug session to a grinding halt. I can't step over like I can in VS.

\- Where can I define macros in QtC?

\- In debug mode, QtC is unable to display certain types of variables, way too often.

\- I have fiddled for days with the .PRO file, read all the StackOveflow posts, and I still can't suppress reams of pedantic warnings.

\- QtC just gives the impression of a rudimentary attempt at VS, like things are about to fall apart at any moment. To a programmer accustomed to VS, there always seems to be something missing, and I don't mean just different keyboard shortcuts. QtC has a long way to go.

Still, it's better than a text editor and the command line.

<comment><AUTHOR> Fun, I have exactly the opposite experience re. VS and Qt Creator - <USER2> sometimes takes, like 15 minutes to start a debug session on a large project while QtC can get to work in the same time that it would take gdb to start. And that's without counting the clang-based code model, all the niceties under the locator (ctrl-k), etc etc

> Where can I define macros in QtC?

the IDE is imho not the place to do that. Just use CMake and target_compile_definitions(my_target PRIVATE MY_MACRO=123)

> \- In debug mode, QtC is unable to display certain types of variables, way > too often.

very strange, but then I mostly use it on Linux with gdb / lldb, maybe the cdb integration is less good.

> \- I have fiddled for days with the .PRO file, read all the StackOveflow > posts, and I still can't suppress reams of pedantic warnings

If CONFIG += warn_off in your .pro (switch to cmake !!!) does not work please file bugs !

<comment><USER7> Sorry, I meant keyboard shortcut macros (Ctrl M, R in VS 2017).

<comment><AUTHOR> hmm.. this ? [https://doc.qt.io/qtcreator/creator- macros.html](https://doc.qt.io/qtcreator/creator-macros.html)

</comment></comment></comment></comment><comment><USER8> Qtcreator is leaps and bounds ahead of vs

<comment><USER9> Yeah, also the only IDE that can open and index Chromium sources(about 40k files).

</comment></comment><comment><USER10> I love Qt Creator, but the lack of tabs drives me nuts. The interface is so unfamiliar that I just can't use it. I use it to debug, to build interfaces, to compile, etc... but to code, I just use Sublime/VS Code/Atom/whatever.

<comment><USER9> That's funny because I prefer "Open Documents" dock in QtCreator to the tabs. It's hard for me to switch between files because I can just see 7-8 tabs without scrolling and in the dock I might have 20 files with longer names.

</comment></comment><comment><USER11> Is anyone here using gitlab with a runner to build QT applications upon commit? I've got a friend who needs this and he is only using QTCreator but it seems like building inside a docker container should be possible. I guess I'm asking: can all the things discussed here be done from command line instead of inside the editor and if so, how do you determine those commands?

<comment><USER12> I've led adoption on that exact setup at work. You can definitely do it, but I have nothing but bad things to say about Qmake. It's poorly documented, inscrutable, and a huge PITA. Switch to any other build system if you can.

That said, automating the builds in GitLab CI was worth it 1000x over.

<comment><USER8> If you're fighting qmake there is a very good chance you're fighting the wrong problem. Is your build a complicated mess? (It shouldn't be) Do you have a complicated multi platform mess (it shouldn't be complicated)

I would be happy to take a look at your build.

<comment><USER12> Off the top of my head:

\- qmake doesn't support true dependencies between subprojects (ie, if I ask it to build a/b/c, it can't know that a/b/c depends on d/e/f)

\- qmake's support for integrating additional compilers is inscrutable and again, has terrible issues with parallelism and dependencies

\- the way it is backed by make is prone to incremental build issues

<comment><USER8> For point 1, it can if you want it to. [https://wiki.qt.io/SUBDIRS_- _handling_dependencies#Defining_...](https://wiki.qt.io/SUBDIRS_- _handling_dependencies#Defining_Project_Dependencies:_.depends_attributes)

I have qt kits to build for 4 different platforms and 3 different build toolchains. It was very easy to set up, and flipping between kits either in creator or in a terminal takes mere seconds.

I have never experienced your 3rd point.

<comment><USER12> That allows you to support _some_ dependency ordering from the top level, but not internally. It is very coarse, and also suffers from "recursive Makefile" issues. It's also less ergonomic: a developer can't go into a specific sub folder and build ONLY that sub folder and its dependencies. If you change a library, it also can't reliably tell you which other binaries are its dependents. You have to let Make walk the full project tree.

By "additional compilers," I mean adding additional metacompilers, other languages, and so on. There is QMAKE_EXTRA_COMPILERS, but I can't figure out how to get it to properly integrate with the dependency graph for the life of me.

Have you ever had to resort to "make distclean" to get a clean compile?

<comment><AUTHOR> > It's also less ergonomic: a developer can't go into a specific sub folder > and build ONLY that sub folder and its dependencies

I'm not a fan of qmake but this works just fine with it.

<comment><USER12> The _dependencies_ is the trick.

Given I have this layout:

        bin/bin.pro # specify bin/bar/ as subfolder
        bin/bar/bar.c
        bin/bar/bah.h
        bin/bar/bar.pro
        lib/lib.pro # specify lib/foo/ as subfolder
        lib/foo/foo.c
        lib/foo/foo.h
        lib/foo/foo.pro
        project.pro # specify bin/ and lib/ as subfolders

And I have a fresh checkout, how do I compile "bin/bar" and all of its dependencies automatically? I want to run ONLY "bin/bar". I don't want to compile the entire repo. I don't want to have to investigate "bin/bar" and learn all of its transitive dependencies. I just want to run "bin/bar".

Honest to god, I have wanted this for over a year and it does not seem possible.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER13> what advantages does vscode add for c++ development over current IDEs and editors?

<comment><USER14> It's simple, light weight, a lot of cool extensions. I use vscode for developing nodejs, python, ffmpeg, Qt, frontend...it's my all in one IDE.

<comment><USER15> How exactly it is lightweight when it carries a copy of Chrome browser in the background? Jut at idle with no files opened it uses 600 Mb of memory. PS: it is a nice software which I also use extensively, but Electron is an abomination, Flash of 21 century.

<comment><USER16> Just opened it up on my machine (2019 Macbook Pro)- 65MB with no files opened. No idea how you're getting to almost 10x that.

Edit: My bad, apparently I didn't count all processes.

<comment><USER17> 10 minutes ago, I downloaded the latest VSCode 1.43 and installed it on a fresh macOS 10.15.3.

Launching it with no files open, the total private+shared memory adds up to ~300 MB. Screenshot of macOS Activity Monitor:

[https://imgur.com/a/xDdzDRr](https://imgur.com/a/xDdzDRr)

This memory usage is roughly the same on Windows 10 Task Manager:

[https://imgur.com/a/xWkdoN1](https://imgur.com/a/xWkdoN1)

In contrast, the so-called "heavier" classic Visual Studio 2019 v16.5 (devenv.exe) with no files open, Task Manager stats shows it using less than ~200 MB.

I think some folks get the impression VSCode is "lightweight" because the _GUI /UI_ is lightweight. VSCode is less "busy" looking... less menu options, no ribbon with icons, less multi-panels of properties, etc. VSCode's GUI looks more like a bare-bones "text editor" than an IDE.

</comment></comment></comment></comment></comment><comment><USER18> Is there a reason I wouldn't just use creator? Does VS offer me something creator can not?

<comment><USER19> Tabs

<comment><AUTHOR> Qt Creator has vertical tabs ("Opened documents" panel) which is way superior as soon as you have more than 3 files open. It's also pretty useless since you can just <ctrl-k> <first few letters> <enter> or <ctrl-tab> to switch</comment></comment></comment>


You don't need every customer - <AUTHOR> http://www.marco.org/2013/04/20/every-customer

<comment><USER2> I've been saying this forever here but Marco says it so much better. The majority of the times I see an article on HN getting popular about how awful some app or site is its usually this kind of scenario that Marco describes in effect.

I can't tell you how many times I've seen an article here about some poor guy complaining that his favorite app changed a feature or price or policy that's often pretty trivial and turns it into an opportunity to start drama and shame the company because he didn't get the memo. Except everyone else did.

When we see something we don't like it isn't bad to complain about it in and of itself but what isn't okay is this self-righteous attitude people have started to acquire. It's this phenomenon where we think that we can not only publicly shame companies on our blogs and believe we're important enough for them to change it back for us but, worse, we seem to think we're objectively right. This sort of mentality doesn't seem to carry over into the real world nearly as often. It seems that if you do business online your customers expect you to cater to each and everyone one of them individually. If I have oddly sized feet and can't get a pair of good fitting Nike's I don't try to publicly shame the company for not providing a shoe in the style I want in the size exactly tailored to my odd foot measurement. But when it comes to the Internet you had better be all things to all people it seems.

Even stranger, for a community like HN where many of us are working on online products, we seem more guilty of this than the average person. How is that? Is it that we think because we know how to build things that our way is right? I don't know but I'm really glad Marco wrote this and I'm really glad people here are reading it.

<comment><USER3> _When we see something we don't like it isn't bad to complain about it in and of itself but what isn't okay is this self-righteous attitude people have started to acquire. It's this phenomenon where we think that we can not only publicly shame companies on our blogs and believe we're important enough for them to change it back for us but, worse, we seem to think we're objectively right._

Social media is great - platforms like twitter and facebook give people an online voice. However, this also creates an over inflated sense that their voice matters more than _anyone_ else.

Part of the phenomenon you describe regarding public shaming is that this has become _default_ way of addressing situations - because that's the _culture_ those social platforms have created & reinforced.

Further, it's much easier to do this online because you're just looking at pixels on a page - not into the eyes of a fellow human.

</comment></comment><comment><AUTHOR> I think Marco has a good point -- that you basically can't expect to please everyone and you'll kill your product if you're optimizing for edge cases (especially from irrational users and especially with a 1-man shop). However, I also think it's important to be gracious to every one of your customers.

If someone paid for something and they're not happy, and if your costs are virtually zero for that customer (and with iOS apps it almost inevitably is), then you should _always_ apologize and offer them a refund. Even if you don't want them as a customer, you can be gracious and they're probably less likely to bash you publicly. That $0.99 is a small price to pay to avoid a negative review. Mitch Hashimoto wrote a good post that serves as a basic guide for customer support:

<http://mitchellh.com/apple-the-key-to-my-success>

<comment><USER4> that is the reason apple should provide free trial.

If i apologize the cost is not zero any more.

<comment><USER5> For people requesting a refund I tell them to contact App Store support. Their official policy is no refunds, but I've never had someone come back saying Apple said no. With enough hassle they might add a way for developers to do refunds.

</comment></comment></comment><comment><USER6> I learned that catering to everyone leads to mediocrity while in the restaurant business. One chef I worked with was not afraid to tell people where the door was. He had one of the top kitchens in Vancouver BC because of it.

Listen to your customers, but know that in the end, you are responsible for and the sole guardian of quality. If you don't know what quality is in your area in business, move to somewhere you do.

</comment><comment><USER7> Sometimes I wish there was a way to flag a comment and have it pulled while it's investigated. I wonder if there's enough reviews on the App Store to make that impractical.

Also, I'd ban people from reviewing apps once they are found to leave inappropriate ones like "this isn't a very fun game" on Instapaper - it makes me immediately think they're a troll.

[Edit] to a degree, I wonder if we could algorithmically determine if a comment is likely to be inappropriate and have it hidden until investigated. But this all reminds me of a quote: "You can't solve social problems with technology".

<comment><USER5> I wish reporting a review had at least a non-zero chance on the App Store. I've never had a single result or any feedback at all with it.

</comment></comment><comment><USER8> "If you sell a 99-cent app to just 1% of the people who bought new iOS devices in the 2012 holiday quarter alone, you'll clear about $519,750."

[http://successfulsoftware.net/2013/03/11/the-1-percent- falla...](http://successfulsoftware.net/2013/03/11/the-1-percent-fallacy/)

<comment><USER9> Marco's statement is not an instance of "The 1% Fallacy". He's not suggesting that you can throw arbitrary products against the wall and succeed because 1% => 500k; he's saying "it's silly to try to cater to every customer because the math doesn't make sense".

<comment><USER10> Here here. March's point is also that if you piss off 99% of the potential market, you can still make a lot of money. He's addressing the 100% fallacy, the idea that you have to satisfy 100%. He's pointing out that that's not necessary

</comment></comment></comment><comment><USER11> Best part:

 _When evaluating complaints, we need to consider whether the complainer is credible, whether they have reasonable expectations, and whether a significant number of others have made similar complaints or are likely to have experienced similar problems. For many complaints, a reasonable outcome isn't possible or pragmatic, and the best solution is to ignore them._

</comment><comment><USER12> I think Marco is describing two things that I've felt strongly about for a long time:

(1) The medium deeply influences the conversation. It just seems like human nature that people are much more likely to speak up to complain about something than to say that they liked something. On top of that, the Internet as a medium results in an overwhelming slant towards negativity (the GIFT), nitpickiness, etc. in online reviews and commenting systems. So, you have to take this into account when using online sources for getting a sense of how people feel about something.

An extreme example seems to be pretty much any Linux-centric forum anywhere. An article about some distro or desktop environment or programming language or anything really, no matter what's being discussed, will inevitably be filled with comments about how much it sucks. The more helpful ones will be along the lines of, "X sucks, you should use Y instead". People reply to that one with, "Y sucks, you should use Z instead", where Z is more obscure than Y which is more obscure than X. Eventually things peter out when the leaf nodes are all about things so obscure that there's no one participating who can say that they tried that, and it sucks too. The reader is left with the feeling that absolutely everything is freaking terrible, except for some random thing you've never heard of that no one uses, which is just not true.

(2) From a design perspective, he's basically just saying that you can't please everybody, and attempting to do so may just end up pleasing no one. Certain computer companies are well-known for focusing on a few very specific products with relatively few config options, as opposed to other companies (HP and Dell being prime examples) that try to exhaustively cover every possible niche and top it off with a gazillion build options. The former is intentionally limiting their appeal in order to make something that will make a smaller group of people very, very happy, whereas the latter is trying to be all things to all people.

These are both legitimate business strategies, but if I happen to be in that target audience for the more specialized company, then they are pretty much guaranteed to have my business. The key for success for the more specialized company is to cast a wide enough net as to not restrict themselves to a niche audience, have the design and engineering chops to offer stuff that the all- things-to-all-people companies can't match, and not be tempted by market share to dilute that vision. It's an inherently risky approach but it can be very rewarding, financially and creatively.

</comment><comment><USER13> An analogy I like to use: imagine you own a Thai restaurant. People come in and love the food. Others don't like it, saying things like "You know, I really prefer sushi, can you serve raw fish?" or "I really like spaghetti, can you use more tomato sauce?"

You have to recognize when criticism means the customer is just not your target market ("Look -- you're in a Thai restaurant!") vs. a real complaint on an issue with your product or service ("Your waiters are rude" or "You are using too much salt.").

Not all criticism is of the 2nd type. We want restaurants to be their best, authentic selves, and not some amalgam of everyone's preferences.

</comment><comment><USER14> I don't know if I fully agree with this post. I mean its true you don't need every customer but if someone uses your product or service and is upset by specific features/aspects, its important to make them feel heard by acknowledging their sentiment. That doesn't mean you go and build whatever they wanted you to build. But it just means you value people who took the time to say something. I think every customer or user wants to feel valued.

<comment><USER15> In theory, I agree with this -- in practice, I suspect you have to do a bit of subjective triage, particularly once you get past a certain volume level (which is itself subjective). The key is "upset by specific features/aspects."

Bob writes to you, "Hey, I really like this app, but feature X is very important to me." Sam writes to you and says, "Your app is a useless piece of shit." Writing back to Bob to say, "Thanks for your feedback, I'll consider that for the next version" -- or even to say, "Thanks for your feedback, but I'm sorry to say that feature X isn't on our roadmap" -- may well be worth your time. (Especially since your time, in this case, is probably about two minutes, less if you set up a couple Text Expander snippets for this.)

But is writing back to Sam worth your time? It may be that Sam feels the same way that Bob does, that he _mostly_ likes your app but considers feature X a critical omission. But you have to get him to stop flinging flaming poop at you and actually explain what his dilemma is. And he may just hate your app, full stop. He may be too inarticulate to explain what he needs from your app. He may just like flinging flaming poop.

</comment></comment><comment><USER16> Marco seems to achieve quite a bit of acclaim from saying very intuitive things in a very verbose way.

This entire piece could be effectively conveyed in a pair of sentences: "Reviews are arbitrary and uncontrollable, and reviewers are irrational and untrustworthy. Reviews should be ignored so long as your app is doing as well as you'd like."

<comment><USER17> The trick is not in the saying of the idea, it is in the preparation of a nest for the idea in the next host brain.

</comment></comment><comment><USER18> Just a little anecdote that I've found interesting since I started my music website HypedSound. I'm completely redesigning and relaunching the site with the same community and a new vision in a couple months, but right now I still have a paid featured artist spot on the homepage. I've had a fair number of people pay for this spot and not one single person has complained. Nothing about wanting their money back, not liking that they paid for it, or anything. Sometimes I feel like the people who pay for an app or feature of your product are less likely to complain than someone who uses it for free. That being said, at the moment I think they have every right to complain because the site is slow and clunky and lacks any sort of design hierarchy or central theme :)

</comment><comment><USER19> "The most important input for your pricing is quite simple: are enough people buying it at its current price? If not, you might have a pricing problem, but not necessarily. If enough people are buying it, you face the interesting question: can you charge more?"

Wished he'd defined what's "enough" at least for him.

<comment><USER20> I think that's the point: He can't, and if he did, it wouldn't be relevant to anyone else. Figuring out what entails "enough" is exactly the exercise that makes the question useful.</comment></comment>