Windows NT Kernel Contributor Explains Why Performance is Behind Other OS - <AUTHOR> http://blog.zorinaq.com/?e=74 <comment><USER3> It's nice to see that internal developers feel the same way about XNA that external developers (who used to build XNA games, or still build XNA games) do.

From the outside I always assumed the constant flood of new, half-baked features instead of fixes and improvements to old ones was caused by interns and junior devs looking for glory - sad to hear that's actually partly true. I always considered frameworks like WPF (or Flex, for that matter) 'intern code' - not that interns necessarily wrote them, but they reek of not-experienced- enough engineers trying to solve problems by writing a bunch of new code, instead of fixing existing code.

It really is too bad, though. There are parts of the NT kernel (and even the Win32 API) that I consider a joy to use - I love IOCP, despite its warts, and APIs like MsgWaitForMultipleObjects are great tools for building higher-level primitives.

Plus, say what you want about GDI (there's a lot wrong with it at this point), but it's still a surprisingly efficient and flexible way to do 2D rendering, despite the fact that parts of it date back to before Windows 3.1. Some really smart people did some really good API design over time over at Microsoft...

<comment><USER4> Actually, I think one NT's largest advantages over POSIX systems is process management: yes, the venerable CreateProcess API.

See, in Windows, processes are first class kernel objects. You have handles (read: file descriptors) that refer to them. Processes have POSIX-style PIDs too, but you don't use a PID to manipulate a process the way you would with kill(2): you use a PID to _open a handle_ to a process, then you manipulate the process using the handle.

This approach, at a stroke, solves all the wait, wait3, wait4, SIGCHLD, etc. problems that plague Unixish systems to this day. (Oh, and while you have a handle to a process open, its process ID won't be re-used.)

It's as if we live in a better, alternate universe where fork(2) returns a file descriptor.

You can wait on process handles (the handle becomes signaled and the wait completes when the process exits). You can perform this waiting using the same functions you use to wait on anything else, and you can use WaitForMultipleObjects as a kind of super-select to wait on anything.

If you want to wait on a socket, a process, and a global mutex and wake up when any of these things becomes available, you can do that. The Unix APIs for doing the same thing are a mess. Don't even get me started on SysV IPC.

Another thing I really like about NT is job objects ([http://msdn.microsoft.com/en- us/library/windows/desktop/ms68...](http://msdn.microsoft.com/en- us/library/windows/desktop/ms684161%28v=vs.85%29.aspx)). They're a bit like cgroups, but a bit simpler (IMHO) to set up and use.

You can apply memory use, scheduling, UI, and other restrictions to processes in job objects. Most conveniently of all, you can arrange for the OS to kill everything in a job object if the last handle to that job dies --- the closest Linux has is PR_SET_PDEATHSIG, which needs to be set up individually for each child and which doesn't work for setuid children.

(Oh, and you can arrange for job objects to send notifications to IO completion ports.)

Yes, Windows gets a lot wrong, but it gets a _lot_ right.

<comment><USER5> > _WaitForMultipleObjects as a kind of super-select to wait on anything_

Except for the 64 handle limit, which makes it largely useless for anything that involves server applications where the number of handles grows with the number of clients. So then you'd spawn "worker" threads, each handling just 64 handles. And that's exactly where your code starts to go sour - you are forced to add fluff the sole purpose of which is to work around API limitations. What good is the super-select if I need cruft to actually use it in the app?

And don't get me started on the clusterfuck of the API that is IOCP.

> _Yes, Windows gets a lot wrong, but it gets a_ lot _right._

Oh, no, it doesn't.

Specifically, what Windows does _not_ get is that it's other developers that are using its services and APIs, not just MSSQL team that can peek at the source code and cook up a magic combination of function arguments that does _not_ return undocumented 0x8Fuck0ff. I have coded extensively for both Linux and Windows, including drivers and various kernel components, and while Windows may get things right _at the conceptual level_ , using what they end up implemented as is an inferior and painful experience.

<comment><USER6> As far as I see you had a contact with Win API but you haven't understood enough, based on your complaints. Moreover, why do you mention "MySQL" as the team with the access to kernel sources?

<comment><USER5> You see wrong. And I meant MSSQL, of course. Fixed.

<comment><USER6> Can you than please give a technical reason for you to insist on waiting on more than 64 threads in a single API call, having simply too many threads for good performance anyway when IO Completion Ports could be used instead?

<comment><USER7> He probably doesn't have 64 threads, but he may have much more than 64 files or sockets. After all, the response was to the statement that "WaitForMultipleObjects as a kind of super-select to wait on anything". It clearly isn't, with this arbitrary limitation.

The problem with Windows is that there isn't _any_ such super-select, unlike on Linux (see epoll, signalfd, timerfd...). You should take a look at my SO answer which lists _six_ different ways to use sockets in Windows: [http://stackoverflow.com/questions/11830839/when-using- iocp-...](http://stackoverflow.com/questions/11830839/when-using-iocp-should- i-set-wsaoverlappeds-hevent-to-null-or-to-a-valid-handl/11831450#11831450)

<comment><USER6> Whatever he has more, waitfor is not the optimal way on Windows for that so it's still a complaint that round holes on Win32 are poor fit for his cubes. First choosing tools then complaining that they don't fit to some goal is typical for beginners.

<comment><USER5> Do tell me, oh, enlightened one, what I should be using if I have 10K idle network connections and I can't really use IOCP, because I need keep things reasonably portable. That's not even considering that IOCP is a great example of premature optimization at cost of clarity and simplicity. It tries to solve a problem that I don't have and it doesn't offer a simpler solution that would just do. It is not a "hole" for my square peg, it's a freaking snowflake.

And expecting a modern OS to have an uncomplicated O(1) API for monitoring sockets is clearly too much to ask.

<comment><USER7> It's possible to abstract IOCP and non-blocking sockets into a single interface with reasonable efficiency. For example:

\- To send data, user calls Socket::send(const char *data, size_t length). This starts sending the given data; the buffer must remain available while data is being sent. IOCP implementation will initiate I/O using WSASend() or similar.

\- When send operation is complete, the socket implementation calls a Done() callback of the user, and from that point on, the user is allowed to call Socket::send() again. With proper implementation, send() can directly be called from the callback.

This interface is very easy to implement on Linux. But on Windows there's a complication, because it's non-trivial to just stop an IOCP I/O operation that is in progress, in case you decide you don't need the socket any more and want to red rid of it NOW. If you just forget about it, there could be a crash when you release your buffer but Windows is still using it. A simple solution is to CancelIo() the socket and do blocking GetQueuedCompletionStatus()s until you get an event inidicating the completion of the pending I/O operation - <USER2> care to queue up any unrelated results you may have gotten, for later processing. However, a more efficient solution is to use reference counting or similar with your buffers, so they only get released when Windows is done with them.

I didn't say it's easy, but it's possible.

<comment><USER5> Yes, I know the abstraction is possible. In fact, I ended up implementing a nearly complete BSD socket API emulation on top of IOCP. Just don't lose the sight of the context, which is _Windows does a_ lot _of things right_ and my point being is that it doesn't.

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER8> > Another reason for the quality gap is that that we've been having trouble > keeping talented people. Google and other large Seattle-area companies keep > poaching our best, most experienced developers, and we hire youths straight > from college to replace them.

I will say all of the ex-Microsoft folks I've encountered at Google Seattle have been fantastic.

On a related note, it's stupidly easy to get code accepted by another team at Google.

Also we're hiring.

<comment><USER9> Too bad you guys don't seem to give a second glance at someone without any formal education, despite working on systems for government, training, banking security and airline industries.

<comment><USER10> To be fair, and in context: neither does Microsoft.

<comment><USER9> I've been approached a number of times by MS... once fairly aggressively. Never a word or response from Google though.

</comment></comment></comment></comment><comment><USER4> I actually _enjoy_ working at Microsoft --- I'm in Phone, working on telemetry and various other things --- and I've met a ton of very smart people people. I've also made the cross-team (and cross-org) contributions that the OP says are nearly impossible (just today, even). While the OP makes a few good points (some teams are kinda reluctant to take patches), I think he's grossly exaggerating the problems, and the level of vitriol really isn't called for either.

He's also slightly off-base on some of the technical criticisms: there are often good reasons for doing things a certain way, and these reasons aren't always immediately apparent. Besides, change _does_ happen: Arun Kishan (who is smarter than I'll ever be) broke the dispatcher lock a while ago (see [http://channel9.msdn.com/shows/Going+Deep/Arun-Kishan- Farewe...](http://channel9.msdn.com/shows/Going+Deep/Arun-Kishan-Farewell-to- the-Windows-Kernel-Dispatcher-Lock/)) when nobody thought it could be done.

<comment><USER4> By the way: there's actually quite a lot of information available on Windows Internals. In fact, there's a whole book, Windows Internals ([http://technet.microsoft.com/en- us/sysinternals/bb963901.asp...](http://technet.microsoft.com/en- us/sysinternals/bb963901.aspx)) on exactly how the NT kernel and related system components work. The book is highly recommended reading and demystifies a lot of the odder parts of our API surface. We use it internally all the time, and reading it, you'll repeatedly say to yourself, "Ah, so _that's_ why Foo does Bar and not Qux! Yeah, that's a good reason. I didn't think of it that way."

</comment></comment><comment><USER11> _Look at recent Microsoft releases: we don't fix old features, but accrete new ones. New features help much more at review time than improvements to old ones.

(That's literally the explanation for PowerShell. Many of us wanted to improve cmd.exe, but couldn't.)_

Ahh, I was wondering about that. So, I guess I'll just keep using cygwin.

On another note, I recently asked a friend who works at Microsoft how work is going. His reply: "Well, it's calibration time, so lots of sucking up to the boss." Must be hard to get much actual work done when you're worried about that all the time.

<comment><USER12> Powershell is so damn good and is probably so because it was not improvement of cmd. Give credit where it is due.

<comment><USER13> I'm always found it difficult to read and impossible to debug.

It's useful, sure, but nice? I'm not convinced.

How about an empty recycle bin command? Why, certainly, you can do that:

        $Shell = New-Object -ComObject Shell.Application
        $RecBin = $Shell.Namespace(0xA)
        $RecBin.Items() | %{Remove-Item $_.Path -Recurse -Confirm:$false}

Teh F33243ck. Readable much? I sure hope your powershell scripts come with comments; the one's we've inherited sure didn't and they're black magic.

<comment><USER14> Over here, on Linux-land, I used to have PS-envy whenever I thought about the PowerShell. You cured me!

Though I don't use Trash/Recycle myself, to contrast, I like the simplicity of

        rm -rf ~/.local/share/Trash/info ~/.local/share/Trash/files

<comment><USER12> Commands like Remove-Item have familiar aliases like rm by default. If you see code in tools like Psake, etc. it would be very verbose, because the intention is to have readable code. But you sure can use the aliases for everyday use.

</comment></comment></comment></comment></comment><comment><USER15> It's possible he deleted his post because he realized that he included something in it that could identify him, which could be bad for his career.

It might have been better to rewrite his post into your own words, and take out some of the unnecessary detail, rather than literally repost.

<comment><USER16> I'd agree. I know the OP is trying to spread knowledge and this is a great read, but I think this was slightly rude, not to mention questionable fair use.

<comment><USER17> There's no "fair use" argument at all. Copying an entire work, then distributing it with no transformative change or criticism, is inexcusable infringement should the author want to enforce his rights.

<comment><USER18> Although in this case I think it would be hard for this author to enforce his/her rights and still remain completely anonymous?

<comment> iso8859-1 which just makes it even more wrong...

</comment></comment></comment></comment></comment><comment><USER19> "His post has been deleted! Why the censorship?"

We didn't delete it. It was deleted by whoever posted it.

<comment><USER20> No delete button on the internet v125786123. Sidebar: do deleted comments appear with showdead on, or just ones that are deleted on HN side.

<comment><USER21> >do [deleted-by-author] comments appear with showdead on[?]

No, they do not. Specifically, I have showdead on, and when trying to view the comment in question, I see only "[deleted]".

</comment></comment></comment><comment><USER22> >We fill headcount with nine-to-five-with-kids types,

then

>We occasionally get good people anyway

Uh... nine-to-five-with-kids type here. Thanks for the stereotyping... from your safe corporate nest.

Otherwise an insightful post.

<comment><USER23> If your first priority is your kids, your first priority is not your work. That's fine, it's a choice, but there is a frequent claim that the massive incremental time demand of kids makes one so much more time efficient at work that it more-than-compensates. Insofar as one is the same human being, with the same energy reservoirs and time management skills as before your child was born, this is unlikely.

I understand the reason this fiction is maintained: people with kids need the job even more than people without, and have an interest in denouncing people who claim kids make you less productive. There's also the second order effect in which "with kids" is correlated with "older".

The net of it though is that devs with kids tend to assign work a lower priority, to take fewer risks, to need more money, and to be older and hence less familiar with new technologies (and too busy to learn in their free time).

Society doesn't have a good answer for this situation yet. In times past, technology didn't move so fast that experience was mostly obsolete (and hence useless) in a decade's time. A 40 year old farmer with kids in 1713 would probably have much to teach a young whippersnapper. The same isn't true for a 40 year old programmer with kids in 2013.

<comment><USER24> _Insofar as one is the same human being, with the same energy reservoirs and time management skills as before your child was born, this is unlikely._

Your whole post drips with resentment-fueled bigotry and ignorance, making me wonder if you're fighting for attention at your workplace or whatever, feeling unloved. Here's an internet hug. Hugz.

Many years back I -- a new graduate employee -- was chatting with my boss, who was a part owner of the company/president. He had five kids, or maybe even six. He asked me when I was thinking of having children (it was still too early for me, but just as a conversational thing), and my honest answer was that I didn't know how he could afford it.

He then told me about an Arabic parable or the like that each child comes with a bag of money.

That seemed counter intuitive to me, but my life has proven it out. I now have four children, and I would wager good money that I know more current technologies, in much more depth, than you do.

If you have the capacity, having children has a _profound_ ability to make you focus: While I am the same intellectual being, like the vast majority of developers I was absolutely pissing time away before children, and I doubt I passed even 5% productivity. Slashdot was the Reddit of the time, and doing asinine, meaningless implementations for days on ends was just a normal day. And I _know_ this is the case for most developers.

Now I don't have time for the bullshit. I focus specifically on the things that yield success, in the most efficient manner possible. I'm still only maybe 15% productive (still piss away a lot of time), but the result is my own company, a lot of success, etc.

<comment><USER25> This.

Its hard to remember life before kids, but one thing I know for sure: I wasted a huge amount of time.

I work far more effectively at 39 than I did in my 20's. And my ability to focus took a massive boost after becoming a father.

<comment><USER26> But how much of that is due to nearly two decades of experience and how much is due to having kids?

</comment></comment></comment></comment></comment><comment><USER27> I think there are two complementary parts that Linux gets right here. One is as cited in the article, that you get personal glory for improvements you make to the kernel even if they are fairly small. The other part is that there is for Linux someone who will say "no" to a patch. Linus will certainly do it, and other trusted devs will do it too. Linus is perhaps even famous for telling people when they are wrong.

I've seen a number of open-source projects where you get all the personal glory for your additions but there is nobody who takes the responsibility to tell people "no". These projects, almost universally, turn into bloated messes over time. Open-sourced computer games seem to fall down this path more easily, since everyone and her little dog too has ideas about features to add to games.

<comment><USER28> > Open-sourced computer games seem to fall down this path more easily, since > everyone and her little dog too has ideas about features to add to games.

I just listened to an episode of Roguelike Radio from the mid-30s (maybe the one with Red Rogue or Thomas Biskup) and Andrew / Keith (IIRC) go on and on about how all the "major" roguelikes are just accretions of features.

This rings very true to me; I grew up playing Nethack [0], and Slash (and then Slash'Em) just got silly with all the things they were adding. Light sabers ? In my roguelike ? Come on, fhgwgads. Nethack at least has a mysterious Dev Team who ostensibly are the guardians of quality... but they _did_ bring Sokoban back from Slash'EM into vanilla.

[0] since Nethack was my first roguelike, I didn't realize until lately just how crappy it is in many ways, most notably that it's very difficult to win before you've figured out all the sources of instadeath (whether you've figured them out by spoilers (written or source-diving) or through (really frickin hard-won) experience).

<comment><USER29> Try brogue, it's a breath of fresh air.

<comment><USER28> I <3 the crap out of brogue; I'm currently playing through some roguelikes that I've never looked at before [0], and I keep coming back to brogue.

In particular, brogue's food clock is excellent in that if I forget about it too long and go back to my natural "explore everywhere, kill everything" tendency, the food clock _will_ kill me.

[0] something that jumped out at me is just how much modern roguelike development is windows-first (or even windows-only), and how much of it is distributed primarily as runnable binaries vs source. I had to bend way over backwards to get PrincessRL running: I ended up installing a 32-bit ubuntu userspace virtualbox instance so that mono could run the prepackaged binary.

</comment></comment></comment></comment><comment><USER30> The typical scenario you will find in any big corporation developing software.

I started to understand better how Microsoft works, after getting into the Fortune 500 enterprise world.

Many of the bad things geeks associate with Microsoft are actually present in any development unit of big clunky Fortune 500 companies.

</comment><comment><USER31> What's wrong with 9-5? Can't you be passionate about what you work on, excel in you career, yet stick to dedicating ~50% of your time awake to your job?

<comment><USER30> It is an American thing. In the rest of the world we can happily do 9-5 without feeling bad for it.

<comment><USER31> It's amusing watching Americans boast about working past the norm 9-5 hours and calling the rest of the world lazy. My response, "What are you proud about? After working twice as hard, you have the same quality of life as friends in Canada, and statistically speaking you'll drop dead sooner because of stress."

That always wipes the smug grin of their faces.

<comment><USER32> "That always wipes the smug grin of their faces."

While I agree with you, nothing could wipe the smug grin off these persons' faces. They are beyond reality, and I'd be much happier with America if something so simple could give the "socialists are universally lazy" rabble whenever labor rights are mentioned in any sense.

<comment><USER30> Yes, here in the socialist Germany I can enjoy my free time after 4:30 pm and if my boss wants me to stay longer I get paid overtime.

</comment></comment></comment></comment></comment><comment><USER33> _We can't touch named pipes. Let's add %INTERNAL_NOTIFICATION_SYSTEM%! And let's make it inconsistent with virtually every other named NT primitive._

Linux does this motherfucking bullshit too. "Oh, systemd is piss slow? We'll bung d-bus straight into the kernel, right along side the over 9000 other IPC mechanisms. Everybody uses d-bus these days, it's an Essential System Component. What? Systemd is a crap idea to start with? People like you should be committed."

<comment><USER10> Considering linux actually hasn't done this yet, that seems like a weak argument. Are there better examples?

</comment></comment><comment><USER34> I keep coming here, writing a bunch of stuff, then removing it.

The author isn't far off. He's over the top on some things, but on the whole it's a good take on some of the reasons Microsoft culture is toxic.

My take:

1\. The review system needs to be fixed. They have to stop losing good engineers.

2\. They have to somehow get rid of a bunch of toxic people. Many of these are in management. It's hard.

3\. They have to stop treating Windows as "the thing we put in all the other things".

Windows is a fine OS; it could be better, and the OP points out a lot of reasons why it isn't. But it's not a great fit for embedded systems, nor game consoles, nor anything where you're paying for the hardware.

But I keep coming back to the review system rewarding the wrong people, causing good people to leave. The underlying backstabbing and cutthroat culture needs to go; it's hurting the bottom line, and I'm surprised the board has been willing to let it happen.

</comment><comment><USER35> Ah, so the symlink plan is true: [https://gist.github.com/800407/3588729d57abb7731985c99c492a2...](https://gist.github.com/800407/3588729d57abb7731985c99c492a2a08459d7b2f)

</comment><comment><USER36> > These junior developers also have a tendency to make improvements to the > system by implementing brand-new features instead of improving old ones.

That's exactly the problem that's plaguing Google Chrome right now, although probably for a different reason, as many senior developers still seem to be on board. Google keeps adding new features at high pace and doesn't care what brakes in the process. The amount of unfixed (albeit mostly minor) bugs is huge.

</comment><comment><USER37> Backward compatibility is an OS performance metric. Maybe sales is too. Microsoft has to think long and hard about any kernel change. In some irony, Microsoft doesn't own the Windows code, and any individual can own the Linux kernel - i.e. Windows lacks forks.

That Microsoft discourages individual junior developers from cowboying, is a point in their favor. Optimization for its own sake is not what benefits their users - real research does.

</comment><comment><USER38> _We just can't be fucked to implement C11 support_

I thought Microsoft refusing to update their decades behind, ancient C compiler was just to piss me off and make life difficult cross-platform developers that need to work in C. Interesting to see this applies to their own employees too.

<comment><USER33> I believe the official policy is that C++ is the upgrade path from C, and C is therefore deprecated.

<comment><USER39> I think a lot of people that care about C support are already aware of Herb Sutter's stance on the matter. But knowing why he made his decision doesn't really change anything, its not like C++ never crossed their minds before. And classing it up by calling it official policy doesn't make the pill go down any easier.

Microsoft's position in the market is already big enough that they'll never really be proven wrong on C unless they relent. But they're also not large enough to kill it outright.

<comment><USER38> Yeah, Herb Sutter can GFHS. We use C for good reasons. C++ is not an upgrade, it is a completely different language.

I just remembered Microsoft wrote this scathing document: C++ for Kernel Mode Drivers: Pros and Cons [http://msdn.microsoft.com/en- us/library/windows/hardware/gg4...](http://msdn.microsoft.com/en- us/library/windows/hardware/gg487420.aspx)

I didn't find an actual pro. Makes sense that a Microsoft Kernel developer would also be frustrated by their lack of modern C support.

</comment></comment></comment></comment><comment><USER40> tl;dr : corporatism and careerism. It's the death of creativity and productivity. No large organization is immune to it. Never will be. (and yes, that includes Google... it's just much smaller and newer than Microsoft is right now)

<comment><USER41> michaelochurch has talked about this before, including the fundamental flaws behind it.

<comment><USER42> He's also a vindictive windbag who is extremely disgruntled about his shortcomings at Google.

<comment><USER43> And he's totally correct.

</comment></comment></comment></comment><comment><USER44> I've even seen this mentality in startups. It does have some business rationale, provided you are thinking short term and focused only on near-term goals.

One of the reason businesses have trouble really innovating is that it's _hard_ in a business to work on long-term things when markets are very short sighted. Only mega-corps, monopolies, and governments can usually do that... or hobbyists / lifestyle businesses who are more casual about hard business demands.

That being said, MS is surely cash-rich enough to think long term. So this doesn't apply as much here.

I've also found that of all things _optimization_ almost gets you looked down upon in most teams -- even young ones. "Premature optimization is the root of all evil," and all that, which is usually misinterpreted as "optimization is naive and a waste of time." It's seen as indicative of an amateur or someone who isn't goal-focused. If you comment "optimized X" in a commit, you're likely to get mocked or reprimanded.

In reality, "premature optimization is the root of all evil" is advice given to new programmers so they don't waste time dinking around with micro- optimizations instead of thinking about algorithms, data structures, and higher order reasoning. (Or worse, muddying their code up to make it "fast.") _Good_ optimization is actually a high-skill thing. It requires deep knowledge of internals, ability to really comprehend profiling, and precisely the kind of higher-order algorithmic reasoning you want in good developers. Most good optimizations are algorithmic improvements, not micro-optimizations. Even good micro-optimization requires deep knowledge-- like understanding how pipelines and branch prediction and caches work. To micro-optimize well you've got to understand soup-to-nuts everything that happens when your code is compiled and run.

Personally I think speed is really important. As a customer I know that slow sites, slow apps, and slow server code can be a reason for me to stop using a product. Even if the speed difference doesn't impact things much, a faster "smoother" piece of code will convey a sense of quality. Slow code that kerchunks around "feels" inferior, like I can see the awful mess it must be inside. It's sort of like how luxury car engines are expected to "purr."

An example: before I learned it and realized what an innovative paradigm shift it was, speed is what sold me on git. The first time I did a git merge on a huge project I was like "whoa, it's done already?" SVN would have been kerchunking forever. It wasn't that the speed mattered that much. It was that the speed communicated to me "this thing is the product of a very good programmer who took their craft very seriously as they wrote it." It told me to expect quality.

Another example: I tried Google Drive, but uninstalled it after a day. It used too much CPU. In this case it actually mattered -- on a laptop this shortens battery life and my battery life noticeably declined. This was a while ago, but I have not been motivated to try it again. The slowness told me "this was a quick hack, not a priority." I use DropBox because their client barely uses the CPU at all, even when I modify a lot of files. Google Drive gives me more storage, but I'm not content to sacrifice an hour of battery life for that.

(Side note: on mobile devices, CPU efficiency has a much more rigid cost function. Each cycle costs battery.)

Speed is a stealth attribute too. Customers will almost never bring it up in a survey or a focus group unless it impacts their business. So it never becomes a business priority.

Edit: relevant: <http://ubiquity.acm.org/article.cfm?id=1513451>

<comment><USER45> > In reality, "premature optimization is the root of all evil" is advice given > to new programmers so they don't waste time dinking around with micro- > optimizations instead of thinking about algorithms, data structures, and > higher order reasoning. (Or worse, muddying their code up to make it > "fast.")

It's also for _experienced_ programmers who dink around with macro- optimizations. For example, designing an entire application to be serializable-multi-threaded-contract-based when there's only a handful of calls going through the system. Or creating an abstract-database-driven-xml- based UI framework to automate the creation of tabular data when you have under a dozen tables in the application.

 _premature optimization is the root of all evil_ is a really _really_ important mindset, and I agree it doesn't mean to not optimize, and many developers seem to take it that way.

X+1 = How many transactions your business does today

Y = How many transactions your business needs to do in order to survive

Y/X = What the current application needs to scale to in order to simply _survive_. This is the number where people start receiving paychecks.

(Y/X)4 = How far the current application needs to scale in order to grow.

The goal should be to build an application that can just barely reach (Y/X)4 - this means building unit tests that test the application under a load of (Y/X)4 and optimizing for (Y/X)4

Spending time trying to reach (Y/X)20 or (Y/X)100 is what I'd call premature optimization.

Disclaimer: (Y/X)4 is no real point of data that I know of, just something I pulled out as an example, anyone who knows of actual metrics used please feel free to correct.

<comment><USER37> The canonical version is Alan J. Perlis Epigram 21:

       'Optimization hinders evolution.'

If you have a black box, then optimize the fuck out of it. The Windows kernel is not a black box.

<comment><USER44> I think you missed half the argument. Windows is _noticeably_ slower than Linux or Mac on the same hardware. Isn't that a problem?

And if optimization always hinders evolution, boy should Windows be evolving... I mean... the NT kernel should have smashed through all kinds of antiquated paradigms by now. It should be doing memory deduplication, disk deduplication, fast JIT compilation of binaries for alternative architectures. It should support live process migration between machines, joining of systems together efficiency to form larger super-systems, a better permission model obviating the need to rely completely on virtualization for true privilege isolation in enterprise environments. It should have truly efficient network filesystems supporting disconnected operation, sharding, etc.

Oh wait... it's stuck in the 90s... never mind. _And_ it's slow.

Linux, which optimizes a lot, has at least some of the things I mentioned above.

"Premature optimization is the root of all evil" is a deeply nuanced statement that is nearly always misunderstood. "Optimization hinders evolution" is probably likewise. They're quotes cherry-picked out of context from the minds of great craftsmen who deeply understand their craft, and alone I do not believe they carry the full context required to comprehend what they really mean. I think they have more to do with maintaining clarity and focusing on higher-order reasoning than they do with whether or not to try to make things run faster. (And like I said, the most effective optimizations are usually higher-order conceptual algorithmic improvements.)

<comment><USER46> > Windows is noticeably slower than Linux or Mac on the same hardware. Isn't > that a problem?

Windows isn't slower at running Windows apps, fitting into a Windows infrastructure (Active Directory, management tools, Exchange etc), using Windows device drivers, working with NTFS volumes and their features, backwards compatibility, printers etc.

It all comes down to what the goals of the users (or purchasers) are, and I doubt anyone buys Windows because of "performance" in the sense being talked about. But they do care about the "performance" of items mentioned in my previous paragraph.

Linux has been able to optimise because of being open source and vehemently ignoring closed source. Open source means for example that the Linux USB stack could be optimised and all affected code due to API changes could be updated. This and other topics are covered really well in Greg Kroah-Hartman's OLS 2006 keynote - <http://www.kroah.com/log/linux/ols_2006_keynote.html> \- see "Linux USB Code" about halfway down for that specific example.

</comment></comment></comment></comment></comment><comment><USER47> Disclosure: I'm a new guy at Microsoft, not related to Kernel or Windows stuff.

So where does he back up the claim that NT kernel performance is, in fact, "behind other OS"?

</comment><comment><USER48> Slightly off topic, but is there anyway we can actually confirm that "the SHA-1 hash of revision #102 of [redacted] is [redacted]."

EDIT: redacted information. Still, when that information we present, how would anyone be able to confirm it?

<comment><USER47> From what I've heard (unofficially) the source is typically watermarked to identify the sources of any leaks. He may have given himself away with the SHA-1.

<comment><USER48> I doubt it. Not only would that involve generating a different watermark for each person with access to the code, but in doing so you also raise complications for source control. Additionally, it is almost impossible for developers not to notice if supposedly identical files are not identical, not to mention the fact that implementing the type of system without the conscious corporation of the developers seems impossible.

</comment></comment></comment><comment><USER49> Given the topic of the article I understand my question could be seen as OT but I'd like to dig more into the following:

> _The NT kernel is still much better than Linux in some ways --- you guys be > trippin' with your overcommit-by-default MM nonsense_

What's wrong with the overcommit-by-default behaviour? Or how/why the NT kernel is supposed to do better?

<comment><USER50> I don't know what the author was thinking of specifically, but the OOM killer seems like a bit of a hack to me. I can think of situations where I'd rather have an allocation fail upfront predictably than be randomly killed by the system.

A lot of people seem to think you're screwed when you're out of memory and so think killing the process is acceptable, but I've worked on code bases where it's actually handled somewhat gracefully. (Although, on NT, if you run out of nonpaged pool you start to get weird, random I/O failures.)

<comment><USER49> but again, if it is just about the default behaviour which we debate, one can simply disable the overcommit

vm.overcommit_memory = 2

see [https://www.kernel.org/doc/Documentation/vm/overcommit- accou...](https://www.kernel.org/doc/Documentation/vm/overcommit-accounting)

<comment><USER50> And that was exactly the criticism, wasn't it? "Overcommit-by-default nonsense". I didn't write the original, just trying to parse it. (And with that aspect I kind of agree, it's a goofy behavior.)

I guess there's another, somewhat social aspect of making that the default: everyone else coding on the platform assumes the behavior is the other way, so I suspect when you set that flag to off, your other software starts crashing on null pointer dereferences because no one thinks malloc can fail.

</comment></comment></comment></comment><comment><USER51> UTF-16 everywhere doesn't help either. M\0o\0r\0e\0 \0d\0a\0t\0a.\0

<comment><USER4> You do realize that NT is from 1989 and that UTF-8 is from 1992, right?

<comment><USER51> Yeah. Which makes it even more irritating.. MS is still off in the double-wide stix 11 years later and still promoting UTF-16LE in userland. From [http://msdn.microsoft.com/en- us/library/dd374081%28VS.85%29....](http://msdn.microsoft.com/en- us/library/dd374081%28VS.85%29.aspx)

"Unicode-enabled functions are described in Conventions for Function Prototypes. These functions use UTF-16 (wide character) encoding, which is the most common encoding of Unicode and the one used for native Unicode encoding on Windows operating systems. Each code value is 16 bits wide .. New Windows applications should use UTF-16 as their internal data representation."

<comment><USER52> I seriously doubt that UTF-16 still is the most common encoding. The web is mostly UTF-8 and so are most smartphones.

<comment><USER53> JavaScript strings are UCS-2 or UTF-16.

</comment></comment></comment></comment></comment><comment><USER54> There is a great quote in the post: "Incremental improvements just annoy people and are, at best, neutral for your career."

Working for several different Fortune 500 companies this has been my experience many times. I have worked on products where I made a large number of incremental improvements that never got incorporated into the released product. Taken on their own the improvements don't change things much, but in the aggregate they make a significantly better product. Why didn't most of my incremental improvements get incorporated into the product? Every change, no matter how minor, is perceived by management to be a highly risky proposition. Product managers won't get promoted because the product is 4% better, but they could potentially get fired if that same incremental improvement had an unforeseen negative consequence.

Once the short term sales mindset gets power, hit products are viewed as cows to be milked and not as things that need continued maintenance and improvement. As an engineer in such an enterprise you watch helplessly as your competitors slowly but steadily pass you, and then someday upper management wonders why the magic money machine broke down. Some large enterprises avoid this fate but they seem to be the exception.

</comment><comment><USER55> The problems with the NT kernel are nothing new. When I suggested for Windows to use a BSD kernel to overcome its current limitations, I got lots of disagreement. Microsoft developers seem to be happy with the current state and have no vision of a totally new architecture.

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

<comment><USER56> People are praising BSD like it was all hot and new. OS X is built on a BSD which has it's roots in 60's and 70's OS design, just like the VMS roots of WinNT.

OS X didn't change the world by bringing some great new underlying architecture to the table. In fact, their kernel and filesystem are arguably getting long in the tooth. The value that OS X brought to the table was the fantastic Carbon and Cocoa development platforms. And they have continued to execute and iterate on these platforms, providing the "Core" series of APIs (CoreGraphics, CoreAnimation, CoreAudio, etc.) to make certain HW services more accessible.

There's very little cool stuff to be gained in the windows world by developing a new kernel from scratch. A quantum leap would not solve MS's problem. The problem is the platform. What's really dead and bloated is the Win32 subsystem. The kernel doesn't need major tweaking. In fact, the NT kernel was designed from the beginning such that it could easily run the old busted Win32 subsystem alongside a new subsystem without needing to resort to expensive virtualization.

Unfortunately, the way Microsoft is built today it have a fatal organizational flaw that prevents creating the next great Windows platform. The platform/dev tools team and the OS team are in completely different business groups within the company. The platform team develops the wonderful .NET platform for small/medium applications and server apps while the OS team keeps crudging along with Win32. Managed languages have their place, but they have yet to gain traction for any top shelf large-scale windows client application vendors (Adobe, even Microsoft Office itself, etc.) Major client application development still relies on unmanaged APIs, and IMHO the Windows unmanaged APIs are arguably the worst (viable) development platform available today.

What Windows needs is a new subsystem/development platform to break with Win32, providing simplified, extensible _unmanaged_ application development, with modern easy-to-use abstractions for hardware services such as graphics, data, audio and networking. This is starting to come to fruition with WinRT, but the inertia in large scale apps is unbelievable.

</comment></comment><comment><USER57> As an outsider, it looks like MSFT does not grasp kernel performance as a super important feature of Windows. They add so much bells & whistles over the UI, but the inside sucks release after release

<comment><USER58> As someone else posted in this same thread: _is_ modern Windows substantially slower than the OSes it competes with (in anything other than a few uncommon niches)? If it's more than a few percentage points slower for anything but rare scenarios, I'd be surprised.

</comment></comment><comment><USER59> The description sounds accurate compared to what I heard when I was in contact with Microsoft insiders. That was about 15 years ago. What's surprising to me is that it is still this way.

A lot of the justification for being exceedingly conservative about performance improvements was based on the difficulty of doing testing that is sufficient to leave no doubt that changes don't cause regressions nor any side effects bearing on compatibility.

I'm surprised that hasn't changed, or that the value equation about possibly breaking customer software hasn't changed. By now this approach must be a very entrenched culture.

</comment><comment><USER60> I think the main performance problem with NT is its scheduler. Compared to unix-type schedulers, it doesn't give very good interactive performance when there are cpu-bound processes. There have been a lot of hacks over the years (like throwing cpu-starved processes a bone when they haven't had any action in 4 seconds), but unix/linux just has a better designed scheduler that gives better performance in most situations.

</comment><comment><USER61> I suspect another aspect is for linux developers to be less worried about keeping the API/ABI stable.

<comment><USER48> The Linux kernel developers take backwards compatibility very seriously. Here is a tame excerpt from Linux on the subject: "Seriously. Binary compatibility is _so_ important that I do not want to have anything to do with kernel developers who don't understand that importance. If you continue to pooh-pooh the issue, you only show yourself to be unreliable. Don't do it." [1]

[1]<https://lkml.org/lkml/2012/3/8/495>

<comment><USER62> Why is it that I can run my Radeon x1900 under Windows 7/8 with Windows Vista drivers? Runs StarCraft2 and a bunch of newer FPS games just fine.

Linux on the other hand is a disaster. The kernel devs are so determined to break binary compatibility, I haven't been able to run with ATI's proprietary binary drivers for years. While AMD was a good open source citizen and released the specs, the open source drivers for my card are useless for anything other than 2D.

<comment><USER63> Linus is talking about userspace binary compatibility. Your graphics drivers are relying on kernel module binary compatibility, which is not guaranteed.

<comment><USER62> Yes, but without working drivers for my system, what good is user space binary compatibility? MS has maintained compatibly for their drivers, something kernel developers seem to careless about. Which was exactly the point of the original poster.

</comment></comment></comment></comment></comment><comment><USER64> "The rot has already set in"

Great words for concluding a video game intro

</comment><comment><USER65> At some point Microsoft might want to consider expanding its kernel team into Silicon Valley.

</comment><comment><USER66> I support conservative engineering for file systems.

NTFS is highly reliable and Microsoft wants to build on that success with ReFS. In years of working with NTFS I've never had a serious filesystem wreck (although I did have one that was never quite the same after I made a few hundred million small files)

The NTFS story isn't that different from the ext(2|3|4) story on Linux. ext-N filesystems are boring and not particularly fast, but they're reliable. I've tried other filesystems on Linux but have often had wrecks or noticed data corruption.

I like boring filesystems.

</comment><comment><USER67> I'm a recent college graduate starting on a Windows Core team in the next few months.

Whee. Talk about a downer to start my day.

<comment><USER68> Look at it this way: you're lined up to work in a company with far more capability and potential than almost every other western organisation. When you're compared to the likes of Google and Apple as examples of where you might be lacking, you're doing good.

Besides, even if everything is as bad as they say and you absolutely cannot work in that environment, interning is the perfect time to discover that without as significant commitments. It will also prove to be a valuable lesson that you can then take to other companies.

Chin up, I'd love to work even at Microsoft.

</comment></comment><comment><USER69> "our good people keep retiring or moving to other large technology companies, and there are few new people achieving the level of technical virtuosity needed to replace the people who leave."

in the post PC era Kernels are not as hot as they were in 2000

</comment><comment><USER70> Isn't Windows NT used only in large corporations that are afraid to upgrade their servers?

<comment><USER71> The Windows NT _Kernel_ is used in Windows NT, 2000, XP, Vista, 7, 8, etc. (Versus the DOS kernel used in DOS, 95, 98, and Me)

<comment><USER41> Yea, that is another pet peeve of mine. Windows 2000 is technically NT 5.0 (and was called that during the beta). XP is NT 5.1 etc...

</comment></comment></comment><comment><USER24> Is performance behind other OS'? Serious question, because empirically I'm not aware of any particular performance lag.

</comment><comment><USER72> Windows is dying just like DOS.

Azure is the new Windows.

<comment><USER32> I don't know what this is even supposed to mean.

</comment></comment><comment><USER73> Sad post IMO, which will unfortunately and unduly tarnish Microsoft's reputation. I would suppose it was written by a developer who has just become senior enough to see some of what's going on, but has not yet realized it's everywhere like that. One day, he'll understand that those challenges too need to be managed.

Growing pains, all around.</comment>


Feynman called woman "worse than a whore" for not exchanging sex for sandwiches - <AUTHOR> https://restructure.wordpress.com/2009/08/07/sexist-feynman-called-a-woman-worse-than-a-whore/

<comment><USER2> People can be nasty.

Even famous and/or otherwise kind and gracious people.

News at 11.

</comment><comment><USER3> Wow, I hadn't read the book and never knew that about Feynman. Very disappointing.</comment>


80% of drugs from pharma, 48 pharma plants in Wuhan, US will start running out - <AUTHOR> https://www.cnbc.com/video/2020/02/21/watch-cnbcs-full-interview-with-national-economic-council-director-larry-kudlow.html <comment><AUTHOR> The relevant question at 3:10</comment>


Maintaining flow - <AUTHOR> https://github.com/kstevens715/maintaining-flow

<comment><USER2> The one thing I would dis-agree with is postponing looking up things like vim commands. I cannot count how many times a 30 second Google search saved me half an hour of work.

</comment><comment><USER3> This is very similar to the Pomodoro system. <http://www.pomodorotechnique.com/></comment>


NoFlo Kickstarter, the hacker's perspective - <AUTHOR> http://bergie.iki.fi/blog/noflo-kickstarter-launch/ <comment><USER2> Watching the Kickstarter video, it felt very forced. I get that you are trying to revolutionize programming, but try not to keep telling me that and instead show me. I feel that if you had a screen cast of working on a simple demo application (longer than 10-15 seconds), it would've conveyed the message of how powerful NoFlo really is, much better.

I'm not trying to take away from all the work you've done (it looks like a lot and keep at it). It's just a suggestion on how to really show me the ground breaking-ness of NoFlo.

<comment><USER3> Good suggestion. This will be coming in the project updates.

</comment></comment><comment><USER4> From the kickstarter page:

          > If you're a programmer, deep down, you know code is bad, it rots,
          > and with each new line your software accrues complexity debt.
          > New code means more bugs, more refactoring and more time needed
          > to bring someone else up to speed.

Yeah, and moving little interconnected boxes around a project workspace will solve that? It's not like visual programming is something revolutionary new and different - it's just another representation of the same old thing. So the chances that it will solve the current problems with large code bases are the same as a green car being faster than a yellow car only because of the color.

<comment><USER5> Good point, but poor analogy. Everyone knows that red cars go faster ([http://tvtropes.org/pmwiki/pmwiki.php/Main/RedOnesGoFaster](http://tvtropes.org/pmwiki/pmwiki.php/Main/RedOnesGoFaster)).

I think more to the point I can't see anything about visual programming that will make refactoring easier or less necessary.

<comment><USER6> _I think more to the point I can 't see anything about visual programming that will make refactoring easier or less necessary._

I don't fully agree. Well, I do agree that it is just as necessary and good software engineering principles are necessary to prevent the code from (quite literally) becoming spaghetti code, but from the work I've done in Max/MSP, I feel that as long as you follow software engineering principles (most Max/MSP people don't because most are eg musicians and such who have no software engineering training) I found it to be a very pleasant experience with many advantages over traditional textual languages. Granted, some things really are best represented textually (certainly complex expressions or formulas) but a lot of code is just routing data around and I found that the visual languages I've used (mainly Max and Synthmaker) really shine at that. in fact, I find that moving data around is the single most important programming task in _most_ programs.

Other areas where visual programming really shines is in experimental programming and I think a big part of that is that 1) you can easily "wire" things up differently and change things just to see what happens and 2) you don't have to name things until you're good and ready. You still should properly name things, of course, but during prototyping and experimentation I find this often gets in my way when using textual languages and I end up giving things temporary names like foo or x. Another area where (some) visual languages shine is debugging because they often let you visually see the flow of data through the code and intercept it and such. I found Max/MSP's debugger to be very nice to use, though I also feel there is a lot of room for it to improve even more still and unit testing tools are needed too.

As for refactoring - you know how some IDE's have a feature where you can select a bunch of code and hit refactor and it puts it into its own function for you? Max does this really well too: click-drag to select all the components you want to factor out and it places it all into a new component for you. Really quick and easy. This isn't a visual vs textual thing but rather a tooling thing, of course.

</comment></comment></comment><comment><USER7> I'm not quite sure what problem is this solving. What exactly does dataflow programming allow me to do that is not possible with non-data flow programming? It appears that the single components are still text, and data flow is only used to hook up these components. So how is this different than say an IDE with definition and reference lookup?

I've used Pure Data (which they mention) a little bit and here is an example of a somewhat advanced program. [http://i.imgur.com/NRtG8Ai.jpg](http://i.imgur.com/NRtG8Ai.jpg) [1]. For Pure Data, dataflow somewhat makes sense (considering the problem domain) but if I had to pick between debugging the schema above and debugging text code, I think that I'd choose the latter.

[1] Image is from here [http://www.spazioclang.org/eventi/live-electronics- con-pure-...](http://www.spazioclang.org/eventi/live-electronics-con-pure- data-e-maxmsp/)

EDIT: Lol, here's an example of another PD program I found. [http://i.imgur.com/Flwviol.jpg](http://i.imgur.com/Flwviol.jpg) Now imagine that you inherit a legacy codebase that looks like that.

<comment><USER8> Flow chart can be beautiful or ugly just as a textual code can be beautiful or ugly. Also shape of nodes and connectors as important as indentation in text. Look for example of some graph from Nuke - [http://www.spaille.be/dev/wp- content/uploads/2010/10/works_n...](http://www.spaille.be/dev/wp- content/uploads/2010/10/works_nukeNG.png)

</comment></comment><comment><USER9> Code at Compile time is a different entity than the Code at Runtime. Programmers learns to visualize expanding and collapsing data structures and the web of pointers and call-backs. One simple tiny recursive function can become a massively complex tree at runtime. These two complexities are similar yet very different. Any system that doesn't respect the runtime will fail to understand the mindset of a programmer. I hope they succeed in dealing with both.

<comment><USER10> Exactly this is the problem with grafting visual programming interfaces onto textual programming semantics. One of the main important reasons to do VP is to be able to inspect the code, to easier see what it does, ideally at a glance. Yet as you point out, simple recursion can make this really difficult to do. My thesis is that we need VPLs that have semantics specifically tailored for the visual interface. It's possible, but takes a bit of thinking to work out

</comment></comment><comment><USER11> Looks like an interesting way to enforce the pattern of testable, reusable components for developers that tend to end up with spaghetti code. However, I think it's a little dubious to say that designers without coding experience will suddenly become empowered to contribute to the code base (or write their own applications) in any meaningful way.

Looking at one of the sample pictures on the Kick Starter page I see AnchorY out connected to SpringY anchor and Touch start connected to DragX open. I literally have no idea what this is doing. I probably would have connected Touch start to DragX in, though apparently that would be wrong. So as a non- coder I need to understand what every component does (which probably is not explained in layman's terms), what inputs are, what outputs are, what the specific component inputs and outputs are, and what those actually do (again in layman's terms please!).

More importantly, I need to be able to think like a coder and know how to break large problems down into small components and be able to figure out how to then wire those together to get the desired outcome. And as soon as I hit a bug or it doesn't do what I want, I'm guessing I'm just out of luck because everything is a black box to me.

I remember some usability studies that we did at Microsoft that was testing a simplified flow control UI to do basic programming. We brought in people that claimed to have at least scripting experience if not coding experience. We should them a constrained UI that had some operations (ping a server, start a server, stop a server) and basic flow control (if, for, etc). We asked them to reboot a server as a warm up question - since no 'reboot' operation was provided they just need to combine a stop server with a start server. We lost 75% of the participants at that step. It was pretty eye opening to see first hand that not everyone can think like a developer, it has nothing to do with providing a nicer UI or pretty visuals. Problem decomposition and recomposition are learned skills.

I really like the approach and think it can be very effective at improving the overall experience for developers. But to say this is somehow suddenly going to allow somebody with no coding or developer experience to "skip the tens of thousands of hours becoming fluent in syntax and start visually hacking on your application now" just reeks of marketing bs.

<comment><USER12> What would have happened if the question had been rephrased to "Ok, you have stop car, start car and check car. What do you do to restart a car"? Perhaps they would have done a lot better because they have a better understanding of the car domain.

The purpose of a visual language is not to replace domain experience. If you put me in front of a drawing program with a pallet of red, blue and green and ask me to create the color cyan... Then we're gonna have a bad time.

Visual programming does not claim that critical thinking is not required: aka programming in this context.

We've chatted with people who've said "I can not get the coding thing. That has always been hard for me. Designing and taking bigger concepts and parts and putting them together: assembly. I get that." These people can solve problems, they understand critical thinking. They have expertise in their domain.

What they don't get is a mapping process of automating a real world system (what programming is) in a computing device by coding out the solution.

Don't even get me started on education where students are expected to learn how to think critically (do that mapping thing) and fight with, to them, totally nonsensical compiler errors as they try to learn coding and syntax.

In my opinion, a lot of brilliant future programmers are lost because they don't enjoy fighting the compiler/interpreter.

<comment><USER11> The participants in the study were IT professionals that managed servers for a living. Servers and actions regarding servers were definitely within their domain experience. So we did exactly what you were suggesting we did.

I still think that connecting up a hundred little boxes is just as complicated as actually looking at code syntax, but even more so since everything is a black box. How do you suggest people fix errors in the output when the only action they can take is to connect boxes with lines?

<comment><USER3> I'm imagining a debug view that slows down the flow and shows data traveling through the graph, so you can see it at every step.

Or with the circuit board metaphor, a debug "probe" that would show the data (or a graph of data) traveling through that point.

Different debugging tools will make sense in different domains, but we're considering the challenge.

</comment></comment></comment></comment><comment><USER13> As much as I want to love this thing, I can't help but feel like they are trying to solve an unsolvable problem.

We don't consider Michaelangelo a genius because he thought up the David statue. We consider him a genius because he went through the process to make the statue exist.

Great software exists not because someone thought it up. Great software exists because someone went through the process of making that software a reality. There is no shortcut, in the same way that there is no shortcut between thinking up a really nicely painted portrait, and making that portrait a reality. The only way to make a painting a reality is to learn how to paint. The only way to make a program a reality is to learn how to code. Any tool that claims to make coding easier is nullified by the fact that you have to still have to learn that tool too!

<comment><USER3> More than making coding easier, I think we're trying to give strict structure to code and pair it with a visual metaphor to help manage complexity. There is a learning curve, but we're designing it to stick close to JavaScript.

If we succeed, I imagine that we'll just increase the complexity of the coding that we take on. That's an interesting possibility. I'd like to imagine a new generation of startups with more interesting tech than CRUD.

<comment><USER14> The strict structure kinda bugs me. I expect situations where a clean solution using higher order functions outside this framework is possible, but if I implement it, I no longer have this clear picture of the system. Or I submit to it, perhaps duplicating code and spreading gnarly business rules on top of what should be "pure" data flow logic.

EDIT: Still, I'm all for experimentation. If they can pull this off, great!

</comment></comment></comment><comment><USER15> This

      > NoFlo graphs instead are only the coordination layer
      that manages the control flow of your software.

reminds me a lot the whole SOA/BPEL/BPMN mess that was hot few years ago in enterpriseland. The surge in visual programming just resulted in developing the same logic with less powerful tools in languages that were not designed for programming (XML and in this case JSON).

These kind of tools focus on the wrong side of the problem. It is not about how to connect the nicely designed services, but how to actually get services to be nicely designed. Once you have service that can be easily connected in the visual tool, it can be trivially used from the conventional programming language as well.

Reasons why services can not be just trivially composed include:

      - every service that is comprehensively mapping real problem is inherently complex
      (even for seemingly simple things like address geocoding)
      - any two services will have slightly different APIs
      (consider various signatures of substring method in various languages)
       and oftentimes the backend system details
      - limitations are leaking over the service API
      (datatypes, formats, paging, ...).

For these reason there exists the large branch of programming that deals with integrating services (sometimes called Enterprise System Integration) that basically wraps, formats and preprocesses data before shoving them to the target service.

For restricted domains - it could probably work. But for general service integration within larger company, the best approach so far has been a lightweight approach with mixture of Spring Integration and plain old Java.

</comment><comment><USER16> This reminds me of Quartz Composer[1] in a lot of ways: you wire the inputs and outputs of a bunch of different nodes together (called patches in QC) and each patch gets you a step closer to the solution. This seems to work especially well for graphics programming type problems where there are many different variables to tweak and you're applying many transformations to the image at each stage.

The problem is each component in the process still needs to be written in code. In QC I would often be frustrated when a patch didn't quite do what I needed and I had to keep trying to make my idea fit the limitations of the available patches.

So while this might help non-programmers understand on a big picture level what's happening, to go beyond that they're still going to have to learn how the individual components work which comes back to learning to code textually.

[1] [http://en.wikipedia.org/wiki/Quartz_composer](http://en.wikipedia.org/wiki/Quartz_composer)

<comment><USER3> Diving in and editing the component-level JavaScript is a big part of the design. There will be much less friction than opening XCode.

</comment></comment><comment><USER17> Interesting.

Gridspy ( [http://gridspy.com](http://gridspy.com) ) is built on a lot of discrete components. We've got a variety of servers all talking via several APIs and pretty complex data flows in twisted and also in javascript in the browser.

I'd love a tool that simplified this - even if it just helped ease the pain of API integration or the flow of data.

I need to be led to more concrete information around what happens on deploy. Do you compile applications from the flow diagram?

I want to see a nice migration to and from the noflo platform. The last thing I want to see is lockin either way.

For me I need Python and Javascript support. We're built in Python.

Very nice video, very artistic. You certainly had fun pulling focus and playing with exposure.

<comment><USER18> The network is assembled at run time by instantiating the various components and connecting their ports. There is no compilation step.

As for Python, we'd love to support the language! It is one of our stretch goals. In case we don't hit it, the Python community can of course do it themselves :-)

</comment></comment><comment><USER19> We at Interface Vision ( [http://www.interfacevision.com](http://www.interfacevision.com) ) are working on a Visual Programming Interface as well and we wanted to say congratulations on a successful first day on Kickstarter. It is great to see someone else share the space. Great job guys and again congratulations!! If you ever want to chat please don't hesitate to reach out - great job guys and good luck to us all!!

</comment><comment><USER20> Flow-based programming and the actor model have some overlap. There's an interesting discussion of this on the c2 wiki:

[http://c2.com/cgi/wiki?ActorsAndFlowBasedProgrammingDiscussi...](http://c2.com/cgi/wiki?ActorsAndFlowBasedProgrammingDiscussion)

One big difference between actors and FBP is that actors can give feedback whereas flow-based programs can only send data from one port to another (so, providing feedback to the process feeding it information requires the creation of an input port on the feeder and a feedback output port on the processor...)

As with anything else, FBP isn't a hammer that turns everything else into a nail, but it's an interesting architectural pattern. I'll be curious to see their noflo-based Jekyll replacement.

</comment><comment><USER21> I think of this as the "Rick Allen Solution." Rick Allen is the drummer for Def Leppard, who lost his arm in a car accident. He says that overcoming his disability has turned him into a better drummer.

Fundamentally, forcing yourself to do visual programming like this, is like tying one arm behind your back. It's so impossibly difficult, that you'll demand that the tools you use are the best quality, and intelligently solve as many of the problems at your layer as possible.

The truth is, if developers insisted on good tools with good abstractions, they'd achieve all of the supposed benefits of visual programming.

Most developers forget they're responsible for making their own living space well-organized. They just code, leaving a mess everywhere.

</comment><comment><USER22> From a teacher's perspective this looks excellent. I start teaching my students programming using Scratch. Continuing on to a more advanced visual programming interface would be great. It reminds me a little of the visual scripting interface inside Cinema4dD- Xpresso.

</comment><comment><USER23> Lets solve spaghetti code with more spaghetti code hidden behind some nice UI. How about actually thinking about problems and finding fundamental flaws in workflow? I know it's harder, I know you can't then film fancy promo video in some expensive hotel. But it actually might work.

I'm not saying that ideas of visual programming are bad. What I'm saying it that hiding complexity behind some more complexity and saying that we invented simplicity is bad. NoFlo doesn't look like something new but more like just wrapper around existing methodologies. Nothing new, just hiding details from programmer. OOP way of thinking.

</comment><comment><USER24> I concluded that they are trying to open source what [https://www.mashape.com](https://www.mashape.com) does behind the scenes, visually. Connecting the different parts of the SOAd web, in the sense of docker and containers. It's true- why can't newly released services just work like legos? Say you want to support a new payment system, or a new analytics, it's just drag and drop with this, hopefully; right?

</comment><comment><USER25> Throwing this out there, I have shelved a similar web-based project that did this with Verilog designs, which lends itself more naturally to this struture imo. I stopped because I don't believe there's a big enough market for it. That, and I wasn't sure how to tackle the problem of thousands of I/Os in a visual format (would make things real hard to see).

<comment><USER3> One method for dealing with this is what Pure Data does. You have a message component that can set a specific property of the next component.

        [innerHTML "hello"] -> [div]

</comment></comment><comment><USER26> I think this is a great idea, but experience is everything, as others have stated, the diagrams presented still have quite the learning curve, knowing what names connect where. I think if NoFlo allowed actual coding through a visual interface like Scratch, with the ability to group components into functions and classes, this could really go somewhere.

<comment><USER3> At the Scratch level I'd rather just write code. NoFlo's design will allow you to open and edit any component in a live graph.

</comment></comment><comment><USER27> Well, I liked the music (in the video).

</comment><comment><USER28> Interesting. This would seem a natural fit for stream / event based processing. Digesting server-logs, social signals, etc. Something like Twitter Storm but with components on a more fine-grained level. Wonder how concepts like iterative map/reduce map to this.

</comment><comment><USER29> I would like to know if NoFlo is being bootstrapped, i.e. are NoFlo developers actively using NoFlo to further develop NoFlo?

Some video of this type of development process would be an amazing proof-of- value.

<comment><USER3> The UI is currently written in JS with Backbone. Once it reaches a usable- enough state rewriting it in NoFlo is high on my list.

</comment></comment><comment><USER30> noflo looks like a novel yet familiar way of designing software, which really glues well with TDD.

I don't sense a very strong emphasis on runtime profiling from the video or the description, but if this were a core feature then it would certainly add value to the product.</comment>


I'm Hosting Remote Work Summit-26 Speakers from MS,WordPress,Buffer,GitHub(Phew) - <AUTHOR> Quick Overview: It's a virtual summit. Free to attend. Spread over 5 days from March 5-9th. With 27 speakers from - Buffer, Evernote, Microsoft, Trello, Github, Appirio, Zapier, Toptal, Automattic (WordPress), Helpscout, Treehouse, WomenWhoCode, Mailbird, Flexjobs and others!
https://www.theremoteworksummit.com
Why remote work? I'm a big supporter of flexible work, remote policies, sharing economy, diversity & gender balance at work. Imagine if all of us could work from anywhere, anytime, however, we want to, without any barriers.
Remote work was supposed to be the ONE TRUE BENEFIT OF INTERNET. We got Snapchat instead.
Remote organizations are able to hire people for their skill & value instead of who's based where and how they or their resumes look. I'm not saying that every job & company can go remote today. But those who can, should. I think of remote work as a big equalizer that will finally break down the last few geographic walls we face.
To make sure there is real value in this online conference, we got together a phenomenal panel of speakers. See & judge for yourself.
Speakers: * Director of Partnerships, WordPress * Director of People, Buffer * General Manager, Evernote * Program Manager, Microsoft (Scott Hanselman, the ASP.Net guy if you know?) * Marketing Head, Trello * COO, Treehouse * CEO, Liquidspace * CEO, Mailbird * CEO, FreeUp * CEO, WomenWhoCode * CEO, Tortuga * CEO, NinjaOutreach * CEO, Outpost * CEO, Rype * Customer Support, Kayako * Digital Entrepreneur/Nomad * Freelance Marketer (Digital Nomad) * Freelance Designer (Digital Nomad) * Director, Nomad Capitalist * Director, InMarketingWeTrustDirector of Marketing, Github * Director of Engineering, Toptal * Head of People, Helpscout * Talent Head, Appirio * CFO, Zapier * Director of People, Flexjobs
Background Story: Me & my team of 3 spent the last 3 months putting the whole event together and getting the right set of questions for each of the speakers.
There's tons of value for entrepreneurs, freelancers, people managers & those already working remotely.
Remember, it's free to attend with an optional upgrade for those who want lifetime, on-demand access (I still have to eat & pay bills)!
Try and attend at least a few sessions and give me your feedback. I'm here all day so ask me anything. Ignore typos, I'm running on coffee for the last 36 hours. Cheers! <comment><AUTHOR> Here's the link - [https://www.theremoteworksummit.com](https://www.theremoteworksummit.com)</comment>


The Expanding Birthrate Of Web Startups - <AUTHOR> http://www.avc.com/a_vc/2010/08/the-expanding-birthrate-of-web-startups.html

<comment><USER2> As a survivor of the first big .com crash, the current froth around startups seems uncomfortably familiar in some ways. There _are_ a lot of companies making sustainable, growable revenue a priority. There also seems to be a lot of companies that are just throwing any idea they can think of against the social networking wall to see if it sticks.

I expect there to be some significant winnowing out, although perhaps not as destructively as 1999.

<comment><USER3> Well if you are 2 people who runs a startup for $1000-5000 per month what's going to happen? In 1999 1 chair of a startup was $1500

<comment><USER2> Those are the sustainable startups I mentioned. I have higher hopes for those, even if the stakes they're playing for are smaller. I still see plenty of companies raising a lot of VC and tracking drop-dead burn rates of 1-2 years.

</comment></comment></comment><comment><USER3> I think VCs need to understand that not all startups want to be a billionaire hence they don't need baby sitters and they can take care of themselves.

<comment><USER4> Agreed. I can't help but think that the article has an arrogant undertone to it. There are plenty of startups who do just fine without VC 'support'.

<comment><USER5> i can see how you can take the post in that way.

but i didn't mean it that way.

i'm just concerned that there isn't as much capital around to fund all of these companies in the follow on rounds

<comment><USER3> What round? In a small startup you don't have rounds. You are ramen profitable in your first year which is generally not more than $5K-$30K per month (depending on the size) and then you stay alive, you don't get huge or big or massive and generally you don't care. $5-10K per month is good salary for a (co-)founder.

These small startups funded by their customers after 3 months to 1 year, after a year if they are not ramen profitable then it's generally end of the game. In the long term it gets bigger and in which case you are already big which means either someone is going to acquire you or you can fund yourself and keep getting bigger and bigger.

I understand that some startups need load of money and stuff but many don't.

<comment><USER6> Not everyone can be ramen profitable in their first year. I think his point is that people assume it's easy to get to profitability and end up out of cash when they don't get there right away.

</comment></comment></comment></comment></comment><comment><USER7> It's much more easier to start a web company today than 10 years ago. Cheap cloud services. Endless web frameworks. Client side libraries. Server side libraries. Matured architectures. Many best practices.

What's improved in VC world in the last 10 years? Better laws? Better standardized practices?

<comment><USER8> I suspect "better deal flow", since they're essentially colleges in a world where high schools have just arrived to supplement the traditional "single master and apprentice" mode of instruction.

</comment></comment><comment><USER9> Every time I read "If you're an entrepreneur, you need to focus on profitability", I think to myself:

No shit.

</comment><comment><USER10> Isn't this the opposite of what we've been hearing the last couple years? The trend of companies being cheaper to start and the rise of angel and super- angel funds have left VC's without a place to make large investments? Isn't that the reason for the contraction of the "VC industry" in the first place?

<comment><USER11> > ...have left VC's without a place to make large investments?

OK, I've got a gripe about this: I get the sense that VCs have done this to themselves, and it's kinda funny.

My view on it might be -- and probably is -- influenced too much by the kind of slant that the stuff on HN has. There are probably other investment circles out there that concentrate on other things; I just don't know where they are or what they're up to.

But try getting a small team of brilliant young engineers, chemists, scientists, and mechanics together, and then go looking for VC to build a prototype electric sports car. Let's even say you've built most of the drivetrain and software already, and you're looking for VC so that you can afford a designer for it, flesh it out, shop it around to some shows, and make some connections.

Now, let's imagine you take a similar team of brilliant young people, and -- with only a few lines of code written -- you say, "We want to build the next great social media app."

I'd bet you're a lot more likely to see funding for the social media app than for the next electric sports car, and that makes perfect sense: the development of the social media app requires way less up-front expense, which in turn means it carries less risk, _and_ it promises far earlier profitability if it's successful. If the electric sports car beats all expectations and finds a huge demand, you're still going to have to spend millions on a factory and tooling and everything else before money will begin to trickle in.

Here's the catch though: social media whatsits are also much less likely to _need_ VC. Programming methodologies and technology have been developing at a breakneck pace for decades now. What used to take a room full of software engineers months to roll out can now instead be launched by two guys in a couple of weeks. Hell, some people on HN have gone and launched basic startups from scratch over a weekend. Now you can come up with an idea, order a VPS for 20 bucks from Linode, click to run a StackScript that will build your server for you, download a pre-built free PSD template, plug in jQuery and jQuery UI, spend a couple hours writing content, download some graphics, and then open up an AWS account and have your application backed by a massively scalable, highly reliable backend. Ding, done.

Fred Wilson's main concern -- that there isn't enough money to go around for these kinds of things -- is perfectly wrong, I think.

The neat thing about this is that everyone involved has been acting rationally according to their own self-interest, and this has resulted in the VCs self- selecting themselves into a niche that decreasingly needs them in order to be successful. At this point, if a web or software company has burned through a million dollars of investment and still isn't breaking even, then their business model is broken.

We also have to look at the lifecycles of these respective business approaches. Things seem to work out best for VCs if they get into a company that grows for a few years, but as Fred says, they're getting purchased earlier. Others are probably dying out faster. The overall life cycle for these businesses seems to be very short. (Myspace was launched in 2003, just 7 years ago; who here has an account with them?) The life cycle of the successful "hard" business meanwhile hasn't really changed much; the rule still seems to be that you have to work for three years before you'll be profitable (if you're not doing R&D, that is), and then as long as you're careful not to blow it, you can be around and be making fine money for decades.

...But VCs don't seem to be as interested in sending _those_ kids to college.

</comment></comment><comment><USER12> Well I think the unsaid thing here is that the social media 'startup' itself is quickly being commodified... If you can write code, you can potentially build a semi-profitable product on your own for less than the cost of a TV. All the other business infrastructure can be handled by free or nearly-free web services, crowdsourcing etc. A lot of the marketing channels are free as well.

</comment><comment><USER13> The thing that nobody understands until you've lived through it is just how long it takes for some companies to get profitable and self sustaining. And just how long it takes for some companies to get liquid and leave the portfolio."

The thing that less people understand is when to cut bait. I think avc is making excuses here.

<comment><USER5> if i had cut bait on comscore in 2001, i'd have left tens of millions on the table

if i had cut bait on multex in 1995, i'd have left tens of millions on the table

if i had cut bait on TACODA in 2004, i'd have left tens of millions on the table

venture capital sounds easy.

it is not

<comment><USER13> All those examples had justifiable reasoning beyond "stay and pray"..... right?

</comment></comment></comment><comment><USER14> I think he means "increasing". I don't think a rate can expand any more than a temperature can elongate.

<comment><USER15> In all possibleness, it's a perfectly cromulent usage.

</comment></comment><comment><USER16> How do you know that the birthrate of startups is expanding? I was expecting to see numbers and graphs.</comment>


Cannabis Is Essential - <AUTHOR> https://www.sfgate.com/offbeat/article/Medicinal-patients-fearful-as-city-deems-cannabis-15138709.php <comment><USER2> I use CBD oil for insomnia. It's a great helper for me. But I believe that everybody is different, it's a process of trial and error to see what works for you. You should do your own research, read info here on [https://www.webehigh.com/](https://www.webehigh.com/) and decide whether you wanna try it.</comment>


Show HN: Instanote – self-hosted pinboard - <AUTHOR> https://github.com/lucianmarin/instanote <comment><USER2> You need to update your code to follow more modern and more secure PHP practices .

Instead of reading from and writing to a JSON file, use a database... this is the kind of thing they were made for, after all. If you do, though, use PDO[0,1] to prevent SQL injection.

Also, instead of md5, which is a very weak and thoroughly broken algorithm, use password_hash[2,3] along with password_verify[4] to compare in a way that's safe against timing attacks. Also _don 't authorize users by storing the password in a cookie, even as a hash._ The typical way to do authorization is through secure sessions. Users can't create session cookies, but they can create arbitrary POST variable and cookies with their own hashed values, which means it's probably possible for anyone to authorize themselves with minimal effort.

I'm also just assuming you've got some XSS issues as well because I don't see any attempts to escape variables in templates.

You've publicly exposed phpinfo() which makes it easier to tailor exploits for your PHP installation.

I notice you seem to have a startup as well. I really hope for the sake of your users that it's built a bit more substantially.

[0][https://code.tutsplus.com/tutorials/why-you-should-be- using-...](https://code.tutsplus.com/tutorials/why-you-should-be-using-phps- pdo-for-database-access--net-12059)

[1][https://phpdelusions.net/pdo](https://phpdelusions.net/pdo)

[2][http://php.net/manual/en/function.password- hash.php](http://php.net/manual/en/function.password-hash.php)

[3][https://stackoverflow.com/questions/30279321/how-to-use- pass...](https://stackoverflow.com/questions/30279321/how-to-use-password- hash)

[4][http://php.net/manual/en/function.password- verify.php](http://php.net/manual/en/function.password-verify.php)

</comment><comment><USER3> Um.. Wow.

> PHP 5.2

Why? The 5.2.x line hasn't been supported for 7 years.

> MD5

Wat. Just. No. Don't.

> chmod 777

Wat^2. Holy shit balls. No. This is ridiculous.

<comment><USER4> I'm the first person to be horribly critical of companies where I feel it's suited.

This is however one person putting time into coding, and probably involving following the recommendations in any of the many highly SEO'd tutorials.

In the spirit of feedback, I would urge the poster to consider:

* Modern versions of PHP. You may find you don't even need to change your code * password_hash() in place of MD5 * chmod 660 - where the group ownership is appropriate.</comment></comment>


Abstract Studio Is Today - <AUTHOR> http://abstract-studio.tumblr.com/post/126493791553/abstract-studio-is-today

<comment><USER2> The AbstractEngine will be available on november [http://www.abstractstudio.co/engine.html](http://www.abstractstudio.co/engine.html)

</comment><comment><USER2> We are waiting for that :-)</comment>


Certifications in email sig - good or bad? - <AUTHOR> http://www.convertyourcds.com/blogs/district-media-works/1630752-on-putting-your-certifications-in-your-signature

<comment><USER2> I am a firm believer in not putting any certs, books you wrote, or conferences you have spoke at in your sig. IT can be read in two ways, one you are being pompous or secondly your a fresh out of school. Conversely the absence of them leave no impression. Anyone who would be making a decision on your employment will receive your resume which is the place for such information.</comment>


Microsoft's Smartwatch Could Launch Around The Same Time As The iWatch - <AUTHOR> http://www.businessinsider.com/microsofts-smartwatch-release-rumors-2014-7?nr_email_referer=1&utm_source=Triggermail&utm_medium=email&utm_term=Business%20Insider%20Select&utm_campaign=BI%20Select%20%28Wednesday%20Friday%29%202014-07-02&utm_content=emailshare

<comment><USER2> Hey wait I thought the SPOT watches came out YEARS ago!</comment>


Why Google Needed a Graph Serving System - <AUTHOR> https://blog.dgraph.io/post/why-google-needed-graph-serving-system/ <comment><USER2> The Freebase acquisition itself was triggered by Google being late to the graph game.

First Microsoft bought Powerset, then they applied technology from Powerset to create Bing. For the first time there was a world-class competitor to Google's search engine so Google panicked and bought Metabase.

This was particularly odd at the time because despite having one of the creators of Cyc as it's head of research, Google was publicly derisive of knowledge graphs up until that moment.</comment>


What is the most absurd code you've ever seen? - <AUTHOR> https://www.quora.com/What-is-the-most-absurd-code-youve-ever-seen?share=1 <comment><USER2> Lol, cron jobbed scripts. Instead of changing the code they would just write a new script and cron it 1 second after the original script.

Problem solved!

<comment><USER3> Is there a cron implementation that gives you control down to the second?

</comment></comment><comment><USER4> Pretty much any code I've written and reviewed after a couple of months.

</comment><comment><USER5> Obligatory link to TheDailyWTF:

[http://thedailywtf.com/](http://thedailywtf.com/)

</comment><comment><USER6> The Magic Servlet pattern in action: a 4000+ line function implemented in a jsp file; took a while to refactor that dumpster fire. I have never put much stock in 'licensing' for software developers but the aforesaid monstrosity really made me consider whether I should rethink my position.

</comment><comment><USER7> I once encountered a 2K+ line script handling submissions from something like a contact form.

If a client submitted a value for which the key didn't exist in the database table, it wasn't ignored - the application would alter the table to add that row to the database so it could insert it.

</comment><comment><USER8> Surely there's prior art on the AT&T one? Might be a bit hard to search for, though.

</comment><comment><USER3> Found an "if (true or false) { ... }" in a PHP project my team is maintaining. It was from before we took over the project so we don't know where it comes from.

</comment><comment><USER9> class CSectionOfSingleMaterialDrawableObjectBuilder { ... };</comment>


Ask HN: Rate our Twitter game, Atlibs - <AUTHOR>

http://atlibs.matchstrike.net/
I'd explain it here, but that could lose us valuable blank-slate first impressions. Just click and tell us what you think! Every bit of feedback is appreciated.
This is a site by Match Strike, or as we go by on HN, rriepe and TheThomas. <comment><USER2> Some people might take the easy route and use madlibs to compliment the site. I will do no such thing.....

I'll just say the site had a good look and feel and was straight forward. The rest of the internet could learn a thing or two from it.

</comment><comment><USER3> This was a fun amusement during my evening which was otherwise being spent feeling blue about the current state of "enterprise" software. @[[friend]] is a nice touch -- it made me check who is following me for the first time in a few months.

</comment><comment><USER4> At first I was like... madlibs on twitter? But its really pretty fun and super easy to use/understand. Much impressed.

</comment><comment><AUTHOR> <http://atlibs.matchstrike.net/>

Clickable

</comment><comment><USER5> I think your site is [[adverb]]. I really [[verb]] the design too. It's funny [[noun]].

</comment><comment><USER6> I love that you included the ability to make your own.</comment>


Is there any way to ignore user on HN? - <AUTHOR> When some asshole write long-text insults as replies to bunch of my comments, I don't want to reply, I just want to ignore them and never see them again. Is it possible? <comment><USER2> There's a contact link in the footer to send an email to email@example.com

In my experience, 'dang reads those emails personally and responds promptly.

</comment><comment><USER3> You could write something in tampermonker/ greasemonkey/whatever to remove the posts yourself.

</comment><comment><USER4> Flag them and move on.

<comment><AUTHOR> I can't flag them, there is no such button.

<comment><USER5> The "flag" link doesn't appear unless you open the comment on a separate page by clicking on the "nn hours ago" link. (It's possible however that you can't flag a reply to your own comment, since you can't downvote replies to your own comments.)</comment></comment></comment>


Apple will let you add 256GB of RAM to an iMac Pro for $5,200 - <AUTHOR> https://www.theverge.com/circuitbreaker/2019/3/19/18272523/apple-256gb-ram-imac-pro-5200-update-configure-build <comment><USER2> You can get a 128GB from OWC for $1679. I have used their RAM sticks for my old Mac Pro not once but twice (as prices came down) and they work great, and they will give you a credit for RAM you send back to them. That's not 256GB but it's also not $5200...

<comment><USER3> ECC Server RAM can be found dirt cheap on ebay, since enterprises use it and toss the stuff on a regular basis. You could easily fine 128Gb of ECC DDR4 for like $800. If you find an older (but still extremely powerful) Xeon that takes DDR3, you can get the stuff for pennies on the dollar. It's also quite easy to run a hackintosh on Xeons, if that floats your boat.

</comment></comment><comment><USER4> Finally enough ram to run SVG blur filters in Safari!!!

<comment><USER5> Why would a blur filter require a lot of RAM? It's a convolution isn't it? Shouldn't require any RAM at all.

<comment><USER4> At least on the iPhoneX some SVG blur filters can easily crash the whole browser. And it depends on the image size, so it is most probably a memory issue. But of course I do not know for sure because there was never any reaction on my bug report on Webkit.

Anyway, now there is a great solution for this issue and it is only $5200.

</comment></comment></comment><comment><USER6> Unlike the iMac, the iMac Pro is not designed to let the user upgrade its memory. I guess it takes a "pro" to take it apart and do it anyway (it's possible) and pay 7€ per GB instead of 25€ per GB.

Btw the link should be changed from news.google.com to theverge.com

</comment><comment><USER7> What's the street price for that much ram?

<comment><USER8> The couple places I found some it was about $570-$860 per 64Gb memory module, so ~$2280 to ~$3450. NewEgg is having a sale, looks like real street is about $2000 if the modules they carry are compatible. But officially, for RAM upgrade, the iMac Pro is not user-serviceable, you have to take it to a service center to get the memory upgraded -- and if you go to Apple, they will probably not install 3rd party RAM.

<comment><USER7> OK - apples price, while crazy isn't as bad of a markup as I expected.

</comment></comment></comment><comment><USER9> Serious question: what are legitimate use cases for 256GB RAM on a Mac? ETL loads? Graphic editing? Running as a server? I guess I'm ignorant of who the customer is here. Or is this more just enthusiast?

<comment><USER10> Multi tab browsing (sorry, couldn't resist)

<comment><USER11> You also need 64 cores at a minimum /s

</comment></comment></comment><comment><USER12> Url changed from [https://news.google.com/articles/CAIiEJeVXSlrlay6HQiVhn9J5tY...](https://news.google.com/articles/CAIiEJeVXSlrlay6HQiVhn9J5tYqFwgEKg4IACoGCAow3O8nMMqOBjDc064F?hl=en- US&gl=US&ceid=US%3Aen), which points to this.</comment>