Mac Pros, Ara, and Modularity - <AUTHOR> http://jjcm.org/blog/mac_pros_and_modularity/ <comment><USER2> It really startled me that the comparison was the Pro vs the Ara, and not the Pro _and_ the Ara. The Pro is very much in the spirit of modularity. True, everything written demonstrates the different level of granularity of modularity between the Ara and the Pro. But to the consumer, the forward facing arguments are exactly the same: "Buy what you need, each separately, and link them all, as needed rather than a huge AIO - one size fits all".

The Mac Pro is requires you to bring your own HDs, bring your own expansion cards, bring your own network gear. Which centers the Pro itself at the core of a modular computing center.

<comment><USER3> This seems to be a common misunderstanding about the new Mac Pro. Apple has actually improved modularity by liberating expansion from a fixed physical space. Additionally, users aren't required to install scary-looking computer hardware into PCI slots. They can just use the familiar UX pattern of plugging a cable into a port.

<comment><USER4> Except the Thunderbolt device is twice the price of the equivalent PCIe card and now you have cables everywhere.

<comment><USER5> You already had cables everywhere if you were a professional. I don't know any professional photographer, video editor or audio professional that doesn't use tons of external storage.

It's mainly non pros that argue that a few internal 2TB bays would be enough, which is laughable for pro use.

<comment><USER6> But if they were professionals didn't they use SAN (or at least NAS) for this ?

Don't get USB hard disks old pretty quick ? (and the performance with GByte LAN is much bigger). So it's just a single LAN cable ?

<comment><USER7> I suppose it depends whether you consider Pro and Enterprise to be synonymous. I don't think they are.

Anyway, what kind of high end Mac user ever bothered with USB drives, when you could use Firewire and have double the throughput with no CPU overhead?

</comment></comment></comment></comment></comment></comment><comment><USER8> Clayton christensen , the researcher behind "the innovator's dilemma", says there are natural cycles in industries between integration and modularity. Basically , when the performance of a product isn't good enough, there's a need for tight integration. So the winners usually have tightly integrated products.

At some point people don't need more performance , the products are "good enough". Then a modular architecture becomes very usefull because it increased the rate of innovation, increases competition and reduces prices. At those phase the winners are usually companies who control modular products.

Now if we look at the mobile market we see signs of a possible shift: for many consumers , mid level phones are good enough. And jolla unveiled in 5/2013 a modular phone[1] that achieved good reviews.

Incidently , it's seems a few months after that declaration, one year ago, motorola has begun working on a modular phone.

So assuming we can extract plenty of value from a modular phone(an it seems to me that way) , i believe we will see a large shift towards modularity.

[1]The jolla phone is composed of two front, front and back. the front is fixed, while you can change backs. [http://en.wikipedia.org/wiki/Jolla#Products](http://en.wikipedia.org/wiki/Jolla#Products)

<comment><USER9> That seems.. wrong.

Back when PCs weren't very good and you had to make real choices about what processor, hard drive and so on to get, DELLs customization and modularity business flourished.

Now that performance is "good enough" for practically any computer you can buy today, the market is moving to highly integrated tablet solutions, the only choice left being disk space, and it's getting less important every day. Meanwhile, DELL is going private.

<comment><USER8> >> Back when PCs weren't very good and you had to make real choices about what processor, hard drive and so on to get, DELLs customization and modularity business flourished.

The cpu/memory/chipset remained integrated , due to performance reasons. But external bus performance was good enough to separate some functionality into external cards.

<comment><USER9> CPU, memory and chipset have always been very much modular parts. Chipset is determined by which motherboard you buy, memory comes as sticks you put into the motherboard, and even the CPU sockets in to keep it modular.

I mean just imagine the trouble to keep the CPU seperate from the motherboard, as is still done today! It is very very difficult to build a socket (and matching CPU) for the 1000+ pins of a modern CPU where each pin can possibly carry signals at multiple GHz frequencies.

<comment><USER8> Yes you're right ,they are modular.

The change christensen refers to is the shift from companies that built whole computers, like IBM - to the IBM pc , which was an assembly of parts from different companies.

My guess is that at that time , the pc-XT came with memory chips that weren't soldered , but in sockets. At that context that didn't mean much loss of performance. That habit of pluggable memory stuck. I'm not sure you lose much performance due to it.

And if we're talking about integrated memory - intel does have caches. Probably those are the best ways to deeply integrate memory.

And regarding CPU and board: it would be quite hard to integrate chips and board. There's was one attempt i know but it failed as far as i know. It's complex and not economical, but it does offer great performance.

</comment></comment></comment></comment></comment><comment><USER10> Obviously Ara and iPhone fill different niches and take different sets of compromises. Neither of these is better than the other by _all_ parameters, but each offers _unique_ advantages.

Possibly the niche of Ara will be narrower, because the connectors are going to add noticeable cost. OTOH the ability to add an entirely different functional block right into the phone can be very valuable in some circumstances.

Of course, CPU and RAM need tight integration; I suppose these will come as one module. But the periphery, like radios, storage, cameras, etc need much less tight coupling and can use physically narrow high-frequency serial connections. If a connector is only 4 contacts wide (like USB) or even 6 contacts (like USB3), it can be reasonably cheap an compact.

Most probably a real Ara phone will have far fewer detachable blocks than currently pictured: a CPU/GPU/RAM block, a radio block, a camera block, probably an extra extension block for new devices (finger scanner? second camera for a stereo pair? projector?), and, of course, traditional detachable flash storage and battery.

</comment><comment><USER11> The bigger problem with Ara-style modularity is that as computing power shrinks (in both size and power draw) it becomes pointless to think of modules of "a" computer.

There's simply no point to try to separate processing power _out_ of any component that has other physical constraints. e.g. displays, lenses, antennae, etc.

So you won't want to slap a 'better' camera onto your smartphone to leave your DSLR at home. But not because the interconnect between lens and mobile "base" will become too wasteful or inefficient. Simply because that future lens will _be_ a stand-alone camera and it will operate within a network of things, in which your mobile phone won't be a _necessary_ component.

Similarly with any other useful components. You won't have to make any trade- off of space other than "what can you physically carry".

Need more storage? Put a storage pod in your pocket. Want a rangefinder? grab a 'network of things' capable device. Need more battery? grab a power brick that can charge _anything_ with a capacity limited only by your willingness to carry it, rather than being locked into a form-factor unrelated to (and possibly in conflict with) your power needs.

<comment><USER12> People want cameras in their phones not because their cameras lack connectivity but so that they don't have to carry a separate camera.

Of course, there will always be a niche for cameras with lots of manual controls, possibly with big lenses, and they'll work as you say. DSLRs with wireless networking are already on the market, such as the Nikon D5300.

<comment><USER13> I own mirrorless camera with wifi. I really would love to have camera component with interchangeable lens on my smartphone just to save some clicks and own single device instead of two.

</comment></comment></comment><comment><USER14> It's my understanding that most major appliances (washer, fridge, etc) are less repairable than they were 50 years ago. I think it's because of several contributing factors:

* Cheaper manufacturing with simultaneous increase in quality control and reliability.

* More complicated objects lead to more costly repairs, mechanics have to be more skilled, so wages go up.

Because it's simultaneously cheaper to something and more expensive to fix something, it makes much more sense to replace than to repair. These effects feed off of each other, too. To make something more reliable and cheaper, manufacturers seal off more and more parts, making it more and more expensive to repair, and so on.

<comment><USER15> When my fridge broke and the repair person came, it was basically: Either the circuit board or the compressor needs replacement

<comment><USER16> Yea, and it's a $400 circuit board instead of a $5 switch.

</comment></comment></comment><comment><USER17> > We're already seeing workarounds - graphics cards are using two, or even > three PCI-E slots to get that precious bandwidth they need. With 4k displays > on the horizon, and textures in games being updated accordingly, we're going > to need more bandwidth to graphics cards. At some point, we're either going > to have to switch to two dimensional connectors like processors are using > for GPUs (which will still only delay our issues), or we're going to have to > move away from the 1mm build fabrication for our interconnects. If the later > happens, we simply can't rely on consumers to properly line up lanes in > components.

They aren't actually using the slot, just potentially covering a slot right? One of the fastest desktop cards out, r290x only uses one PCI-E slot.

<comment><USER18> Yes, every graphics card that I have seen merely occupies additional slots to make space for the cooling devices. However, I do believe that Nvidia's SLI and AMD's CrossfireX multi-GPU interconnects are a proprietary variation on PCI-E, so in some respects that could be considered an additional slot, but it only provides bandwidth between GPUs.

<comment><AUTHOR> oakwhiz is correct, I was wrong in my statements about cards taking up more than one slot. The blog has been updated accordingly. Sorry for the misinformation all, I could have sworn there were cards that did, but googling turned up nothing.

</comment></comment></comment><comment><USER19> I sincerely doubt interconnects are going to be the problem the OP thinks they will. First of all, individual connectors have not changed much in size, but the serial data-rate we can push through copper connections continues to rise. Fiber optical connections are already used to implement PCIe in many applications (Thunderbolt is, in part, a fiber optical PCIe link).

One huge advantage of fiber optics over copper is that you can send many data streams down a single fiber using different wavelengths and/or optical modes. This is why backbone fiber bandwidth keeps growing even over fiber links that haven't been upgraded. It's a function of what you hook up to the ends of the fiber, not the fiber itself. There is _tremendous_ room for bandwidth growth in optical fiber.

Apple definitely doesn't need to use non-standard interconnects for the new mac pros just like they didn't need to use custom connectors for SSD's in their laptops. They just wanted to.

<comment><USER20> I'm not sure fiber optics are particularly viable in the next 5-10 years as interconnects between hardware components. Adding photonics to a hardware component increases size and cost fairly significantly, which is why you don't see many fiber optic interconnects yet, even for applications where cable size is important. Moreover, to get the kind of miniaturization you would need for a cell phone, you're talking on-chip photonics (diodes and photodetectors integrated into the IC itself), which still looks like it's in the early R&D phase.

Of course, most of this is probably because copper is still doing just fine in terms of bandwidth. Though some big issues with forcing huge bandwidth over few traces are latency and the additional circuitry needed to translate the signal into the actual components needed to drive RAM chips or a CPU.

<comment><USER19> [http://www.technologyreview.com/news/518941/intels-laser- chi...](http://www.technologyreview.com/news/518941/intels-laser-chips-could- make-data-centers-run-better/)

It's out of R&D and entering production.

</comment></comment></comment><comment><USER21> The Mac Pro is a very modular computer. The only thing set is the Cooling, Power and Case. Everything else is Modular:

* Graphic Cards * Storage * Ram * CPU - In the form of the entire motherboard but that has always been Apple's approach

Everything else lives outside the box and is super modular.

<comment><USER4> Those "modules" are proprietary form factors that you cannot buy and Apple won't support any modification other than adding RAM.

</comment></comment><comment><USER22> Modularity is going away, not only in Mac Pros, but even in desktop space.

AMD APUs are integrating the CPU and GPU together. Intel is releasing mainstream chips that cannot be physically separated from the motherboard (See the i7-4770R: it needs to be soldered on).

GDDR5 RAM, the mainstay super-fast graphics RAM, is assumed to be soldered onto a board. DDR4 will only support one RAM per lane.

Modularity is almost the opposite of market forces right now... as unfortunate as it sounds.

<comment><USER23> AMD's "APU" is simply a way to join 2 different products and jack up the price on the one joined product. As such these are still a modular part. As for Intel this is the same idea they can force you to buy not only their CPU but also the entire motherboard and force you to pay for the entire board that is made by them. Modularity is not the opposite of the market forces right now. The big companies are just too lazy to spend the money to, 1. go smaller, 2. get more complex.

<comment><USER22> You can build an AMD APU system extremely cheaply. A ZBox Nano A4-5000 (using the "Kabini" APU) is only $300 or so for a complete computer (RAM, Hard drive, etc. etc. included).

On the contrary, the AMD APUs are extreme value buys. Intel has superior CPUs, but you save a money with AMD APUs because you don't need to buy a graphics card anymore. AMD is beginning to do crazy stuff, like cache-to-cache direct transfers between CPU and GPU, because both are on the same die.

Intel has been improving its integrated graphics in response of course... but they aren't at the level of AMD's APU integration yet.

But to call this "price jacking" means that you completely don't understand the marketplace right now. AMD's Kabini and Temash chips are among the cheapest in the entire marketplace right now... and AMD's higher-end APUs (Codename: Richland) are sold at significant discounts in comparison to Intel chips.

</comment></comment></comment><comment><USER24> I'm afraid you may have missed the point that Apple makes with creating "walled gardens" with their products, and also what it means that Motorola is releasing a phone with modularity. Apple provides its customers focus. Rather than worrying about how they can modify their machine to improve performance and functionality, Apple's customers can be fairly confident that their machine will be reasonably fast, feature rich, relatively safe, and aesthetically pleasing while sacrificing a higher monetary cost and faith that the previously mentioned qualities will be fulfilled. You are very right that modularity on a mobile phone is going to involve sacrifices due to space constraints, and this is what we will see with the Ara. Interestingly though, while almost all mobile phones I've been exposed to in the past, this one will have swappable options. Basically I think this is saying that mobile phone technology is at the point where we can make some of the sacrifices but still end up with a useful device with options. It will be really cool to see how this plays out and if 3rd party add-ons will cause Motorola to pull back with this offering.

I'd like to point out that you highlight the benefits of modularity as improvements for speed, power consumption, size, and cost, but the use case you give is that you are writing an article on this custom machine that you've built. What else does your custome-made computer let you do that you couldn't do otherwise? And why do you think that the majority of consumers don't go down the custom route?

On a side note, I feel that I have to refer this article from the Harvard Law Review. It is a bit of a philosophical discussion on the "generative" aspect of computers compared to other devices/appliances. It's headlined "The Generative Internet" by Jonathan L. Zittrain.

[http://dash.harvard.edu/bitstream/handle/1/9385626/Zittrain_...](http://dash.harvard.edu/bitstream/handle/1/9385626/Zittrain_Generative%20Internet.pdf?sequence=1)

</comment><comment><USER25> The article hits the nail on the head. Engineering for modularity will squeeze out the benefits at some point. It's not some evil conspiracy, but ever- shrinking electronics and tolerances. It's going to be the domain of robots and high res 3d printers because we just won't be able to see or touch things at this scale.

</comment><comment><USER26> "I'd rather make improvements to speed, power consumption, size, and cost"

I think those are optimizations that _you_ care about - but not the average consumer. We're getting to the point where phones of the same price pretty much universally operate within a standard of performance, give or take a margin of error, and can run a day or longer without recharge. At a certain point users stop caring about further optimizations and start caring more about features. And that's where modularity gives a huge pay-off.

<comment><USER27> with the whole debate about "who wants more power/speed? They are already fast enough", i feel we are missing out on one crucial point:

Our perception of hardware performance is driven by the software running on it

The only time you start feeling your tech isn't fast enough is when new software comes out that is even more resource hungry. The PC's running Tomb Raider 1 seemed fast enough at the time, but can you imagine them running even apps now? Even with smart phones them selves, iPhone 3 was great! until people started making apps that needed iPhone 4 level of resources and you started feeling your iPhone 3 was too weak...

So I think we're always gonna want more power. What's the point of a modular phone if it can't run any of the latest apps?

PS: I still think a modular phone would be insanely awesome! But just giving my 2 cents

</comment></comment><comment><USER28> It is always funny to see the arguments of modularity age. Consider, the idea that a car is this somewhat perfect modular thing. While there is certainly something to it having some obvious discrete parts. Typically along the lines of what wears at a different rate from other items, the idea that it is modular for the 99% consumer is laughable. And I say this as someone that changes my own brake pads. Speaking of, the "components" of most computers are more universal than the average car part. Unless you are simply talking about things which plug in what used to be cigarette lighter.

</comment><comment><USER29> > A screen has to put out enough photons that a pupil two millimeters wide can > capture enough light from it half a meter away. That fundamental principle > isn't going to change anytime soon, and since that's the largest piece of > energy consumption in phones these days, power requirements aren't going to > drop significantly in the foreseeable future

The technology isn't there yet, but I would love to see the day when we can make laptop screens (and the like) out of e-ink-like displays.

I don't _like_ staring at backlit screens all day. A computer screen has about the same luminous intensity as a 40W bulb[0], which is not a pleasant thing to stare at all day.

If only we could figure out a way to make e-ink remotely usable with high refresh rates, etc[1]., we could rely on external lighting (which is usually available) and get dramatically better battery life out of our laptops and/or phones.

It could even fall back on "frontlighting" (what the Kindle Paperwhite does) for nighttime usage.

[0] Preempting any physicists' objections: yes, I know that watts do not measure luminous intensity (that would be the candela), but a 40W bulb is a familiar reference point, and this comparison is roughly in the right ballpark.

[1] Which is a big hurdle, and why I admit that the technology isn't there yet.

</comment><comment><USER30> I'm not sure I buy the narrative about 1mm connectors. You don't currently line up the contacts on your graphics card - the card only fits into the slot one way. What is preventing us from taking the current design and doubling the number of contacts? Manufacturing tolerances get smaller, but they're certainly going to get smaller if we start printing the same number of connections.

<comment><USER31> It's a little hard to make out, but if you look at the photo of the ARA, those aren't 100-pin connectors -- they're more like USB connectors. Power + Data = 4 pins. So not all that hard to line up, especially if you have guides in the screen portion to slide in your modules. And _unlike_ USB, there'd only be one way to orient the pluggable module. :)

My chief concern would be pocket lint getting in there.

<comment><USER32> and dust, and sweat, and humidity...

</comment></comment></comment><comment><USER33> Modularity is going to remain very very much alive, at least for mobile phones.

Here's why.

A mobile phone needs to be a certain size to hold it. There's always going to be a minimum size, beyond which it won't be sensible, it won't be usable.

See this? [https://www.google.com.au/search?q=panasonic+gd55&tbm=isch](https://www.google.com.au/search?q=panasonic+gd55&tbm=isch)

When have you last seen one of those being used? People want their 4 or 5 inch screen, it's as simple as that. The most frequently sold Android devices used to be fairly dinky 320 by 240 affairs, but at the price difference becoming fairly tiny, they've now given way to devices with bigger screens, higher resolutions and more processing power.

The Google Nexus 4, for instance, features a base frame that 's a fairly thick chunk of Aluminium. It's bezel features large back areas at the top and the bottom of more than a centimetre each. It features triumphs of miniaturisation within, sure, but the product itself isn't. It's designed to be used by human hands.

The only thing that really requires the space is the battery and the antenna. The antenna can be built into the base frame. It could even be a sheet that sits underneath the components that could also be replaced. Or it could be a bezel, similar to that starting on the original iPhone 4, that might also double as a bumper frame for the thing. Have a bumper frame with connectors and you're there. Or maybe at some point those extra 3 or 6 dB don't matter much any longer for the majority of the market, especially if a lot of the heavy lifting will be done through WiFi.

When it comes to the speed a phone can accomplish as it matters to the vast majority of the market, then size of the components to make that happen is not that much of a constraining factor.

At some point, the diminishing returns of a modular phone vs. a non-modular phone will bring it to a point where the performance difference, as it matters to the average consumer, will be about, let's say, 20% or maybe even 30%.

But when you can target the one aspect of performance that matters most to you and swap that out, if you can prioritise there, then you have the ability to make up for that.

If you then also have the components, on average, each last twice as long for your needs than would otherwise have been the case, it's just become twice as valuable an investment.

I like the size of my Nexus 4, and any performance penalties imposed by modularisation are outweighed by being able to swap out components and it being a better investment. There are diminishing returns to making mobile phones smaller. Desktop computers have reached a certain size and then they didn't really get any smaller because they had no reason to and modularisation outweighed that. Why not the same with mobile phones?

<comment><USER33> "But longer battery life"

<comment><USER33> I don't care. Make the processor more efficient, make the screen more efficient and it really becomes a non-issue. LG could have put in more battery in the Nexus 4 had they really wanted to, probably 20% more. Remember Nokias with four or five week battery lives? Well, with re-thinking on the other sides of this, like ubiquitous MicroUSB, battery life beyond two days became a bit of a non-issue. Completely. Sure, some phones might be constrained because of battery life, but they're not in the majority. It's just a standard component of a rectangular shape and thickness they put in these days and it's good enough.

What am I really going to do with, what, 20% more battery life, if it already lasts 2 days? And how about the possibility of each of these components adding more than one functionality? Who is to says that a GPU component can't also add a battery? I wouldn't mind having a phone with two batteries. And no one is saying that everything in the phone should be modularised out. How about a module just called 'mainboard' that contains everything but the battery and the antenna, and of course the screen? You could then override or enhance functions on this mainboard with additional modules. And it would be easy to replace. The concept of these connectors and all wasting space becomes a bit of a weird thought if you actually might hold it in your hand an realise that it's a good size, it has good performance, it has good battery life, it has a good screen and there might only be two or three modules in the eight module slots available. And that's doable. Saying that there's wasted space in a phone like that becomes, instead of a criticism, it becomes a justification for buying new modules.

All in all, the wasted space in this is not going to outweigh the "wasted space" (if you can call it that) in the majority of smart phones out there by a substantial amount.

In fact, it gives manufacturers an incentive to cram every single cubic millimetre they're given with as much functionality as possible, or at least sensible, because their revenue will depend on this utterly in a freer market. Has that been the case so far? I've repaired my Nexus 4. There are plenty of cubic millimetres of space being used that, strictly speaking, don't really need to be. Most of what's happening here is that these structural cubic millimetres are being shifted to a different and sure, a bit less efficient shape.

The only outcome that matters coming out of all of this will be that it might cost $15 more. Or $5. Or some small integer dollars to pay for all the connectors. But if I can use at least half of it twice as long, that's an amount that doesn't much matter.

Here's a secret: The Nexus 4 is already full of spring loaded connectors anyway. I counted. It has about 5 going to the back cover. And one for the speaker. Add the SIM and that's another one. Then add the two connectors for antennas... and arrive at about 9. If you count the battery, which uses sprung pins in addition to two screws, that's 10. This thing has eight visible at the back, add a SIM and you arrive at 9, and add maybe another one or two at the front. Ten, maybe eleven. So, really, the only big difference is that these connectors are now more easily user accessible and the aluminium frame is a bit of a different shape. There's already plenty of internal plastic to surround individual components in a Nexus 4 anyway, so just make it a bit thicker on the outside. Not a big leap, people.

"But everything is moving towards integration"

Well, that hardly precludes it from moving in this direction as well. The CPU being on the same silicon as some mesaure of GPU is hardly going to be fundamentally affected by this, is it now?

<comment><USER34> The Nokia phones with four or five week battery lives used a single backlight for a 120x120 or so pixel monochromatic LCD screen.

Don't get me wrong, I love the one that I have _and still use as an alarm clock_ , but it'll never replace a high pixel density colour screen in anyone's books.

<comment><USER35> Plenty of people don't really care about watching movies on their phones, so I wouldn't say "anyone".

<comment><USER36> In my world, almost everyone cares about consuming content (maybe not movies) on their smartphones, heck they use their smartphone more than their PC/TV.

</comment></comment></comment></comment></comment></comment><comment><USER37> Seeing that computer running from inside the mobo box is like seeing pictures of frightened, malnourished animals in those Humane Society ads. Get a case, you cheap bastard! One coffee spill away from disaster...

</comment><comment><USER38> Hadn't heard of Project Ara before, sounds an awful lot like [http://www.phonebloks.org/](http://www.phonebloks.org/)

<comment><USER39> It was on the front page yesterday, and if you searched about it, you would quickly learn that Motorola is collaborating with Phonebloks.

</comment></comment><comment><USER40> What graphics cards are using 2 or 3 PCI-E 3.0 x16 slots?

</comment><comment><USER41> Can't wait to see the first prototype for an organic based cell phone. No modules, but software controlled morphing parts.

</comment><comment><USER42> I'd much rather see modular, standardised laptops. Mine doesn't even have a removable battery.

<comment><USER43> But do you really need a removable battery if it lasts 14 hours per charge?

</comment></comment><comment><USER44> 128Gb, not 128GB. 16GB storage on the iPhone 5s iFixit tore down.

</comment><comment><USER45> I don't see how the two are mutually-exclusive.

</comment><comment><USER46> Kudos for the jjcm.org website.

</comment><comment><USER23> It is more sad that people are seriously believing this person who is a designer not an engineer. "I do art and code and sometimes other things. This is my homepage, which as a rule of thumb contains nothing useful. This homepage is where I conduct experiments, which at any given time are usually broken."@ [http://jjcm.org/](http://jjcm.org/)

I am sorry but the only things that are non-modular are computers like the xbox360 and products of that nature that the companies do not want the user to change/upgrade the computer at nearly all cost. It is ridiculous to state that it is "inevitable" to become non-modular. Scientists have been backing the barriers of nearly every science there is in the past 50 years and as such you can NOT conclude that this is "inevitable" it is more likely that by the time we run into a space problem at the level you are implying (which by the way is ridiculous as other people stated... what graphics card uses 2+ PCI slots LOL) that we will finally figure out how to make the first bio-matter computers. Ie: a computer that has a cpu of nearly jello matter that will process data at most likely at first a slower but much cooler rate than our cpu's that we use at the moment.

<comment><AUTHOR> I'm actually an engineer at Microsoft. Design is just a hobby of mine.

As for the graphics cards, I was wrong on that account. My memory betrayed me (I could have sworn I'd seen cards that used two slots somewhere along the line, but googling found nothing). The blog has been updated.

<comment><USER9> There are graphics cards that use two slots, just not two PCIE interfaces. Humongous cooling solutions on contemporary graphics cards usually extend over two slots:

[http://images17.newegg.com/is/image/newegg/14-127-768-Z02?$S...](http://images17.newegg.com/is/image/newegg/14-127-768-Z02?$S300$)

<comment><USER23> "what graphics card uses 2+ PCI slots" USES PCI SLOTS. not covers.</comment></comment></comment></comment>


Covid domain registration issues with Nominet - <AUTHOR> Tried to register a domain with google domains and got this email from nominet:
.................
Hi,
Your recent application to register the domain name covidchart.co.uk has been submitted to Nominet by your registrar. Nominet is the central registry for .uk domain names.
The application has triggered some automated checks and will not been accepted until you provide some additional information.
This means that the domain name will not work as an internet address until you have contacted us and we agree that it should be accepted and activated.
Please provide us with the following by email to firstname.lastname@example.com:
1. A copy of some verification of your identity, such as a passport, driving licence or national identity card, together with a close up photograph of yourself holding your identification; and
2. Your reason for registering the specified domain name.
We may request further documentation, and in some cases may request that you join us in a conference telephone or video call.
Yours sincerely .UK Customer Services. Tel: +44 (0)1865 332244 E-mail: email@example.com Web site: https://www.nominet.uk
.................
The domain was to host a chart that is pulling covid data from John Hopkins (nothing dodgy).  Just surprised that nominet asks users to send documents like passports via email, seems really insecure to me.
Just thought I'd let everyone know that it's not a good time to register anything relating to covid in the UK currently. <comment><USER2> Similar with namecheap. [https://www.theverge.com/2020/3/25/21194417/namecheap- corona...](https://www.theverge.com/2020/3/25/21194417/namecheap-coronavirus- covid-19-domain-name-ban-registrar-abuse)

14,000 domains with corona in the name were registed in the January and Feburary [https://news.ycombinator.com/item?id=22562029](https://news.ycombinator.com/item?id=22562029)

<comment><AUTHOR> At least they announced it, google domains didn't mention it and I've now had about 50 emails from Nominet and they're still coming through. I think something's broken in their process and now they're spamming me!</comment></comment>


The rise of the low-cost laptop - <AUTHOR> http://www.economist.com/research/articlesBySubject/displayStory.cfm?story_id=11482468

<comment><USER2> How about a $600 laptop for the "rich" world with $200 going towards the production of a low cost laptop for the "poor" world. Would be some good PR for HP/Dell whoever and the cost is still low for the average US/EU consumer.

<comment><USER3> I'm not sure it would work, if only for the message it sends: "Buy a nice laptop for yourself, send an inferior one to someone less fortunate." I realize the end-user benefit is the same as the OLPC's Give-One-Get-One program, but the equality of G1G1 seems more appealing.</comment></comment>


Domogik: Take Control of Your Home - <AUTHOR> http://www.domogik.org/en/ <comment><USER2> A few typos :

\- administrate from your couche -> your couch?

\- Createphotorealism interfaces -> create photorealistic interfaces ?

\- A open solution -> an open solution

Otherwise, looks good! I really like the ebook reader integration! Maybe it's not practical yet, because it's a hassle to visit sites from a ereader, but still a good idea.

How does it compare to other existing open source home automation solutions? What is the vision behind this product?

<comment><USER3> \- administer from your couch

While "administrate" is acceptable, it's longer, less common, and sounds a bit awkward to me.

</comment></comment><comment><USER4> Can this integrate with [http://home-assistant.io](http://home-assistant.io) / HASS ?

<comment><USER5> On practice i'll Say yes with the web api sensors ans commands are available through http(s) resquest. If home assistant can get/send api request it will work.

</comment></comment><comment><USER6> Interesting project, bookmarked for further research! Surprised I have not come across it before, have periodically been searching for things in this space..

Are there any open source system aimed at larger installations? This space is dominated by Crestron, AMX, Extron, Control4, Savant (walled gardens). And they don't even provide a good solution for larger systems, you have to code that yourself, while walking through the toolchain/compiler minefield.

<comment><USER7> I used to work for a company called ihiji (see ihiji.com) that specialized in providing a remote monitoring interface for Crestron, AMX, Control4, etc....

Those systems were all pretty good at the local management side of the house, at least for the modules they had. But they never had any clue about remote monitoring and management.

We spent a lot of time working out the protocols for those systems so that we could appear to be a local standard node on their network, in order to provide that remote interface. It was a major royal pain.

But I did get a good invited talk out of the experience, and I still think that project was the closest I ever got to doing anything really cool.

<comment><USER6> Sorry I missed this response, thanks for the tip about ihiji, looks interesting!

> working out the protocols for those systems [...] It was a major royal pain.

I can only imagine; I wrote an Extron GlobalViewer client module for Crestron controllers back in the day. At least Extron was willing to share the protocol, but it was absolute junk and a nightmare to implement.

These walled systems are used everywhere in universities, government and other places where the bill lands with the taxpayer. Not only for the equipment, but also for the specialized training required to learn their broken tools.

Hopefully someone will build an innovative solution on commodity hardware like RPi...

</comment></comment></comment><comment><USER7> So, question about pronunciation here — the "gik" part of the name would rhyme with "meek" or "freak" or "beak", right?

So, for those of us for whom English is or first language and are truly horrible at any attempt to speak a foreign language like French, we should think of this project as "domo-geek"?

I'm assuming the "domo" part comes from Majordomo, but you obviously couldn't re-use that name, right?

<comment><AUTHOR> I think it's from domus (house in latin) and logic.

</comment></comment><comment><USER8> Is it Cloudy, or can you run it with no internet connection ?

<comment><USER5> It could be run as a standalone installation without internet. But you will miss nootification via SMS or notifry service. Few plugins require internet.

</comment></comment><comment><USER9> Probably, should have instead linked to a page, that explains what domogik actually does. Home page fails to do that.

</comment><comment><USER10> I can't find any information about supported hardware, sensors etc. ... Why?

<comment><USER5> Somes plugins that need internet: -Xee (follow your cars position and status). -Nest and Withings (but they are in early dev).

Others plugins in dev MQTT,rfxcomm,Yi cam,ebusd(for boiler),hue,script,ping,callerid,mysensors,rainhour (french service),wake on lan, geolocation (smartphone usage),bluetooth presence.

I certainly miss somes but thats a good start :)

</comment></comment><comment><USER11> "Administrate from your couche"

I wish to do everything from my couche!</comment>


NNCP: Lossless Data Compression with Neural Networks - <AUTHOR> https://bellard.org/nncp/ <comment><USER2> A natural question I've pondered from time to time is whether Fabrice Bellard is really a time traveler from a more advanced civilization in the future, sent back in time to show us, mere mortals, what humankind will be capable of in the future.

If this sounds far-fetched, consider that he has _created_ FFMPEG, QEMU, LibBF, SoftFP, BPG, TinyEMU, a software implementation of 4G/LTE, a PC emulator in Javascript, the TCC compiler, TinyGL, LZEXE, and a tiny program for computing the biggest known prime number.

And that's just a partial list of his successful projects, which now of course also include software for more efficient lossless compression with deep LSTM and Transformer neural networks.

Any of these projects, on its own, would be considered a notable achievement for an ordinary human being.

Fabrice Bellard deserves some kind of superhuman lifetime achievement award.

Source: [https://bellard.org](https://bellard.org)

<comment><USER3> Agree. It's also a message to the rest of us that we are likely capable of a lot more than we think.

<comment><USER4> Agree. It's also an - involuntary - message to the rest of us that we are likely capable of a lot less than he is.

</comment></comment></comment><comment><USER5> And this is why Fabrice Bellard is so often cited as an example of a 10x programmer: his relatively simple LSTM-based neural net compressor is 10x faster than one of the more complex state of the art algorithms while delivering comparable compression ratios.

<comment><USER6> Where is the reference to the 10X improvement? As in, which benchmark are you comparing against? Thanks!

<comment><USER7> As in "one Fabrice Bellard is worth 10 or more average programmers".

<comment><USER6> I mean, regarding algorithm speed.

From the conclusion:

"We presented a practical implementation of an LSTM based lossless compressor. Although it is slow, its description is simple and the memory consumption is reasonable compared to compressors giving a similar compression ratio. It would greatly benefit from a dedicated hardware implementation."

I only skimmed through the paper, but looks to me like this might be a 10X improvement over other LSTM compression methods, not state-of-the-art compression.

That said, I'm far from being an expert in compression and was hoping from someone in HN to explain how relevant this is in their discipline.

<comment><USER8> The comment you are replying to was trying to explain the "10X programmer" idea. Nowhere was it claimed that the algorithm would have a 10X performance improvement.

<comment><USER6> No, I meant this comment: "His relatively simple LSTM-based neural net compressor is 10x faster than one of the more complex state of the art algorithms"

</comment></comment></comment></comment></comment></comment><comment><USER9> Interesting to see another Fabrice project, and great to see compression performance on par with the best available, but unfortunately it still falls short of what's necessary to win this prize:

[http://prize.hutter1.net/index.htm](http://prize.hutter1.net/index.htm)

(I've computed that 14,826,395 bytes is required to become the next winner. CMIX comes close, but its huge memory consumption disqualifies it.)

</comment><comment><USER10> Note that this uses CPU only to run the neural network.

Accelerators are now the norm for this sort of stuff, hence why this is so slow.

Also note this is closed source. Unusual for bellard, and also unusual for this sort of research.

<comment><USER11> > Also note this is closed source. Unusual for bellard

Not wholly unusual for Bellard. E.g., [https://bellard.org/lte/](https://bellard.org/lte/)

</comment></comment><comment><USER12> Could someone explain how these are guaranteed to be lossless?

<comment><USER13> Arithmetic encoding [https://en.wikipedia.org/wiki/Arithmetic_encoding](https://en.wikipedia.org/wiki/Arithmetic_encoding) . The way I would put it is: the statistical model does its best to predict the next bits, assigning short bit strings to what it thinks is likely to come next and long bit strings to less likely next bits, and if it is indeed right, only the short bitstrings need to be emitted; if it's wrong, more long bit strings must be spent to correct it and emit the exact right bitstring. (Like using shorthand with lots of convenient shortcuts, and then falling back to painfully writing everything out explicitly.) So, you can use imperfect lossy probabilistic models, while still getting lossless compression.

</comment></comment><comment><USER14> I wish I could ask Fabrice how he structure his day/time and balances life and family.

Edit: typo

</comment><comment><USER15> Why did he not used Time Convolutional Networks?

[1] [https://openreview.net/pdf?id=rk8wKk-R-](https://openreview.net/pdf?id=rk8wKk-R-)

[1] shows that TCN may outperform LSTM on tasks that really needs memory.

<comment><USER16> Because LSTM's are proven over time to be industry grade, and are not latest- greatest-but-no-one-has-really-reproduced-the-results-yet.

A paper with inductive results is just a first step in a really long process until ideas are commonplace accepted.

<comment><USER15> For every time you say "LSTM is industry grade" I would point you to large companies (Google-level) which train their acoustic models with TCN architectures.

He used Transformer, why not TCN?</comment></comment></comment>


5 large companies that use Perl - <AUTHOR> http://blog.builtinperl.com/post/5-large-companies-that-use-perl <comment><USER2> I've heard of one of them.</comment>


Startup Idea: A "Kickstarter" Script/Plugin - <AUTHOR>

App.net built a Kickstarter-esque script to crowdfund, so I was thinking someone could build a plugin/script to allow people to raise funds on their own site for their product. Thoughts? <comment><USER2> <http://ignitiondeck.com/id/>

<comment><USER3> Thanks for the mention Dylan.

Just a little background: We spent months looking for a solution like this, and when we didn't find it, decided to make it. Still in beta, but have big plans in the space.</comment></comment>


Google bets $20,000 you can't hack Chrome - <AUTHOR> http://motherboard.tv/2011/2/4/google-offering-20-000-to-anyone-who-can-hack-chrome--2

<comment><USER2> Kudos to Google for this. It's the exact opposite approach to security than that used with Explorer. Instead of closed code and trying to hide flaws, they open the code and offer rewards to those who find them. In the long run, this will lead to better and more secure code.</comment>


I hate Matlab: How an IDE, a language, and a mentality harm - <AUTHOR> http://neuroplausible.com/matlab <comment><USER2> Funny, I agree with the structure of what his argument and the limitations of Matlab but disagree with the pedagogical conclusions. I learned to drive on automatic transmission cars, and found it a good stepping-stone to learning how to use a manual transmission. I just had to buy a cheap used car to make it happen. Likewise, I started coding seriously using Matlab (well, IDL even before that.) I'm slowly transitioning to Python and (command line) Julia, I think this would be much more frustrating if it weren't for the experience with Matlab. Even reading the occasional block of C code is easier after the Matlab experience.</comment>


Unit Cell Diamond – 1mm/hour diamond film - <AUTHOR> https://unitcelldiamond.com/ <comment><USER2> rough calculations, but an iPhone 5 screen's area is 4656mm. this process makes 1mm/hour. So, does that mean it'd take ~191 days to make 1 screen? have i missed something major?

<comment><USER3> I think the 1mm/hour refers to accretion depth-wise across the entire existing diamond surface area. So conceivably (but probably subject to other factors that would complicate matters) if you started with a .001 mm thick diamond slice with 4656 mm^2 surface area and applied this process on one side then it would take 3 hours to get a 3mm-thick diamond slice.

<comment><USER2> okay, that makes more sense. thanks for the explanation!</comment></comment></comment>


An Attempt at Making Reading Fun - <AUTHOR> http://klinskyc.github.com/posts/The-Experiment/

<comment><USER2> > An Attempt at Making Reading Fun

Try "A way to make reading fun".

> In recent years I've been reading more and more news online and less and > less [sic] books.

You've been reading smaller books, or books with smaller typefaces? Or did you mean to say _fewer_ books? If so, then your sentence is self-referential.

<http://en.wikipedia.org/wiki/Fewer_vs._less>

> The enjoyment of inputting [sic] the finished books ...

s/inputting/entering/

> I'm interested if this same method works for anyone else.

Try "I'm curious to know whether this method ..."

<comment><AUTHOR> Duly noted and fixed. Thanks for the corrections.</comment></comment>


Why Should I Care What Color the Bikeshed Is? (1999) - <AUTHOR> http://white.bikeshed.com/

<comment><USER2> Modern communication is broken. We think we're just getting tools to be reachable by people of interest. Instead we're just giving the world a way of spamming us. Constantly.

Phones are the worst. Excluding the few times I'm actually expecting a call, every time my phone rings it inevitably interrupts something I am doing. It's almost never urgent. I am basically spending hundreds (if not thousands by now) of dollars to get a mobile device to allow the world to interrupt me at any time. And there's very little I can do about it.

* I often ignore it on purpose, set it to "silent" mode or simply refuse answering (an act now commonly seen as _rude_ by most). 9 times out of 10 I get the notoriously useless voicemail: "Hey it's me, call me back when you can".

* Last year I was victim of what can only be described as a phone spam technique from my ISP. In the course of 10 days, I received over 25 calls (most of which I intentionally refused to answer) from commercial representative trying to sell me an "upgrade" to my subscription. They were calling from a private number. Short of completely changing ISPs (particularly difficult to do in my area) or going through legal channels, there was nothing I can do to protect myself from the spam attack. The phone system didn't let me, by design.

* In my home country, SMS spamming is beyond insane. I mean 5 to 10 daily promotional SMS. That's me paying money to get something in my pocket that vibrates to give me advertisements, 5 to 10 times a day.

Email, and online communication, are a _little bit_ better in that aspect. You usually have an inbox that you can check at your convenience. Unfortunately, even these inboxes get flooded with volumes of info you don't necessarily want in there. There's a very particular kind of spam, the one that doesn't (and shouldn't) be removed by commercial filters, that pollute our stream of info. The flooded mailing-lists mentioned in PHK's email is an example. The photo album of my dad's second cousin's niece is another one.

On top of all this, modern trend is to add "instant notifications" to your phone, so that even email (or Facebook/Twitter/your-favorite-website messages) will interrupt you several times a day.

And looking forward (a bit), it does seem that phones and emails are going to be outdated at some point. The current trend is to have these "Feeds". I distinctly remember closing my Facebook account, the day they switched the landing page from my wall to my "Feed". All of a sudden, Facebook was not a tool I use anymore, it's a data stream I consume.

I guess what I'm trying to say is that unsolicited interruptions irritate me. They irritate everyone when done physically. To me a phone ring is equivalent to someone poking me on the shoulder when I'm in the middle of something.

I had never read the Bikeshed email, although I was familiar with the story. I always heard it in the context of project management "we didn't deliver on time because we lost our time _bikeshedding_ ". It's actually about spamming and unsolicited communication. Don't pollute my stream of info.

And get off my lawn.

<comment><USER3> It's actually becoming quite common for people in their 20-30's to dislike the phone.

I personally love getting phone calls. Luckily the crackdown on spam calling seems to have worked in the U.S., so it's always family or friends. It's a great pick-me-up ("someone was thinking of me!"). Several of my friends don't find it charming, however...

<comment><USER4> I'm in my 20s and I hate talking on the phone.

However, I have what some people call an "old generation" feel for it. It's not that I would rather text than talk on the phone, it's that I would rather not interact unless it's in person.

I text only one person frequently - my significant other, throughout the day. Sometimes family and friends text me, but otherwise, I don't reach out that way much.

I do use the phone for any communication that is more sensitive, lengthier, more important or more personal than texting, however, and I prefer it to texting. It's just that, where possible, it doesn't match up to seeing a person's face too.

EDIT: I probably seem really introverted...ironically, I'm not! I'm a life-of- the-party jokester kind of personality in social contexts. But isn't it annoying when you're texting and someone misreads the tone? Or when you're making faces or elaborate hand gestures on the phone and the other person can't see it?

<comment><USER5> Of course phone conversation is inferior to talking on the phone, but I wouldn't say I hate talking on the phone. I already know that when I'm talking on the phone, it is either a) to arrange meeting face to face or b) because face to face is not an option.

</comment></comment></comment></comment><comment><USER6> For those who like subtle jokes explained, the URL accepts any color as the subdomain. Everyone can have this particular bikeshed in any color they want.

<comment><USER7> It accepts any word and also nothing. Just tried 'mongol', 'restive', 'philharmonic' and '27b-stroke-6'.

Presumably the Mongols liked bureaucracy, since the colours were the same for those two...

</comment></comment><comment><USER8> Great piece! A bit OT, but the black text on grey bg was VERY hard to read.

<comment><USER9> You can change the background color by changing the url.

[http://pink.bikeshed.com/](http://pink.bikeshed.com/)

</comment></comment><comment><USER10> Brett Glass is the patron saint of bikeshedding.

</comment><comment><USER11> phk is awesome, he also wrote the beerware license [1]. lassez-faire

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

</comment><comment><AUTHOR> would a mod mind changing the URL to [http://white.bikeshed.com/](http://white.bikeshed.com/) ? It's the same content but much easier to read (sorry about that...)

<comment><USER12> We should go with [http://black.bikeshed.com](http://black.bikeshed.com) instead. The black background will save power on devices with OLED displays.

<comment><USER13> [http://grey.bikeshed.com/](http://grey.bikeshed.com/) is a good middle ground and definitely better than the linked.

<comment><USER14> You're nuts. OBVIOUSLY [http://orange.bikeshed.com](http://orange.bikeshed.com) is the correct URL for reading this on HN.

<comment><USER15> [http://ff6600.bikeshed.com/](http://ff6600.bikeshed.com/) to be precise.

I'm impressed with how much effort he put into his dynamic subdomain parser.

More obscure colors work as well:

[http://fuschia.bikeshed.com/](http://fuschia.bikeshed.com/) [http://limegreen.bikeshed.com/](http://limegreen.bikeshed.com/)

<comment><USER13> He does NO parsing; the subdomain is literally applied to the _< body bgcolor="{{ subdomain }}">_. [http://libria.bikeshed.com/](http://libria.bikeshed.com/) [http://thezilch.bikeshed.com/](http://thezilch.bikeshed.com/)

<comment><USER16> If you look at the page source he actually does parse the color to determine if the text should be white or black.

<comment><USER13> To be pedantic, he does NO parsing _of the subdomain_; he "parses" the computed-style color designated by the browser's parser.

<comment><USER17> I wrote that javascript, and I like my bikeshed painted pedantic ([http://pedantic.bikeshed.com/](http://pedantic.bikeshed.com/))

Happy everyone is enjoying it!

<comment><USER13> It's too bad the original post and no comment links to [http://bikeshed.bikeshed.com/](http://bikeshed.bikeshed.com/). The best kind of right.

NOTE: RELATED: _/ bikeshed_ in Google Hangout takes on a similar role.</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment>


Ask HN: Exists Open Source FPGA Tool Chain? - <AUTHOR>

Is there any FPGA (slightly expensive is okay) that has an completely open source tool chain? I'm not a big GPL/BSD fanatic per say, but when things break / things need to be optimized / tweaked, I like having the source code around (rather than banging my head wondering what's happening in the black box).<p>Thanks! <comment><USER2> I actually don't have an answer for you, but perhaps you could ask around on the forum at OpenCores:

<http://www.opencores.org/>

(It's kind of like SourceForge, but for hardware designs.)

<comment><AUTHOR> Great thanks, this is even better (a community rather than just a yes/no answer). :-)

</comment></comment><comment><USER3> I do have an answer for you: basically, no. A huge part of the development work done in the FPGA field is in the software - the hardware is comparatively easy.

If you're complaining about the quality of the official software (especially for Xilinx or Altera) - you're far from alone. Unfortunately, the open-source alternatives are nowhere near the official tools in terms of functionality.

</comment><comment><USER4> Writing a synthesis tool is like writing a high-level language compiler, fairly difficult. On top of that, synthesis (by definition) targets a specific technology. This is like targeting different CPU architectures and platforms with said compiler except that the targets are not publicly documented.

Even with so many OSS developers in this world, we only have one decent compiler that targets multiple platforms - GCC, and even that has lots of issues. The number of FPGA developers is far smaller and most of us would rather focus on the hardware design, than write software tools.

So, if you want to see a good FPGA tool chain, you would need to convince enough FPGA developers with software skills and enough software developers with hardware skills, to put an effort behind actually making it work.

</comment><comment><USER5> There's some useful code for reading and modifying Xilinx bitstream files up here: <http://www.ulogic.org/trac>

if you want to learn more bout the Xilinx chip internals you can learn the XDL format: with the command line ISE tools you can use the flag -ncd2xdl to convert a compiled NCD design to XDL.

</comment><comment><USER6> icarus verilog can get you as far as synthesis. But, like duskwuff mentioned, the open-source alternatives are nowhere near the official tools in terms of functionality.

</comment><comment><USER7> I wish. FPGA tools, without exception, suck. No C programmer would put up with compilers and linkers that work the way FPGA synthesis tools do. Open-source efforts could only improve things.

FPGA vendors don't document the details needed to configure their chips at the nuts-and-bolts level, so any FOSS toolchain would have to rely on a sustained reverse engineering effort.

<comment><AUTHOR> What's preventing the reverse engineering effort? Legality issues? Difficulty? Time? (I've heard stories about samba, and it seems like if MS protocols can be reverse engineered, then things that have to obey the laws of physics couldn't be that much worse).

<comment><USER7> I'm not sure. Probably the relatively obscure nature of the task and the manufacturers' relatively short design-life cycles discourage any sort of heroics.</comment></comment></comment>


We're bored of cold calls from recruiters (try the form and see the source) - <AUTHOR> http://www.recruitmentcheck.com/

<comment><USER2> I know this was posted for your benefit, but I want to thank you on behalf of everyone who's been confronted with a similar form when applying for a job.

There is almost nothing as annoying as having to jump through hoops when applying for a recruiter. If you can't be bothered to at least scan my application yourself, I hardly think you could be bothered to find me a decent position.

</comment><comment><USER3> I agree recruiters are a waste of time and money for startups, and it is particularly annoying if you write on your job listings "no recruiters please" and they still contact you.

But there is definitely a need for recruiters in the wider industry (especially to help big firms that are not in the technology industry but need programmers, eg finance, insurance, healthcare etc. Good programmers are hardly banging on their door and usually the firms have to chase the talent.)

My point is, sure, send pesky recruiters who bother about positions that clearly state "no recruiters" to that form. But don't try to waste their time just because they contacted you out of the blue. There's nothing wrong or illegal about a company to cold-calling/emailing another about potential services and so just politely say "no thank you, we don't pay recruiter fees" and move on.

<comment><USER4> You're right in principle, but by this comment strike me as someone who hasn't fielded a lot of cold calls from recruiters. Cold calling is fine. Boiler room hard sales tactics on the other hand aren't. Recruiting as I see it practiced in the real world is pure inside sales, rewarding mostly the kind of people who specialize in being hard to get off the phone.

They're the only people I've had to literally hang the phone up on in the last 12 months, and we get debt collection calls for the former owner of our house every other day.

<comment><USER3> Actually, I have fielded my fair share of recruiter calls.

As I said in my parent post "we don't pay recruiter fees - never have, never will" is usually enough. You might have to say it twice and leave them hanging but it is a pretty direct response.

It's not saying "no I don't want to use a recruiter" - which creates the opportunity to try to change your mind. It is saying I don't pay the fees, which is a fact and leaves them little room to argue. I can sit there and agree with the virtues of a recruiter but then I say 'yeah but I don't pay the fees'. And we're done.

From a sales funnel perspective it positions me as not being a prospect because I'm not in the market to make the purchase/expenditure.

</comment></comment></comment><comment><USER5> This question was my favourite:

"Has anyone really been far as decided to use even go want to do look more like?"

<comment><USER6> I assume some connection? [http://failbook.failblog.org/2011/01/26/funny- facebook-fails...](http://failbook.failblog.org/2011/01/26/funny-facebook- fails-i-has-really-been/)

Or is this some grand internet meme I'm missing out on? (I wouldn't say I've been _missing_ it.)

<comment><USER7> I think it's a 4chan meme.

</comment></comment></comment><comment><USER8> The tortoise question was vaguely familiar. Where is it from?

<comment><AUTHOR> [http://www.urbandictionary.com/define.php?term=Voight- Kampff...](http://www.urbandictionary.com/define.php?term=Voight- Kampff%20machine)

<comment><USER8> Blade Runner! Of course! Thanks.

</comment></comment></comment><comment><USER9> Funny, quick question though why are you tracking every input value? just out of curiosity? I just kept typing in random letters can't see why it would be useful other than maybe the occasional laugh.

<comment><AUTHOR> The occasional laugh is all (and to see if it was possible - turns out it's not really, at least the way it tries to do it). It's quite broken (see note in code about how I'm not really a developer).

</comment></comment><comment><USER10> Two thumbs way up, love it.

Wouldn't mind a way to slap a company name on there and reuse it. :P

<comment><AUTHOR> I'll have a look at getting it on a public github, but in the meantime, it's just an index.html and a few js files. Feel free to nick it (just give distilled.co.uk / hiremarshal.com a link in appreciation).

<comment><USER10> >feel free to nick it

And this, ladies and gents, was the original intent of BSD licensing.

:) thanks!</comment></comment></comment>


Ask HN: Challenges of remote software engineering during Covid-19? - <AUTHOR> I've never been on a remote software engineering team and I'm about to start a job at a new company in a couple weeks, completely remotely thanks to COVID-19.<p>What are some challenges of remote software engineering that I should prepare for? <comment><USER2> I think working from home can sometimes increase distractions. Do what you can to create a 'workspace' where you can stay focused and comfortable!

</comment><comment><USER3> I think one of the most challenges are focusing on work considering all the distractions like family, surroundings.

</comment><comment><USER4> I've been working remote for a long time (both as a team member and as a founder, exec or team lead), hopefully you are joining a team that has at least done some remote work prior. The hardest time is when the team has never worked remote and has the majority of people working in an office together and you are solo or maybe 1 of just a couple of remote engineers. The danger there is how much communication you miss out on in those cases, which leads to resentment and struggles.

But some quick points, just my opinion here are things I'd recommend.

1\. Make sure you talk to the team daily, at least one or two people. Even if it isn't necessarily about some specific work issue, just reach out to talk so they feel your presence.

2\. Make sure you have defined work that you can accomplish in short timeframes at first. This helps build trust with the team. They'll most likely want that at first too, but in case they give you a task that might take 2 weeks, make sure you are daily giving updates even if they don't ask you to. Updates can even be in the form of checking in code daily with good commit messages. This is helpful because even if your direct manager or team knows you are doing well, if the team dynamics change or your manager changes there is demonstrable evidence you are productive.

3\. Setup a space for you to work at home. You need a defined workspace and you need to make sure anyone who lives with you respects that when you are there at your computer or whatever, you are working and not to be needlessly interrupted. I really can't express how important this becomes. I have a wife and 2 kids still in the house, I have a dedicated office and close my door when I need to. This is for both the family and myself, that way they can carry on with normal life and not worry about bothering me, but it also means I don't feel distracted or interrupted all day long which can build resentment. With the kids out of school right now cause of Covid-19 it definitely can add to a bit of the chaos but having the defined space helps.

4\. Define reasonable work hours and do not keep working all the time. It is so easy to fall into over working simply because you think of a solution at 8pm and are like damn let me just try it out etc. I still do that sometimes but if I do I make sure I take that time back the next day or as soon as possible. Keep a schedule. I like to do something in the morning outside the house before I start working, just helps me get focused.

5\. Over communicate, if you think you are communicating well, you aren't communicating enough. I personally have struggled at times with this myself, even recently.

6\. Make sure you do some of the calls as video so that you get "face time" and you are not just some random voice on the other end of a phone call.

I've posted other notes on remote work a few times recently on HN, you can always check the prior posts because many people had good advice.</comment>


Windows 7 new processor patch - <AUTHOR> https://github.com/zeffy/kb4012218-19 <comment><USER2> Windows 7 is going to be 8 years old this year -- while this does seem like a dark upgrade pattern, maybe they're just trying to avoid another ie6?</comment>


Towards a more perfect link underline - <AUTHOR> http://www.acusti.ca/blog/2014/11/28/towards-a-more-perfect-link-underline/ <comment><USER2> I _really_ do not like this.

It breaks the assumption (wrong word? Intuitive guess?) that one underline == one link.

Which means that every time I look at the link I do a doubletake trying to figure out why there are 6+ links in that word.

<comment><USER3> Maybe there's something wrong with your browser. The underline style is only interrupted slightly for descenders. It continues through spaces and other punctuation like it does normally. It looks _nothing_ like a phrase with each word underlined individually.

<comment><USER4> There's nothing wrong with their browser, they are talking about a single word, not phrase, being composed of multiple links.

As HN does not support markup I'll attempt to demonstrate with underlines. Imagine that each slice seperated by underlines is a seperate link.

_Su_p_ercalifra_g_alisticex_p_ialdocious_

<comment><USER3> The only characters that introduce separation in a standard typeface are the ones with descenders: q, y, p, g, j, and some punctuation characters.

I have no idea why you think i_f, r_a, c_e, or almost any of the other pairs of letters in your example would have a discontinuous underline.

<comment><USER4> Edited, better?

They are saying that currently if there is a break in the underline it is understood that the two underlined portions of the word are two different links.

</comment></comment></comment></comment></comment><comment><USER5> another recent blog post on this topic with some nice examples: [http://eager.io/blog/smarter-link-underlines/](http://eager.io/blog/smarter- link-underlines/)

<comment><AUTHOR> Beautifully illustrated post! Thanks for sharing.

</comment></comment><comment><USER6> I still prefer Wired's transparent ones

see examples [http://www.wired.com/2014/11/2014-physics-gift- guide/](http://www.wired.com/2014/11/2014-physics-gift-guide/)

</comment><comment><USER7> I actually _do_ find this to be an improvement for underlining of text as a visual style, such as for emphasis or headings. (Which you should never do on the web, specifically because "underline" means "link" and nothing else; however, in non-hypertext, underlining can work as a visual style.)

However, as a style for _links_ , it has a sufficiently different style that I find it distracting, both from . appearing far too faint to stand out, and from introducing breaks in the line. It isn't _nearly_ as bad as sites that hide link underlines entirely, however.

</comment><comment><USER8> [http://research.microsoft.com/en- us/um/people/lamport/pubs/b...](http://research.microsoft.com/en- us/um/people/lamport/pubs/buridan.pdf)

The whole premise of this paper about Buridan's ass principle is wrong. That is to say, its assumption of continuity. A simple strategy of "always go to the right after you haven't made a firm decision after X time" leads to a discontinuous function, violating their assumption. It is trivially possible for strategies to lead to discontinuous decision functions, undermining the whole idea.

The author tries to report that "you aren't sure if you've decided or not after X time", but doesn't go very deeply into it, and clings to the assumption of continuity. In fact, one can always be sure whether they've made a FIRM decision or not by a certain time, in the same way the author has X_t(1) = 1 for all t.

<comment><USER9> I think this may belong in a different submission.

</comment></comment><comment><USER10> Anyone whose website looks like this [1] has no business complaining about underlines.

[1] [http://i.imgur.com/Y1MAsHt.png](http://i.imgur.com/Y1MAsHt.png)

<comment><AUTHOR> Sorry if I gave the impression I was complaining about underlines.

My personal website is a playground for ideas; it is not a product anyone payed me to build, and it is not intended to sell anything. The fixed semi- transparent nav is an attempt to balance my annoyance with fixed navs that break page down/page up functionality with the utility of having quick access to useful links (use case being "interesting post, who is this person?" or "what else have they done?"). I don't love it, and it's pretty bad at mobile widths, but it has the distinct advantage of preventing readers from losing their place when paging. Another commenter picked up on that: [https://news.ycombinator.com/item?id=8679336](https://news.ycombinator.com/item?id=8679336)

Anyways, I appreciate the criticism. Though I heartily disagree that as a result of that expirement, I cannot write about improving text underlining on the web.

<comment><USER10> A floating sidebar would still be mildly annoying, but much better than the awful header nonsense. The New York Times has plenty of money to throw at web designers, but still breaks my space bar (wiggling the pointer around after hitting SPC mostly makes it work). Please don't encourage this terrible behaviour elsewhere.

</comment></comment></comment><comment><USER11> lgtm

I really like the selection color-change, but I'm not sold on the actual CSS :/

It's too bad line-height doesn't work so great, because that _feels_ like a great solution.

<comment><AUTHOR> Do you mean border bottom in conjunction with reduced line-height as a solution for link underlines? Or something else?

<comment><USER11> Yes, I meant border-bottom in conjunction with line-height. It feels more connected to the idea of "underline" than adding a line-gradient.

</comment></comment></comment><comment><USER12> I find the "regular" underline a LOT more readable and ensure im seeing an hyperlink... IMO readability should always trump "being pretty".

<comment><USER13> Especially since "pretty" often means tacky or garish. I see alot of comments in here where people like the look of the thing but don't like the gaps in the context of something you're going to click on. Me, I just don't like the look. itself. For some reason, my eye is seeing the text as being "in front" of the underline, instead of the desired effect which would be the underline getting out of the text's way.

</comment></comment><comment><USER14> Just seems a little nit-picky to me. I can't help thinking there are more important things to implement than little gaps around letter descenders and configurable line thickness in text underlines...

<comment><USER3> Just because there are more important things to do worry about than one particular thing doesn't mean no one on earth should worry about that thing until everything else is fixed.

I really need to vacuum my car, but maybe I should hold off until we resolve the Ebola outbreak?

<comment><USER14> I'm not sure that example is the same, I'd say a better example would be "I really need to fix the giant hole in my roof, but maybe I should hold off until I find the perfect position of the pillows on my bed"

EDIT: But sure, the fact that there are other things to do doesn't mean no one should worry about anything else. I just feel like this is one of those things that doesn't really make any meaningful change, add any value, etc. Like I said, just seems like nit-picking. To each their own.</comment></comment></comment>


Learning Parser Combinators with Rust - <AUTHOR> https://bodil.lol/parser-combinators/ <comment><USER2> >> The novice programmer will ask, "what is a parser?"

>> The intermediate programmer will say, "that's easy, I'll write a regular expression."

>> The master programmer will say, "stand back, I know lex and yacc."

The Prolog programmer will write a Definite Clause Grammar [1], which is both a grammar and a parser, two-in-one. So you only have to do the easy and fun bit of writing a parser, which is defining the grammar.

Leaves plenty of time to get online and brag about the awesome power of Prolog or get embroiled in flamewars with functional programming folks [2].

______________

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

[2] Actually, DCGs are kiiind of like parser combinators. Ish. In the sense that they're executable grammars. But in Prolog you can run your programs backwards so your DCG is both a recogniser _and_ a generator.

<comment><USER3> This is beside your point, but I've found PEG to be a nice step up in usability from lex&yacc, as again, you only have to write one grammar definition.

Wiki: [https://en.wikipedia.org/wiki/Parsing_expression_grammar](https://en.wikipedia.org/wiki/Parsing_expression_grammar) Example Implementation: [https://pegjs.org/](https://pegjs.org/)

<comment><USER4> Yep, PEGs are seriously underutilized. Here's a nice introduction using LPeg: [http://leafo.net/guides/parsing-expression- grammars.html](http://leafo.net/guides/parsing-expression-grammars.html)

</comment></comment></comment><comment><USER5> On the reddit discussion of this [0], someone mentioned using a type of

fn parse(&self, input: &mut &str) -> Option<Output>

instead of the article's

fn parse(&self, input: &'a str) -> Result<(&'a str, Output), &'a str>

for composability. I found the article fascinating and plan on going back to see what an xml parsing implementation based on the former would act like.

[0]: [https://www.reddit.com/r/rust/comments/bepi63/learning_parse...](https://www.reddit.com/r/rust/comments/bepi63/learning_parser_combinators_with_rust/)

<comment><USER6> This might be the first time I've seen a good use for &mut &T, very cool!

For those of you not well-versed in Rust, this is a mutable pointer to an immutable string. This means that you can change the part of the string you're pointing at, but you can't change the underlying string itself.

<comment><USER7> What does that mean? Is it equivalent to the pointer starting out (say) pointing to the first letter of the string, but being able to "walk"/iterate along the length of the string?

<comment><USER6> EDIT: adjusted the diagram to make it more clear that we're not mutating the &str

Here's some string data, in memory somewhere:

        Hello world

A `&str` is a pointer, length combo. The pointer points to the start of the string, the length says how many bytes there are:

        (p, 11)
         |
          \
           |
           V
           Hello world

     A `&mut T` is a pointer, so a `&mut &str` looks like this:

         p
         |
         V
        (p, 11)
         |
          \
           |
           V
           Hello world

     Since it's mutable, this means we can re-assign what it points to, and create a new `&str` to the later part of the string:

         p
         \</comment></comment></comment></comment><comment>\
                 V
        (p, 11) (p, 5)
         |       |
          \      |
           |     |
           V     V
           Hello world

     Since the inner &str is immutable, we can't change the underling string.

     Hope that helps!

<comment><USER8> So it's basically like a Span in C# if I understood correctly?

<comment><USER6> I am not familiar with the in-memory representation of Slice, but conceptually at least, yes. We call &str a "string slice" and &[T] more generally a "slice".

EDIT: apparently you just edited from Slice to Span, reading [https://msdn.microsoft.com/en- us/magazine/mt814808.aspx](https://msdn.microsoft.com/en- us/magazine/mt814808.aspx)

> First, Span<T> is a value type containing a ref and a length, defined > approximately as follows:

Yep, exactly the same as Span<T> then.

<comment><USER8> Sorry, I wrote Slice instead of Span in the original comment... Slice is the method that returns a Span that is the equivalent of this rust concept as far as I can tell. At some point in the future I'll need to delve in rust, it's quite fascinating, but sadly I don't have much time nowadays :(

<comment><USER6> It's all good, on both counts! We'll still be around when you find the time :)

</comment></comment></comment></comment></comment><comment><USER9> This was such a wonderful read! I've been getting into Rust recently, and the sections on dealing with challenges that are specific to Rust were particularly useful. The way they created a new trait to turn `Fn(&str) -> Result<(&str, T), &str>` into `Parser<T>` was insightful, and the discussion of how they dealt with the growing sizes of types was something that I can imagine myself running into in the future.

Most importantly though, when they started writing `and_then`, my eyes lit up and I said "It's a Monad!" I think this is the first time I've really identified a Monad out in the wild, so I enjoyed that immensely.

</comment><comment><USER10> It doesn't _feel_ very declarative in Rust. Personally, I'm finding it hard to see the intent (I haven't written a line of Rust in my life, so take that with a pinch of salt, but I am a polyglot programmer).

Really, Haskell's do notation is the big winner when it comes to parser combinators, as the direction of the flow of the parser is easy to follow, but also you can capture variables mid-flight for use later in the expression without obvious nested scope blocks.

It's possible to capture variables with `and_then` by the looks of it, but any suitably complex parser will start to end up quite an ugly mess of nested scopes.

I ported Haskell's Parsec to C# [1], it has LINQ which is similar to Haskell's Do notation. Simple parsers [2] are beautifully declarative, and even complex ones, like this floating point number parser [3], are trivial to follow.

[1] [https://github.com/louthy/language- ext](https://github.com/louthy/language-ext)

[2] [https://github.com/louthy/language- ext/blob/master/LanguageE...](https://github.com/louthy/language- ext/blob/master/LanguageExt.Parsec/Parsers/Prim.cs#L452)

[2] [https://github.com/louthy/language- ext/blob/master/LanguageE...](https://github.com/louthy/language- ext/blob/master/LanguageExt.Parsec/Parsers/Token.cs#L287)

<comment><USER11> There are libraries like nom: [https://lib.rs/crates/nom](https://lib.rs/crates/nom) or combine [https://github.com/Marwes/combine/blob/master/examples/date....](https://github.com/Marwes/combine/blob/master/examples/date.rs) that have more declarative-looking syntax. In TFA you intentionally get "raw Rust" to avoid syntax sugar obscuring what's going on.

</comment></comment><comment><USER12> Nice article. I finally gave Rust a recently. It's really interesting how new languages evolve, and what "deficiencies" they exert. The article for example uses closures, but it's currently impossible in stable Rust to accept a closure that itself accepts a closure as an argument (while you can easily rewrite the same pattern with structs). The borrow checker could still do better on suggesting fixes to common problems (otherwise it's actually quite elegant). What struck me while reading this was the use of assert_eq!(expected, actual), as I've mostly seen the other order. Sure enough I checked and the macro does not define the order. That's unfortunate, as testing against "fixed" "expected" outcome is very common, and leads to more friendly testing devx (which in general while supported out of the box isn't great).

On the other hand, Rust's IDE support, built-in linting, is seriously impressive.

<comment><USER6> We looked at the order for assert_eq, and couldn't find any real consensus. Large testing frameworks in a variety of languages use both orderings. So, we decided to not enforce a particular one.

<comment><USER13> That seems like an odd decision? It's like saying there is no consensus for which side of the road to drive on, so let's not pick one. Standardization is arbitrary but useful here.

<comment><USER14> How is it useful, since it has no observable effect? Equals is equals!

<comment><USER13> As many people pointed out, an expected value is not the same as the actual value. This affects error messages, which are important for ergonomics.

<comment><USER15> The downside to enforcing an order is the compiler cannot enforce an order so people absolutely will get it wrong and not notice until much later when the test breaks and they get really confused because the message is telling them the expected value is the actual value and vice versa.

<comment><USER16> We could have a macro like:

        test_eq!(expected=(<expr>), actual=(<expr>));

Where those "assignments" could be specified in either order.

Playground example: [https://play.rust- lang.org/?version=stable&mode=debug&editio...](https://play.rust- lang.org/?version=stable&mode=debug&edition=2018&gist=a4142e215dfb46ebfdab447ec22b6b95)

<comment><USER12> I really like this, not that I would want to write this every time, but because you could have a macro rule that doesn't specify expected/actual, for those rare cases where both sides are computed ("actual").

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER17> If someone wants to have a look at the code of a cutting-edge parser combinator framework with focus on features + usability, I'll plug this here (it's in Java)

[https://github.com/norswap/autumn4](https://github.com/norswap/autumn4)

WIP but 1.0.0 will land somewhere within the next two months, with a full user-guide (half of it is already written and available).

Constructive feedback welcome!

<comment><USER18> Honest question, why use parser combinators?

If I need to do it by hand I can write a recursive descent parser, but I never do it by hand any more, just break out lex/yacc or antlr.

So, what have I or anyone to gain by learning/using PCs? (I'm never against learning new stuff but I have so much to learn that adding something unnecessary to that would be just dumb).

TIA

<comment><USER19> Parser combinators aid in writing recursive descent parsers, they are not something alien. You can maybe consider it a design pattern which eliminates redundancies and makes it easier to construct an AST.

</comment></comment></comment><comment><USER20> Okay, I am interested in this topic. Does anyone know of any good resources for exploring parser combinators further?

<comment><USER21> I like [http://www.cs.nott.ac.uk/~pszgmh/monparsing.pdf](http://www.cs.nott.ac.uk/~pszgmh/monparsing.pdf)

</comment></comment><comment><USER22> What is the class of languages that can be parsed with such parsers, in the sense of [1]?

[1] [https://en.wikipedia.org/wiki/Context- free_grammar#Subclasse...](https://en.wikipedia.org/wiki/Context- free_grammar#Subclasses)

<comment><USER23> It's basically a recursive-descent parser, which means LL(k)-ish. The "-ish" is because you can use other tricks instead of straightforward recursive- descent (expression parsing is a common example of where you might want to do so), but the basic combinator concept itself is LL(k).

</comment></comment><comment><USER24> [https://news.ycombinator.com/item?id=19694793](https://news.ycombinator.com/item?id=19694793)

</comment><comment><USER25> nice read; Hi I also wrote a SQL dump parser using rust here the code.

> [https://github.com/ooooak/sql-split](https://github.com/ooooak/sql-split)

</comment><comment><USER21> I don't like Rust for this purposes. It doesn't have higher-kinded types and thus no applicatives or monads, which sort of misses the point.

I also object to the idea that parser combinators are an alternative to parser generators. They're each useful in different scenarios. But for something like XML the parser combinators will be slower.

I'd also be curious to see how the efficiency of parser combinators is affected by the absence of laziness in Rust. I seem to recall that laziness makes the analysis more complicated than you'd expect, but I need to find a source...

<comment><USER26> > I don't like Rust for this purposes. It doesn't have higher-kinded types and > thus no applicatives or monads, which sort of misses the point.

Having used parser combinators in Rust and Haskell (combine and attoparsec, respectively), I've found that even without applicatives, parser combinators are pretty handy—they're a step above regexes, but a step below a parser generator.

> I'd also be curious to see how the efficiency of parser combinators is > affected by the absence of laziness in Rust. I seem to recall that laziness > makes the analysis more complicated than you'd expect, but I need to find a > source...

Same here, but I suspect that aggressive inlining might be pretty helpful.</comment></comment>


The 2015 predictions of mass layoffs at IBM were both wrong and right - <AUTHOR> http://staging.spectrum.ieee.org/view-from-the-valley/at-work/tech-careers/which-ibm-layoff-numbers-add-up <comment><USER2> The link only goes to a login screen.</comment>