Afl-fuzz: making up grammar with a dictionary in hand - <AUTHOR> http://lcamtuf.blogspot.com/2015/01/afl-fuzz-making-up-grammar-with.html <comment><USER2> It's interesting that our best "AI" is essentially a hacking tool. It's like we're _trying_ to build skynet here :)

I wonder if you could make something like Afl-fuzz but point it at your test cases, until it brute-forces some code that makes all your tests pass :) You can throw the syntax of all the modules it should be using at it.

While it might not be make as much sense as if you come up with code yourself, arguably everything humanity has done has been a result of evolutionary fuzzing and test cases.

<comment><USER3> > I wonder if you could make something like Afl-fuzz but point it at your test > cases, until it brute-forces some code that makes all your tests pass :)

Isn't that how genetic algorithms are supposed to work?

<comment><USER4> This might be computationally feasible in this lifetime for a simple app of sorts, but we are dealing with potentially an insane number of combinations that would have to be tried.

We still have trouble calculating all possible 20 character passwords.

<comment><USER2> You have considerably less trouble checking all 20-character passwords if you get to introspect on the program doing the checking though! (To see what character lets it advance to the following loop or otherwise changes its state; this is similar to a timing attack.)

Without doing that, btw, I think you understate the difficulty of "calculating all possible 20 character passwords." It's not just that we 'still have trouble' doing it. If you just take lowercase a-z (and hell, even exclude Q,A,Z,M, and Y so that it's the same on all major keyboard layouts) you still get 20^20=100,000,000,000,000,000,000,000,000 combinations i.e. 10^26. Which at 1000 gigatries per second leaves you with 10^14 seconds, i.e. 3 years. Hey, it's not so bad :)

If you add in upper and lowercase, 0-9, and these 32 characters, [https://kb.wisc.edu/page.php?id=4073](https://kb.wisc.edu/page.php?id=4073) you get 94^20 = 2e+39 possibilities.

That compares favorably with the number of grams in the whole solar system (something like 1.99E+33), including, obviously, the whole Earth, the sun, all the planets, etc. It's the number of grams in 1,000,000 of our solar systems. So don't expect us to start calculating all possible 20 character passwords anytime soon :)

</comment></comment></comment></comment><comment><USER5> Afl-fuzz is really amazing. The only thing that bums me out about it is that it is not as open as it could be. From AFL's documentation:

"PS. If you wish to submit raw code to be incorporated into the project, please be aware that the copyright on AFL is formally claimed by Google..."

I'm assuming that this would make forks unlikely or impossible?

<comment><USER6> IANAL, But from the readme [1], it's Apache Licensed, so fork away - just make sure you retain their copyright notices and follow the rest of the license.

-edit- In addition, the bottom of the README which you quoted just mentions the need to sign a CLA if you want your code pushed upstream. See the FSF page about why they require copyright assignment [2] for their projects for some background.

[1] [http://lcamtuf.coredump.cx/afl/README.txt](http://lcamtuf.coredump.cx/afl/README.txt) [2] [https://www.gnu.org/licenses/why- assign.html](https://www.gnu.org/licenses/why-assign.html)

<comment><USER7> Note that the Contributor License Agreement (CLA) and copyright assignment are rather different things. Google and the FSF have very different reasons for requiring their respective arrangements.

</comment></comment></comment><comment><USER8> Someone should combine AFL with an x86 code emulator. Sure, it'll be slow. But it'll be better than nothing. (And you'd be fuzzing the emulator at the same time!)

(An interesting alternative route would be to rewrite the binary in-place, using something like PEBIL.)

<comment><USER9> AFL already has support for using QEMU for blackbox binary instrumentation. The NixOS packages (maintained by me) automatically have it supported out of the box. There is also 3rd party support for using Dyninst to statically instrument binaries in place (which is faster than QEMU and looks more robust than PEBIL): [https://github.com/vrtadmin/moflow/tree/master/afl- dyninst](https://github.com/vrtadmin/moflow/tree/master/afl-dyninst)

</comment></comment><comment><USER10> I have not investigated this at all, but what would be necessary to get AFL to work on Windows?</comment>


NY Post: Break up Amazon before it does any more damage to America - <AUTHOR> https://nypost.com/2018/10/09/break-up-amazon-before-it-does-any-more-damage-to-america/ <comment><USER2> I was really hoping for something good to read, but this is just an ad for the book "The Four: The Hidden DNA of Amazon, Apple, Facebook, and Google". Author is mentioned/quoted no less than 18 times.</comment>


Amazon's $50 Fire tablet reviewed - <AUTHOR> http://arstechnica.com/gadgets/2015/10/amazons-50-fire-tablet-review-suprisingly-it-doesnt-suck/ <comment><USER2> $50 is absolutely insane. Still very excited about the thought of getting these devices to places like rural India, combined with things like Khan Academy Lite [0]

I don't want to be too optimistic about some inevitable miracle once you supply hardware and content, but in general these price levels are indications for what we can expect by 2020. Dirt cheap, ubiquitous devices capable of handling virtually all computing tasks you'd like say a 14 year old to do, with a rich second-hand market of devices pushing the price even lower.

And the energy requirements are ridiculously low. We've seen the latest iPads around 30 watthours, that's about 0.3 cents for a full (10 hour) charge at typical retail electricity prices, and this fire tablet looks to be about 1/3rd the battery size but more than 2/3rd the battery life, we're probably looking at about 0.015 cents ($0.00015) per hour of use. Tiny solar installations can be sufficient for this level of energy use. I'm hoping global, low-bandwidth internet that some have proposed in various forms (e.g. Google, FB) will not trail behind much.

I mean really, let's think about it. It's a quad core device with 1 gig of ram and gigabytes of storage (and SD-capable), with a screen, 7 hour battery, keyboard, speaker and connectivity... and with say a 3 year lifetime, it costs you 4 cents per day. In a few years, this level of tech becomes accessible to virtually everyone. We all expected it to happen of course, but still, think back to 2010 when the iPad was introduced at 10x the price ($500+), with a quarter the ram, a lower resolution and slower cpu. Yes it's subsidised a bit by the fact it tries to drive Amazon sales after purchase, but still. Who knows where we'll be in another five years.

[0] [https://learningequality.org/ka-lite/](https://learningequality.org/ka- lite/)

<comment><USER3> Not to be cynical, but doesn't matter how awesome and cheap these devices get as long as they are locked down and designed for consumption.

<comment><USER4> It looks like you can install custom android roms (eg cyanogenmod) on Amazon tablets (eg [https://download.cyanogenmod.org/?device=otterx](https://download.cyanogenmod.org/?device=otterx) \- see other Amazon devices in the sidebar too)

<comment><USER5> Any android ROM is still primarily built for consumption at the end of the day.

<comment><USER6> Why? Just because android is not optimal for coding you can't say it's primarily for cumpsomption.

Android is just as much for communications and learning. Quite decent for writing also with a bt keyboard.

</comment></comment></comment></comment></comment><comment><USER7> I'm not sure I'd want to use one of these as my primary tablet, but these look like excellent candidates for DIY projects that need a touchscreen interface, especially with the discount for buying 6 at a time.

For instance, I'm thinking of adding an in-home video intercom system by mounting a bunch of these on various walls around the house. Just hoping that someone figures out rooting to make the software side of creating a single- purpose tablet a bit easier.

<comment><USER8> I bought three of them. I use two as monitors for my home camera system, I have 6 IP cams and use Blue Iris software as DVR and web streamer. I created a web app I loaded on the tablets and they show a rotating view of each camera for 4 seconds before switching to the next, and if there is motion on a camera it'll switch and stay on that camera until the motion stops. The tablets are set to never sleep, but I use an app to automatically dim the screen at night. I have one mounted to the wall in my room, and one mounted on the wall next to the font door. They are cheap enough that if they die after a year or three, I'll just order more up.

<comment><USER9> That sounds pretty cool, what cameras do you use? Do you have the code for the web app available somewhere?

<comment><USER8> My cameras are all x264 HD IP cameras, I have 2x 720p Tenvis IPROBOT3s, 1x 720p Foscam C1, 1x 1080p Foscam C2, and 1x ELP 720p Mini IP camera.

The app I made is a webview wrapper based on this project [https://www.ipcamtalk.com/showthread.php/93-I-made-a- better-...](https://www.ipcamtalk.com/showthread.php/93-I-made-a-better- remote-live-view-page)

</comment></comment></comment></comment><comment><USER10> The problem for me is that I have seen Amazon tablets before, struggled to do basic tasks on them and wondered what the point is. So I will stick to standard Android when it comes to tablets and not even give this device a second glance. I wanted to _believe_ with the Amazon tablet before but I couldn't do it a second time. Notice they only have bargain price to compete on which is a bit sad as Amazon could do so much better. I just don't believe this is it.

<comment><USER11> Oddly, I have the exact same feeling when it comes to tablets in general. I struggle to play with them in the same way that I do my computer. And ultimately find myself back on my computer when I want to do anything other than read, listen to music, listen to book, or talk to someone.

I can see some ways that my Nexus 6 is a better device than my Fire. In large, it doesn't matter. My eInk reader is better for reading than either. And for being productive I need more than either can do.

<comment><USER12> >find myself back on my computer when I want to do anything other than read, listen to music, listen to book, or talk to someone.

Add video and I think you've pretty much described the bulk of what many people do with a computer. :-)

Other than planes (where I 1. spend way too much time and 2. find tablets are way more usable than laptops), I go back and forth on how much I use a tablet around the house. Ultimately, you do generally have to be fine with a tablet being enough better at media consumption than a computer that it's worth having an additional device that can't do everything the computer can do. I did buy a Chromebook earlier in the year to leave out on my dining room table and I have found myself using it for things that I was tending to use my iPad for.

(I also agree that for just reading text, an eInk reader is best.)

<comment><USER11> Apologies, I did not mean to imply that this makes tablets bad. Just that I have a hard time seeing what makes a stock android any better than my fire. In the consumption world, they are both about even. Newer of either is better than older.

<comment><USER12> >Apologies, I did not mean to imply that this makes tablets bad.

Oh, I didn't take it that way. I like my tablets but I do think there's sometimes pushed into roles that they aren't very good for. (In general, I don't think they're a great fit for most secondary school educational purposes for example.)

</comment></comment></comment></comment></comment><comment><USER13> In case anyone else is searching for whether or not one could reflash with open source firmware and run debian, here's what I found:

[http://forum.xda-developers.com/fire-hd/general/how-to- upgra...](http://forum.xda-developers.com/fire-hd/general/how-to-upgrade- rooted-developers-t3230145)

Short answer : It is non-trivial.

<comment><USER14> Wrong tablet/forum link I think. See: [http://forum.xda-developers.com/amazon- fire](http://forum.xda-developers.com/amazon-fire) (situation is not much better).

<comment><USER15> Real shame there's no root access. I understand what Amazon is doing - but if love to have turned these into some glorified smart displays.

<comment><USER16> Exactly what I was thinking. Would have loved to use one of these for a monitor on a raspberry pi.

</comment></comment></comment></comment><comment><USER17> I don't understand why Amazon forked Android beyond recognition (and utility). That would seem to be a show-stopper for most prospective buyers and totally unnecessary.

<comment><USER18> This version is a lot less modded than I expected. The home screen is fairly Amazoned but most other things look moderately close to stock.

However - that's just Android. The lack of Google Apps, Play Store and Google Play Services is more of an issue but the seriousness of that totally depends what you're expecting to do with it.

<comment><USER19> hear from someone that have a fire phone (and who has to take it out the garbage drawer when the main phone died)

fireos is garbage. you can't have a calendar or clock widget. any widget. none.

the launcher is a joke designed by committee. you get a huge icon of the recent apps 1 huge icon at a time. which would show app data on the bottom, but not even amazon own apps use it. so it's just one big icon for you. always. from the screenshots, on this version they changed that to instead show your media hosted in Amazon's cloud. yeah, that will be useful to have using 60% of my home screen at all times.

then the reviewer says he didn't find any app missing... well that made me sure that is a paid fluffy piece (and I'm done with arstech site forever thanks to that) because besides Facebook, every app is missing. from youtube to Firefox. you get nothing but social site apps and fart apps.

</comment></comment></comment><comment><USER20> Do you have to have an Amazon account, or will it operate anonymously?

<comment><USER21> I have one, during setup it asks you to log into your account to 'complete the setup. i couldnt at the time, and some apps worked, and others absolutely required the login, but it was half-usable without it.

When you log in it 'feels' like a cloud-powered, personalized device and I imagine if you had a second device and were to log in it would probsbly bring much of your info over. im curious to see what they do with tying the Amazon account to a device in the future.

I was also a little worried as a non-US resident that it might be locked into amazon.COM accounts when I use a different locale, but everyting seems to smoothly work.

Its no ipad, but I can buy ten of them for a price of an ipad. As a longtime ipad owner I finally feel like theres competition, and the price point is unbeatable. IF you gave me $50 to spend on a tablet, Id get the fire. if you gave me $200, Id get four fires. If you gave me 500 Id buy an ipad, and if you gave me $550 Id buy an ipad and a fire.

You cant go wrong at that price point, but for what its worth when its in the hand it feels like a device I would have expected to pay $150-$250 from anybody else.

</comment></comment><comment><USER22> This is great news for adoption rates on tablets and the mobile market in general. I'm excited to see what it does for purchases on small android apps as well

</comment><comment><USER23> Nice.

</comment><comment><USER24> The entire margin almost looks like it has more surface area than the screen.</comment>


.dev Insiders - <AUTHOR> It looks like some domains where handed out by Google before the regular early access program to insiders. https://domains.google/tld/dev/<p>I tried to register a domain on minute 0 of the early access program but it was already taken. Anyone else had the same experience? <comment><USER2> They are required to, to prevent cybersquatting.

If companies such as Facebook, or Google itself, had to wait until the EAP, then Anon (Unrelated to company) could have the Facebook.dev, or Google.dev domain; leading to confusion, and ultimately lawsuits for the domain.

I'm 90% sure there is a rule with IANA to allow companies to claim their brand before it goes public.

Speaking of public; the EAP is nothing but a price gouging scheme. Since _anyone_ could join the 'EAP' it is public, but they are structuring the fees such only those who have enough to throw away can use it... The fact is, the .dev TLD _is_ GA...</comment>


Jarrett Heather presents: Word Crimes (2014) - <AUTHOR> https://jarrettheather.com/wordcrimes/ <comment><AUTHOR> Common Ground - Jarrett Heather "Word Crimes" Music Video Artist

[https://vimeo.com/103615214](https://vimeo.com/103615214)

>"Yeah, no classes, just, you know. I think people really underestimate the value of just sitting down and reading the manual."

</comment><comment><AUTHOR> Jarrett Heather is the artist behind Weird Al's "Word Crimes" video released in 2014 (at 48.4 million views now).

Word Crimes: [https://www.youtube.com/watch?v=8Gv0H-vPoDc](https://www.youtube.com/watch?v=8Gv0H-vPoDc)

Weird Al's spot-on parody of Robin Thicke's "Blurred Lines" with T.I. and Pharrell Williams: [https://www.youtube.com/watch?v=yyDUC1LUXSU](https://www.youtube.com/watch?v=yyDUC1LUXSU)

Weird Al contacted him after being impressed by "Shop Vac", his previous work with kinetic text (typographic animation), which he made using animation tools like AfterEffects.

Shop Vac: [https://www.youtube.com/watch?v=y4sOfO8Ei1g](https://www.youtube.com/watch?v=y4sOfO8Ei1g)

This page on Jarrett Heather's web site tells the story and shows the art and technology behind the "Word Crimes" video. He's also published the Animatic storyboard-in-motion that took about 100 hours, to Weird Al's original home- made demo of the song! It's fascinating to compare them, and see how their ideas evolved from storyboard to final video.

Jarrett Heather presents: Word Crimes: [https://jarrettheather.com/wordcrimes/](https://jarrettheather.com/wordcrimes/)

>The Completed Music Video: In November 2013, "Weird Al" Yankovic asked me to direct an animated video for "Word Crimes", a parody of Robin Thicke's "Blurred Lines" about the supposed abuse of proper language.

>The result of 500 hours of work in After Effects, Photoshop, Illustrator and Premiere goes by in 3 minutes, 44 seconds. I hope you find each one of them entertaining.

The Animatic: [https://vimeo.com/102959171](https://vimeo.com/102959171)

>This storyboard-in-motion took about 100 hours. Al signed off on this design on January 25th, 2014, only 3 weeks after he gave me his homemade "demo" for Word Crimes, which you can hear on the animatic soundtrack.

>If you watch very closely, you might notice a gag or two that didn't make it through to final animation or some very subtle changes in the lyrics.

Jarrett designed the Live Journal logo in 2000 or so, and parodied it in the video, with a broken pencil tip.

[https://jarrett.livejournal.com/208198.html](https://jarrett.livejournal.com/208198.html)

Here's an article about Jarrett Heather from around the time the video came out, that was previously posted to HN:

Elk Grove animator thrives as 'Weird Al' Yankovic's partner in 'Word Crimes': [https://web.archive.org/web/20140725043615/https://www.sacbe...](https://web.archive.org/web/20140725043615/https://www.sacbee.com/2014/07/17/6564802/elk- grove-animator-captures-spotlight.html)</comment>


People who know how the news is made resist conspiratorial thinking (2017) - <AUTHOR> https://arstechnica.com/science/2017/12/knowing-how-the-news-media-works-protects-people-from-conspiracy-theories/ <comment><USER2> This is an amazing insight, thank you for sharing.</comment>


If Haskell is so great, why hasn't it taken over the world? - <AUTHOR> https://pchiusano.github.io/2017-01-20/why-not-haskell.html <comment><USER2> I think pure FP is too alien. I mean any programmer expects a language to have for loops and mutation.

That said, I love Haskell and I have endless fun studying and playing with it.

</comment><comment><USER3> The author's solution to help haskell take over the world seems to create a clone of it which lives in image-like environment, and breaks every single code management tool we have?

I thought Smalltalk showed everyone that this is not a good idea already?

</comment><comment><USER4> The answer is, it is not great.</comment>


Tech in 2020: Standing on the Shoulders of Giants – Benedict Evans Presentation [pdf] - <AUTHOR> https://static1.squarespace.com/static/50363cf324ac8e905e7df861/t/5e3761ff3e87613dac063a5f/1580688038108/2020+01+Benedict+Evans+Shoulders+of+Giants.pdf <comment><USER2> Regulation will only hurt new startups and will probably assure the position of big techs since only big tech can handle the overhead of regulation (lobbyists, lawyers, CPA, audits reports, etc).

So I would expect to see big tech actually push for regulation.

However, startups and the tech industry, in general, should push AGAINST regulation, as it would freeze the natural progression of tech, where the new replace the old.

<comment><AUTHOR> Sundar Pichai has been actively calling for regulations on AI and facial recognition to crowd out potential competition and startups. They know that regulations will create barriers to entry and openly welcome it now that they are at scale.

Just like banking rules like KYC and AML were barriers to entry and the cost was borne by the unbanked and underbanked; and competition that could not be created to take on the incumbents.

Karl Popper warned that the enemies of open societies included BIG companies that tried to limit competition through regulatory capture and their armies of lobbyists.</comment></comment>


Apple introduces new 9.7-inch iPad with Apple Pencil support - <AUTHOR> https://www.apple.com/newsroom/2018/03/apple-introduces-new-9-7-inch-ipad-with-apple-pencil-support/ <comment><USER2> >Schools can purchase iPad starting at $299 (US) and Apple Pencil for $89 (US).

I'm imagining how easy it is to lose a 'pencil' in a school - at $89 each!

<comment><USER3> They also introduced a Logitech "crayon" for $49

</comment></comment><comment><USER4> Sure looks a lot like the (now discontinued) 9.7-inch iPad Pro

</comment><comment><USER5> _> advanced sensors that help deliver immersive augmented reality_

What are these sensors — are they present in existing iPads?

<comment><USER6> Further down in the press release:

> *"The new iPad is a stunning, large viewfinder for immersive AR experiences. > Its Retina display, powerful chip, enhanced cameras and advanced sensors, > including a gyroscope and accelerometer for accurate motion tracking, are > designed to support the next generation of AR apps."

<comment><USER5> Doesn't every iOS device have a gyroscope and accelerometer? That sentence does not name the other advanced sensors.

<comment><USER6> I believe so, yes. I only addressed your first question as to what those sensors are. (Edit to add: I neglected to do a full feature comparison because I suspected that perhaps initial iPad releases had different but was too lazy to do the research of a full feature comparison across all models.) The full sentence mentions the "new iPad", not that the sensors are necessarily new, not surprising in a press release.

<comment><USER5> What's new is the reference to _" immersive augmented reality"_.

<comment><USER6> The whole sentence is _" The new iPad is more versatile and capable than ever, features a large Retina display, the A10 Fusion chip and advanced sensors that help deliver immersive augmented reality, and provides unmatched portability, ease of use and all-day battery life."_ I read _" that help deliver immersive augmented reality"_ as referring to the display, the chip, and the sensors as a whole.

Even then, the "new" just refers to the new iPad, and doesn't say that "immersive augmented reality" is a new feature. Apple's been touting AR for a while now, introducing ARKit with iOS 11, so it's not surprising that they'd include it here. It's a press release, and should be read as such.

<comment><USER5> Here is the 2017 iPad press release: [https://www.apple.com/newsroom/2017/06/ipad- pro-10-5-and-12-...](https://www.apple.com/newsroom/2017/06/ipad- pro-10-5-and-12-9-inch-models-introduces-worlds-most-advanced-display- breakthrough-performance/)

It has no references to augmented reality. The only reference to sensors are for the Apple Pencil.

<comment><USER6> iOS 11 wasn't released until September 2017. It not all that surprising that they'd leave out AR until it was actually available in the product.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER7> Looks pretty nice for the price. I'm still waiting for a new Mac Mini though.

</comment><comment><USER8> Nice, but too bad this didn't come out before I spent $2000 on the iPad Pro.

<comment><USER9> How?!

</comment></comment><comment><USER10> Is the screen laminated or are they using the same screen as on the 2017 iPad?

</comment><comment><USER11> a $300 ipad is still technology for the privileged. come back with $20 tech that the majority of underprivileged can actually afford, then you (apple) can boast about making tech ubiquitous. Until then, nothing they have made in the last 5 years has been significant.

<comment><USER12> Quite odd to make such bold, sweeping statements about the world with zero data presented.

<comment><USER13> He's quite aggressive, but he does have a point. Apple doesn't serve at all the bottom 20% of the world. Maybe, maybe it does so through the second hand market, which doesn't really count cause every other manufacturer also has it.

You could argue that by pushing the high end the low end is also pulled up slowly. Still doesn't seem like a great argument.

<comment><USER12> Why is the very first piece of criticism on something like this that Apple doesn't serve the bottom 20%? I can make that argument about tons of things unfairly. For example, does Toyota serve the bottom 20% of the world? Does Hacker News? Does Tesla?

Why don't the middle 50% deserve a great experience or progress? There is A LOT of progress to be made in education in the first world. There is _so much_ low hanging fruit.

Did iPhone serve the bottom 20% of the market when it was released? No. Did it subsequently change the quality of life for the bottom 20% as it ushered in the smartphone era? Undoubtedly. Will this particular announcement do the same? Probably not, but who knows. Does it need to in order for iPad to be successful? No.

Look at it this way, if a $300 iPad is easy to administer, easy to manage, easy to get children to use, easy to clean, easy to handle, useful for teachers and students, and extremely reliable - that is a huge win compared to the status quo because it will convince schools that implementing and integrating technology is both a worthwhile and easy endeavor.

Can Google do something similar with Chromebooks? Sure. Is it a different approach from Apple? Yes. Are both approaches worthwhile? Probably yes, let's see what happens.

I feel like there's a fundamental pragmatism missing in the OP's snap judgement and that results in something short-sighted and irrelevant. Ultimately s/he has a point but not a useful one and there are far far more useful critiques for us to be talking about.

<comment><USER14> > Why don't the middle 50% deserve a great experience or progress? There is A > LOT of progress to be made in education in the first world. There is so much > low hanging fruit.

Why do they deserve better devices than the poor ? This is why poor people are poor. Because rich people "deserve" great experience, great progress, great opportunities, which is another way of saying, of course, that the poor do not.

> Look at it this way, if a $300 iPad is easy to administer, easy to manage, > easy to get children to use, easy to clean, easy to handle, useful for > teachers and students, and extremely reliable - that is a huge win compared > to the status quo because it will convince schools that implementing and > integrating technology is both a worthwhile and easy endeavor.

So what you're saying is, it's a great tool for learning and bettering yourself ... and the poor have no rights to it. (I was very poor as a child, and lots of people, especially in my classroom, felt this way about things like nice books/clothes/sports gear (as opposed to secondhand), later computers, and gameboy/consoles/... thanks, people making this argument really made one feel good)

> Can Google do something similar with Chromebooks? Sure. Is it a different > approach from Apple? Yes. Are both approaches worthwhile? Probably yes, > let's see what happens.

I don't know if you've been watching chromebooks but they've also become systematically more expensive, especially the google supported ones. Windows 10 devices are the only thing left that has decent cheap options available (cheap meaning < $200 and usable).

Also none of the Google devices work, frankly at all, without a constant internet connection. That's $20/kid/month on top of the basic cost for the android/chromebook device.</comment></comment></comment></comment></comment>


Show HN: Doczar – explicit doc generation for many languages - <AUTHOR> http://shenanigans.github.io/node-doczar/docs/property/doczar/spare/README/index.html

<comment><USER3> People who write command line tools that require me to install a runtime make me sad.

Also, I thought we'd learned by now that javadoc/doxygen style comments are evil? Comments are most often read in the code in plaintext, so they need to be easy to read in the code. Also, no one writes useful comments about each and every parameter to a function. "reader is the stream the function reads from" ... thanks.

Take a look at how godoc works, and emulate that. It's awesome, easy to read and write in plaintext, and produces nice html output. It _does_ require parsing the code itself to get function names, parameter names, etc. Obviously that makes it a lot more difficult to make cross-platform, but it means writing doc strings is super easy.

<comment><AUTHOR> If you touch nix at all you have tons of command line tools that require runtimes. Those runtimes were just prepackaged with your distro.

I'm glad you've had a good experience with godoc. My experience with other syntax scanners in other languages is that they always get things wrong. By the time you've added tags to correct the mistakes, you've done more work than doczar would've required you to do.

"Comments are most often read in the code in plaintext" which inspired me to make a new syntax that's more human legible in the source. If you only need to document an argument as being a Stream, it's as simple and clear as `@argument/Stream reader`, no useless sentence of text necessary. edit - <USER2> `@argument/Stream* reader` or `@argument/Stream[] readers`.

</comment></comment><comment><USER4> A quick glance suggests this seems a little more flexible then doxygen or cweb in terms of what you can annotate, but it seems like it could have been built to expand on doxygen/javadoc syntax, whereas this looks like it reinvents the wheel when it comes to annotation. It seems like compatibility with doxygen + additional features might be a better choice, especially since, as a new js program, it may be slower then doxygen, which is mature and compiled from C++, when running on big/complex files.

That said it looks well-documented and mature.

<comment><AUTHOR> Ah, but which should doczar be compatible with, doxygen or javadoc? A fundamental frustration I have with both of these projects is that their syntax is designed to annotate the results of a syntax scanner in their primary language, not to describe a structure from the ground up. I could potentially have worked from the syntax of an established "generalist" project such as NaturalDocs, but most of these were designed to mimic javadoc syntax.

Regarding performance, I've fed it some nasty directories and generation time is trivial. Doczar generates docs as fast as your hard drive can move them.

Thanks for looking!

<comment><USER4> doxygen supports more languages then javadoc, but it definitely shows a preference for c family languages, so I feel you.

Glad to here performance isn't an issue though.</comment></comment></comment>


Are Angry Legos Harming Our Children? - <AUTHOR> http://www.popsci.com/science/article/2013-06/are-lego-figures-getting-angrier

<comment><USER2> Clicky link to the actual paper ([http://bartneck.de/publications/2013/agentsWithFaces/bartnec...](http://bartneck.de/publications/2013/agentsWithFaces/bartneckLEGOAgent.pdf))</comment>


Ask HN: Tool suggestions for keeping track of your servers? - <AUTHOR> Can you recommend an online tool (preferably free, or possibly self-hosted), that is not an Excel spreadsheet or Google Doc, which is capable of helping keep track of the servers I have, and the services I run on them (domains + subdomains + possible other micro-service detail-information)?
I have about 9 - 12 servers (and a few custom-VPNs) with various providers, some are actual hardware servers, others are cheap virtual servers or AWS instances or buckets.
Then, I have lots of smaller and larger projects distributed across those servers. Some are just 1 service / 1 server, others are distributed across several servers and need each other to work.
Not everything's super reboot-safe and automated with god and such, the smaller micro-service things aren't as uptime-monitored as the bigger sites on those machines.
Now with the reboots of spectre/meltdown fixes, I am basically getting a lot of "random server name is being rebooted today!"or "ip such and such has been forced to reboot" — and now I am having to log in to each and every server to see if things booted back up, and what is actually running where (I keep losing track of the smaller things from time to time).
Something that'd let me document all of this before the new year speeds up again would be great!
I use uptimerobot — but that's just for the things I care to monitor. <comment><USER2> Recently a service of mine went offline and it took me about 30 minutes to find out where i hosted it. So i thought about this as well, but havent found a satisfying solution.

The closest may really is New Relic if you havent looked into that. You can monitor servers and applications individually, so have a list of IPs, their health metrics and even the associated applications. Plus it works with every major framework/language.

<comment><AUTHOR> Thanks for the suggestion. I just checked New Relic's page, almost gave up on the "Pricing" drop-down, confused, but then did give up when I ended up at the "Request Demo" button. Ugh.

Main reason I ask is I am on the verge of starting to build a(/yet another) small service to solve the problem. But I wanted to avoid re-inventing the wheel, especially on something so simple, it MUST exist over and over, I can't be the only one struggling with this.

Btw. if you made forwardmx — congrats, it's a great tool, very well designed. I'm not a customer but it's bookmarked. Another one of those returning problems I have, e-mail forwards on side projects. Great solution.

<comment><USER2> Thanks for the nice words. Just working on a complete overhoul to actually offer a "complete" sideproject email solution, so keep a eye on it :)

New Relic has a confusing onboarding, it takes a bit to get used to it. However it is actually "free" to use, only more logs and specific features are bound to costs.

Curious to hear other options as well, hopefully someone knows something. I guess most tools offering something like this fall into server orchestration which is a lot more than i (and most likely you) are looking for.</comment></comment></comment>


GitHub should automatically convert +1 comments to thumbs up reactions - <AUTHOR> <comment><USER2> or users could just post a thumbs up.</comment>


Gmail: Detecting suspicious account activity - <AUTHOR> http://gmailblog.blogspot.com/2010/03/detecting-suspicious-account-activity.html

<comment><AUTHOR> It'd be nice if this feature made it into all web applications that handle sensitive data.</comment>


Why Would Google Release an iPhone-Only Group Messaging App? - <AUTHOR> http://www.readwriteweb.com/archives/why_would_google_release_an_iphone-only_group_mess.php?sms_ss=hackernews&at_xt=4d9000885c1c56a1%2C0 <comment><USER2> Because this is an affront to Beluga, not so much a mobile play - this is a social play.

Though I think that the marketing on it is a little week "Where the party at?!"

<comment><AUTHOR> How do you mean?

<comment><USER2> Group txt is not about mobile as much as it is social. It is social activity that is enabled by mobile - the data you get from it is more informative about how groups communicate.

Beluga being bought by FB shows that enabling that group communication via enhancing the txting experience is important to further enabling social interactions.

Google may or may not have a new social play, but if it does - and it lacks tools that allow more fluid communication amongst social groups, then it will fail. This indicates that they may be paying attention that the single most important aspect of social nets is providing communication tools over the varied mediums we all now take for granted.

You simply _expect_ to be able to share pics, video, text files etc with whomever you want. And if your relegated to serial communications -- you will innately know that is a limitation and will be less inclined to utilize that service heavily.

This is key to any hopes of scaling any social offerings.</comment></comment></comment>


The New Server Economies of Scale for AMD - <AUTHOR> https://www.nextplatform.com/2017/07/13/new-server-economies-scale-amd/ <comment><USER2> The proof will be in the pudding. The initial numbers here look great, but what happens with the second generation, and what is the TCO difference once this rolls out.

That said, these look almost custom made for Docker & Kubernetes.

<comment><USER3> I think it will make a difference even if performance/tco isn't as good as expected. End users like OVH and Hetzner have lots of underused servers...so they care more about "how cheap can I get a lot of cores into a single server". The 2p worth of cores into 1p helps them a lot.

To me, that gives AMD some time to refine things to the point where customers like Google, AWS, etc, would take a serious look.

<comment><USER4> Having done tco modeling a few times, cost per core is an important metric for a cloud provider. This looks like it provides a way to further reduce that. The overhead of power supply, motherboard, network, racks, switches, and all the misc equipment should start to vanish further into the core cost.

My assumption is that the margin on amds side is thinner than intels. I wonder if they can out compete intels ability to cut its profit.</comment></comment></comment>


Bash Shortcuts For Maximum Productivity - <AUTHOR> http://www.skorks.com/2009/09/bash-shortcuts-for-maximum-productivity/ <comment><USER2> The things he calls "bang commands" are actually "event designators" (!!, !blah), "word designators" ($) and "word modifiers" (:p). There are links to docs for each at the bottom of this page: [http://www.gnu.org/s/bash/manual/html_node/History- Interacti...](http://www.gnu.org/s/bash/manual/html_node/History- Interaction.html#History-Interaction)

I use them all the time, and anyone watching over my shoulder always asks what that was. Learn !!, !$, and a few modifiers. You'll be glad you did. Personally, I use !$ constantly (and variations like !-2$, which gets you the last arg from 2 commands ago). The "h" modifier is handy, too. It's like dirname for the word. Consider this example, where you copy a file to some deep path, and then cd to that dir to continue working with the copy:

        $ cp foo.txt /some/really/long/destination/bar.txt
        $ cd !$:h
        $ # (do more with ./bar.txt)

The substitution (:s) and global substitution (:gs) modifiers are also useful:

        $ echo some args
        some args
        $ !!:s/some/more
        more args

(Also, note that his explanation of !* is actually incorrect. He says it leaves off the last arg, but actually leaves out $0 (the command name). !* is all of the previous command's arguments.)

Finally, one really useful thing he doesn't mention at all is brace expansion. For example, these are equivalent:

        $ cp foo.conf foo.conf.bak
        $ cp foo.conf{,.bak}

[http://www.gnu.org/s/bash/manual/html_node/Brace- Expansion.h...](http://www.gnu.org/s/bash/manual/html_node/Brace- Expansion.html)

<comment><USER3> !! and !$ are alright, but I really dislike !blah, which is blindly _executing_ the latest command starting with blah, whatever it is. The author of the article should remove this "tip", it is bad advice, or at least make a note that the !blah:p is highly preferable.

<comment><USER4> I prefer using Ctrl-r <blah>, which searches your history for 'blah' and puts it on the command line. The preferable part is that you can keep hitting Ctrl-r to see previous matches, which is often helpful since you don't want the last match, but the second or third match.

</comment></comment></comment><comment><AUTHOR> A note to Mac users: Instead of Alt, you must press escape key. For example, Esc+b moves the cursor backward one word in bash, but you'll probably want to use option instead, so check 'Use option as meta key' in Terminal's settings (under keyboard tab).

But if it's not very handy, you can set 'option+left arrow' to move cursor one word backward. To do that, open Terminal's settings, go to keyboard and add a shortcut for left arrow (with 'option' as modifier), and leave the action to 'send string to shell'. Then click on the textbox below that and press esc (which should print '\033') and then 'b', or simply type '\033b' in the textbox.

Just this simple shortcut makes Mac's Terminal 1000 times better.

<comment><USER5> Thanks very, very much. I'm embarrassed to admit I probably spend 3-5 hours a day on a command line, and have just gotten used to set -o vi when I need to bounce around long lines a lot. esc+f/esc+b were always awkward. It should have occurred to me to just map the keys on Terminal.app!

In the interesting news department - Lion already has option left cursor/right cursor already mapped to move a word forward and back - not sure if it was there in snow leopard.

</comment></comment><comment><USER6> I am a huge fan of maximizing productivity in the shell. I wrote these three articles a while ago:

Bash emacs-like keyboard shortcuts:

[http://www.catonmat.net/blog/bash-emacs-editing-mode- cheat-s...](http://www.catonmat.net/blog/bash-emacs-editing-mode-cheat-sheet/)

Bash vi-like keyboard shortcuts:

[http://www.catonmat.net/blog/bash-vi-editing-mode-cheat- shee...](http://www.catonmat.net/blog/bash-vi-editing-mode-cheat-sheet/)

Definitive bash guide to command line history:

[http://www.catonmat.net/blog/the-definitive-guide-to-bash- co...](http://www.catonmat.net/blog/the-definitive-guide-to-bash-command-line- history/)

And they all come with cheat sheets. See downloads box at the bottom of each post for download links.

<comment><USER7> Great articles. I'm just starting to get into the hang of vi. I'm giving vi- mode in bash a go (with "set -o vi") but there doesn't seem to be any indication of when I'm in command/insert mode. Is there any way to see this?

<comment><USER8> There is a workaround in zsh [http://superuser.com/questions/151803/how-do-i- customize-zsh...](http://superuser.com/questions/151803/how-do-i-customize- zshs-vim-mode)

</comment></comment></comment><comment><USER9> I'm a zsh user, but here's a couple of things I find pretty invaluable:-

        bindkey '^Q' push-line

The 'push-line' widget allows you to quickly type another command and will restore the previous one once you've entered it.

        # re-run the previous command with sudo
        rerun-with-sudo () {
          LBUFFER="sudo !!"
          zle accept-line
        }
        zle -N rerun-with-sudo
        bindkey '^Xx' rerun-with-sudo

Re-run the previous command prefixed with sudo by typing ^X then x.

And:-

        # build git clone command from clipboard
        git-clone-clipboard() {
            REPO_URL="$($CLIPBOARD)"
            REPO_BASE_NAME=${$(basename $REPO_URL)%.git}
            LBUFFER="nocorrect git clone $REPO_URL $REPO_BASE_NAME"
        }
        zle -N git-clone-clipboard
        bindkey "^Xg" git-clone-clipboard

^Xg prefixes a git url with "git clone" and fills out the command line.

Couple similar things for wget, youtube-dl here: <https://github.com/gaving/dotfiles/blob/master/.zsh/config>

<comment><USER10> If I have a URL in my clipboard and want to prefix it I use:

        git clone `xclip -o`

Much simpler and no customization needed.

<comment><USER9> uh, why wouldn't you just actually paste the url into your terminal at that point instead of typing `xclip -o`?

and yeah, typing the actual command into the terminal is always going to be 'simpler'

</comment></comment></comment><comment><USER11> One of my favorite bash shortcuts is binding the up arrow to history-search- backward. This is the first page I found that concisely explains how; the variant in the second comment is the one actually in my .bashrc:

[http://hints.macworld.com/article.php?story=2003102617423686...](http://hints.macworld.com/article.php?story=20031026174236860)

So if you've typed `verylongcommand` some indeterminate time in the past, you can probably just type "ver<up>", and you'll have it. Very convenient.

<comment><USER12> A quick look at the article shows it's binding history search. It's already bind to ctrl-r - you can do a ctrl-r, type a few letters of the long commands, and keep doing a ctrl-r till you find the right match.

Apart from additional bind your setup requires, arrow keys are near impossible to touch type. Even if you can touch type them, that means taking your hands off the home row, and positioning them again.

<comment><USER13> I think with the parent's setup you can do ver<C-p> to get the same effect.

</comment></comment></comment><comment><USER14> Great tips. !! is a nice timesaver when you've forgotten to prepend sudo to a command:

      $ /etc/init.d/rabbitmq-server restart
      Failed, need root access
      $ sudo !!
      Success

cd - is also quite cool, it takes you to the previous working directory.

      $ pwd
      /some/really/long/path/goes/here
      $ cd /var/log/app
      Work in this directory for a while, then go to previous dir
      $ cd -
      $ pwd
      /some/really/long/path/goes/here

<comment><USER15> I have the following in my zshrc for sudo. It adds sudo at the beginning of the current line or writes sudo !! if the current line is empty. I've aliased it to alt+s

        run-with-sudo() {
          if [[ -z $LBUFFER ]]; then
            LBUFFER="sudo !!";
          else
            LBUFFER="sudo $LBUFFER";
          fi
        };
        zle -N run-with-sudo;
        bindkey '\es' run-with-sudo

<comment><USER14> Nice little timesaver for such a common task, I'd just been doing the following (with vi editing on) but yours is much easier:

      esc-0-i-sudo

<comment><USER16> It may not be less keystrokes, but for what it's worth, I find using shift+i is easier than 0-i

<comment><USER14> Didn't know about that one, thanks!

</comment></comment></comment></comment></comment><comment><USER17> It's well known that !! is a sweet little helper in case where you forgot to sudo a command. However, I find that for those cases I usually use `Up-arrow CTRL-A` to get the previous command and then go to the beginning of the line where I can type `sudo`. Is there any reason to prefer the !! variant?

<comment><USER18> If you're on a non-interactive terminal. Some of us didn't throw out our teletypes. Also: when rooting boxes often one lacks space in the exploit payload to set up the tty line discipline.

</comment></comment><comment><USER19> Most of the commands there can be replaced with vi keybindings.

That is, set -o vi

You can type that directly into your terminal for use just in one session or in your .bashrc

Type <C-]> or <Esc> just like in vim to escape into "command" mode. Most command mode commands work. E.g. '^' goes to the beginning of the line '$' goes to the end. 'i' sets bash back into insert mode.

</comment><comment><USER20> I use `..` to go upper directory, `...` to go up two levels, I added this to bashrc:

      str='..'
      level='./../'
      for i in `seq 1 10`;
      do
          eval "alias '$str=cd $level'"
          level=$level'../'
        str=$str'.'
      done

Note, seq is not available in Mac, should use jot instead.

<comment><USER21> There's no need for seq or jot. In bash you can replace `seq 1 10` with {1..10}. Or {01..10} if you want zero padding when using $i to label files.

I use an function called "up" that takes an optional integer argument to go up a certain number of levels. It won't necessarily be faster, but somehow I prefer it to typing lots of dots in a row:

       function up () { if test $# = 1 ; then s=$( printf "%$1s" ); s=${s// /..\/}; cd $s ; else cd .. ; fi; }

<comment><USER20> Thanks for pointing out that

</comment></comment></comment><comment><USER22> I've been using this[1] page as a cheatsheet for readline commands.

[1] [http://jan.tomka.name/sites/default/files/readline- commands....](http://jan.tomka.name/sites/default/files/readline- commands.html)

</comment><comment><USER23> commandline and vim have easily got the most powerful, yet the most rage- inducing key mappings – ever.

The worst, and most easily rectifiable aspect is the way command pairs (eg move back/forward a word) require two totally separate commands (esc + b/esc + f) instead of having one command + a generic 'reverse' meta key.

In the future I hope someone has the balls to do away with this legacy tripe and popularise some more Donald-Normanesque keyboard shortcuts.

<comment><USER24> I'm not sure if you're just trolling, but I don't understand your complaints at all. What would your "Donald-Normanesque keyboard shortcuts" even look like? In Windows the arrow keys act pretty similar, don't they? left-arrow, right-arrow for moving by character, Ctrl-left-arrow, Ctrl-right-arrow for moving by word. Windows is about as Donald-Normanesque as you can get...

The bash shortcuts are from readline, which (in this case, but by default?) are the same as Emacs. C-f,C-b for moving by character, M-f,M-b for moving by word. C-n,C-p for next and previous line. I think there's a vi switch for readline which would allow you to have vi style shortcuts in bash. This is nice, because it means you have one set of keyboard shortcuts in your editor and shell. Emacs users in OS X get this in any text box (at least any that supports the same defaults as the system, I'm spitting at you MS Outlook/Entourage). I'm sure you could set something up in other windows systems, like GNOME or KDE.

Sure the keyboard shortcuts might be cryptic, but any keyboard shortcuts will be. Don't slag something just because you don't know the history and background behind the choices.

</comment></comment><comment><USER25> Sometimes I find myself typing out a long command and then deciding that I don't want to run it quite yet. Normally I just hit C-c run some other command first and then copy paste the long command. Surely there is someway to put the long command in history?

<comment><USER26> Comment it out (put a # at the front), unless your shell is set to ignore commented lines.

<comment><USER25> This works great! There is even a shortcut: M-#

<comment><USER27> You said copy-paste - are you using the OS copy-paste or readline's kill ring? C-a C-k is pretty fast, and then can be retrieved with C-y.

<comment><USER25> This is another great solution. As a vim user I haven't much looked into the emacs keybindings in readline. I'll have to read up. Also the terminology was a little confusing. I didn't realize that killing a line was the same as "cutting".

<comment><USER27> Yeah, and of course this does mean you have to be a little careful with M-backspace (backward-kill-word in Emacs), since it will change your kill ring.

But on other hand M-backspace can be useful too if you want to get just part of a line, you can move the cursor to where you want, then M-backspace through words to grab it - if you do M-backspace repeatedly the entire string is pulled into the kill ring until you stop pressing M-BS.

</comment></comment></comment></comment></comment></comment><comment><USER28> I'm not an Emacs user, but aren't a lot of the text-editing shortcuts straight from Emacs?

<comment><USER29> Yup, but you can also put Bash in a vi mode. Some else will to chip in with the exact incantation, since I'm on my phone now.

<comment><USER30>
      set -o emacs

or

      set -o vi

</comment></comment></comment><comment><USER31> Cheatsheet for emacs mode (which is what the article presumes): [http://www.catonmat.net/download/readline-emacs-editing- mode...](http://www.catonmat.net/download/readline-emacs-editing-mode-cheat- sheet.pdf)

</comment><comment><USER32> These assume you use default emacs mode. If you are vi/vim user then set -o vi will allow you to get immediately productive in bash, using vi motion commands to edit the command line.

</comment><comment><USER33> Try Alt-*

        ls /etc/p<Alt-*>

</comment><comment><USER34> the best bash shortcut you could do

        # ln -s /usr/local/plan9/bin/rc /bin/bash</comment>


Is modern web design too like print design? - <AUTHOR> http://www.gyford.com/phil/writing/2009/12/02/design.php <comment><USER2> The essay leaves out "more clue" as a reason why web design has stopped being clunky, unreadable Myspace-worthy technicolor evil and started to look like something to read.

Typography is not a fashion statement. It serves an important functional purpose. This writer actually holds up _Hotwired_ as an example of the sort of "exciting" web design he misses. I beg to differ. The designers at _Wired_ single-handedly prevented me from finding out about Bruce Sterling for ten years and more. Sterling wrote for _Wired_ , _Wired_ gave me headaches, ergo I did not read Sterling. I figured, what could I be missing? Surely nobody who actually knew much about words would exhibit them in this unreadable fashion.

What happened to the web is that it grew up, put the fluorescent crayons away next to the blink tag, and realized that print designers had between five hundred and a thousand years of practice in designing readable type and layout, and perhaps this new medium should leverage that.

</comment><comment><USER3> Maybe 10 years of new isn't enough to root out the real design advantages of web in comparison to print. Maybe over the 800 years of print design we learned a few things.

The web of today is exciting, but it's also useful and powerful.

Overestimating the future is a depressing business.</comment>


Coq: The world's best macro assembler? (2013) [pdf] - <AUTHOR> http://research.microsoft.com/en-us/um/people/nick/coqasm.pdf <comment><USER2> Coq is an amazing language. Learning to use it, and understanding the theories that underpin it, give one a far richer sense of understanding of computer science. In that sense it's akin to Haskell, but with an even more (much more!) powerful type system. I'm still a beginner but even with my limited expertise, it's a real breath of fresh air. I would love to see a world in which logic, type theory and functional programming formed the foundation of computer science education, rather than the comparatively arcane and clunky paradigms of object-oriented and imperative programming. I'm convinced that the quality of software would improve drastically.

(And yes, its name is truly unfortunate. It's hard to have a conversation about the language, especially in person, without giggling over the name. Pronouncing it "coke" helps, but it's still the elephant in the room.)

(Also, I'm not sure if the fact that this pdf is entitled "coqasm" is a pun or an amusing coincidence.)

<comment> vezzy-fnord _I would love to see a world in which logic, type theory and functional programming formed the foundation of computer science education, rather than the comparatively arcane and clunky paradigms of object-oriented and imperative programming._

It truly is a shame what horrid reputation object-oriented programming has received, even amongst a lot of people who should supposedly know better.

OO and functional programming are not opposites in any way, nor should they be.

I don't know through what circumstances exactly did we ultimately get the quasi-procedural Nygaard-style OO of today, which is indeed clunky and arcane, as opposed to the style of OO rooted in message passing espoused by Alan Kay and the Smalltalk family.

Huge advances in JIT and language VMs can be traced to the work of the Self language designers (itself descended from Smalltalk), the sheer elegance and minimalism of Smalltalk syntax is likely unmatched, with a plausible exception of Forth, the power and dynamic introspection capabilities of the image-based Smalltalk environments are to this day the subject of a lot of poor reimplementation of various subsets, and one could even make the case that languages like Erlang are object-oriented to a degree.

Yet it seems OO research has stagnated and instead FP has become the master paradigm everyone wants to focus on. There's a lot of talk about "programming language as operating system" as well in these circles, but no one has come closer to replicating it than the Smalltalk environments yet.

<comment><USER3> OO--in Haskell, at least--is most succinctly represented as existential and higher-order types with constraints, which break some important assumptions used for proving things in FP. If you are message passing s.t. the call site is opaque to the caller, this breaks more assumptions. The assumptions in question happen to be important assumptions for the currently cool and trendy research in FP, which is important when you're an academic with a career.

Furthermore, the types required are a bit more general than OO, so once you've introduced the former it doesn't make sense to constrain your landscape of thought to the latter.

<comment><USER4> I'm not sure it really breaks assumptions: it just requires coinduction and bisimulation instead of induction and equality. Coinduction and Bisimulation aren't as well understood today and are harder to use, so it's a bit of a rough project to move forward with.

What assumptions are you referring to?

</comment></comment></comment></comment><comment><USER5> In case someone else is interested in this kind of work, there's an interesting line of research in certified programs that's similar to this. Basically, you specify the semantics of some language in Coq. Then, write a program in the desired language. This allows us to analyze the program in Coq and prove certain properties about it. Essentially, it's a process to develop certified programs by using the process:

language -> Coq -> prove properties

As another example of this, Sandrine Blazy and Xavier Leroy have a paper that formalize a subset of C in Coq:

[http://pauillac.inria.fr/~xleroy/publi/Clight.pdf](http://pauillac.inria.fr/~xleroy/publi/Clight.pdf)

There's also some discussion on StackOverflow about the definition of what a certified program is:

[https://stackoverflow.com/questions/21320138/definition- of-a...](https://stackoverflow.com/questions/21320138/definition-of-a- certified-program)

In any case, formalizing a subset of the x86 architecture in Coq means that we can prove properties about a program written in assembler using Coq, which is both interesting and impressive.

<comment><USER6> Compcert C, also written in Coq, is another interesting C compiler: [http://compcert.inria.fr/](http://compcert.inria.fr/)

</comment></comment><comment><USER7> Oh, _wow_ , this is absolutely _amazing_. My complements to the authors! They're really pushing the bounds of what we can do with Coq further and further.

Hell, it makes me want to open the IDE and prove something right now.

<comment><USER8> > Hell, it makes me want to open the IDE and prove something right now.

It makes me want to do a little bootloader development too... in Coq!

It might be fun to make a tiny 16-bit real mode OS with this also. You could head towards your own miniature version of SeL4 os something.

Edit:

Oops! I forgot that it couldn't produce 16-bit machine code. Still, build a tiny bootloader that grabs the next sectors from the boot medium, then jump into protected mode (pretty easy really) and you are good to go!

</comment></comment><comment><USER9> Quoting my comment on this paper from 8 months ago on [https://lobste.rs/s/pc1v4g/coq_the_world_s_best_macro_assemb...](https://lobste.rs/s/pc1v4g/coq_the_world_s_best_macro_assembler_microsoft_research), where it is full of links to the things I'm referring to:

This is a really interesting and thought-provoking idea. In writing httpdito, and in particular in putting a sort of tiny peephole optimizer into it as gas macros, it occurred to me that (some) Forth systems are awfully close to being macro assemblers, and that really the only reason you'd use a higher-level language rather than a macro assembler is that error handling in macro assemblers, and in Forth, is terrible verging on nonexistent. Dynamically- typed languages give you high assurance that your program won't crash (writing the Ur-Scheme compiler very rarely required me to debug generated machine code), while strongly-statically-typed languages give you similarly weak assurances with compile-time checks; but it seems clear that the programmer needs to be able to verify that their program is also free of bugs like memory leaks, infinite loops, SQL injection, XSS, and CSRF, or for that matter "billion-laughs"-like denial-of-service vulnerabilities, let alone more prosaic problems like the Flexcoin bankruptcy due to using a non-transactional data store.

Against this background, we find that a huge fraction of our day-to-day software (X11, Firefox, Emacs, Apache, the kernel, and notoriously OpenSSL) is written in languages like C and C++ that lack even these rudimentary memory- safety properties, let alone safety against the trickier bogeymen mentioned above. The benefit of C++ is that it allows us to factor considerations like XSS and loops into finite, checkable modules; the benefit of C is that we can tell pretty much what the machine is going to do. But, as compiler optimizations exploit increasingly recondite properties of the programming language definition, we find ourselves having to program as if the compiler were our ex-wife's or ex-husband's divorce lawyer, lest it introduce security bugs into our kernels, as happened with FreeBSD a couple of years back with a function erroneously annotated as noreturn, and as is happening now with bounds checks depending on signed overflow behavior.

We could characterize the first of these two approaches as "performing on the trapeze with a net": successful execution is pleasant, if unexpected, but we expect that even a failure will not crash our program with a segfault — bankrupt Flexcoin, perhaps, and permit CSRF and XSS, but at least we don't have to debug a core dump! The second approach involves performing without a net, and so the tricks attempted are necessarily less ambitious; we rely on compiler warnings and errors, careful program inspection, and testing to uncover any defects, with results such as Heartbleed, the Toyota accelerator failure, the THERAC-25 fatalities, the destruction of Ariane 5, and the Mars Pathfinder priority-inversion lockups.

So onto this dismal scene sweep Kennedy, Benton, Jensen, and Dagand, with a novel new approach: rather than merely factoring our loops and HTML-escaping into algorithm templates and type conversion operators, thus giving us the opportunity to get them right once and for all (but no way to tell if we have done so), we can instead program in a language rich enough to express our correctness constraints, our compiler optimizations (§4.1), and the proofs of correctness of those optimizations. Instead of merely packaging up algorithms (which we believe to be correct after careful inspection) into libraries, we can package up correctness criteria and proof tactics into libraries.

This is a really interesting and novel alternative to the with-a-net and the without-a-net approaches described earlier; it goes far beyond previous efforts to prove programs correct; rather than attempting to prove your program correct before you compile it, or looking for bugs in the object code emitted, it attempts, Forth-like, to replace the ecosystem of compilers and interpreters with a set of libraries for your proof assistant — libraries which could eventually allow you to program at as high a level as you wish, but grounded in machine code and machine-checkable proofs. Will it turn out to be practical? I don't know.

(End quote from lobste.rs comment.)

Also, WHAT IN THE LIVING FUCK IS WRONG WITH YOU PEOPLE THAT THE ONLY THING YOU HAVE TO SAY ABOUT THIS PAPER IS ABOUT WHETHER YOU LIKE COCK. HAVE YOU EVEN READ THE FUCKING PAPER. JESUS FUCKING CHRIST WITH A SHOTGUN IN A SOMBRERO, PEOPLE. FUCK YOU, YOU DROOLING MONSTERS. MAKE YOUR COCK JOKES BUT SAY SOMETHING SUBSTANTIVE.

<comment><USER10> I would like to point out that things like SQL injection are pretty easy to avoid by just typing(in the type theory sense) things out in a DSL properly, and not having straight string injection. You don't need crazy dependent types to employ the "make sure strings are escaped" strategies.

Infinite loops, on the other hand...

<comment><USER4> I'm pretty sure you can build a total language and outlaw infinite loops even without dependent types. It also turns out that you can basically do whatever you want in a total language with a good runtime so long as it does coinduction well.

I just think the only real motivation people have taken up on for total languages is their proof theoretic properties which drives you quickly to dependent types.

<comment><USER9> Sure, I'm pretty sure Turner's original Total Functional Programming proposal [https://uf-ias-2012.wikispaces.com/file/view/turner.pdf](https://uf- ias-2012.wikispaces.com/file/view/turner.pdf) doesdn't use dependent types, but I'm not sure it has what you mean by "a good runtime [that] does coinduction well".

<comment><USER4> All I mean by that is that you probably want to be able to evaluate a partiality monad in the runtime if you want to write an interpreter or webserver perhaps.

</comment></comment></comment></comment></comment><comment><USER11> I would really love to see the x86 multi-core architecture spec'd like this. To this day I don't really understand all the details behind x86 concurrency: memory, fences, atomics, concurrent operations ordering, mutex implementations. Such knowledge is crucial to writing fast lock-free structures, and to proving their properties either the whiteboard way or through model checking. Perhaps I should just get through one of these enormous Intel low-level manuals.

<comment><AUTHOR> Here are some attempts at axiomatic validation of memory barriers and atomics on several architectures: [http://lwn.net/Articles/608550/](http://lwn.net/Articles/608550/)

<comment><USER12> The x86tso file mentioned there is from this project: [http://www.cl.cam.ac.uk/~pes20/weakmemory/](http://www.cl.cam.ac.uk/~pes20/weakmemory/)

They have some interesting material there on building models of processors' memory-concurrency behavior. Unfortunately, reading the vendors' own manuals is not a good way to find out about that, even if you excuse the verbosity. Memory-consistency behavior is often very vaguely or indirectly specified in the architecture manuals, and worse, behavior of the actual parts does not always reliably agree with the manuals. A good paper: [http://www.cl.cam.ac.uk/~pes20/weakmemory/cacm.pdf](http://www.cl.cam.ac.uk/~pes20/weakmemory/cacm.pdf)

<comment><USER11> Thanks for the lwn and cambridge links, they both look like a good read. Considering the big picture I feel like we need another Tony Hoare to show us good ways to reason about shared memory concurrent programs. CSP is cool, but at some point Erlang/Go message passing style is not enough, and one must dive deep into the crazy world of parallel processor architectures. It is my opinion that before somebody sorts this out well we should not expect processor manufacturers to play along - after all _hardly anybody_ understands shared memory concurrency well.

</comment></comment></comment></comment><comment><USER13> This looks really cool. How does this work compare to [http://compcert.inria.fr/](http://compcert.inria.fr/) (a verified C compiler)?

For most applications C would be low level enough, and possibly a better option.

</comment><comment><USER14> This would be really out-of-this-world amazing if it had QuickAssembler's UI

</comment><comment><USER15> Maybe they should rename it?

<comment><USER16> Honi soit qui mal y pense ;) A coq is a rooster in French, as can be seen from the coq logo. One of the author is called Coquand, the rooster is the emblem of France (where it comes from) and the coq language is called gallina (rooster in latin). So it's a multi levels pun, and likely here to stay. There's a grand tradition of goofy names in open source, but in this case I feel it's safe to say it won't be the main barrier to mass adoption.

<comment><USER17> It's also, IIRC, based on a logical model called the Calculus of Constructions - or CoC, for short.

<comment><USER18> > It's also, IIRC, based on a logical model called the Calculus of > Constructions

"Calculus of Inductive Constructions" ([https://coq.inria.fr/about- coq](https://coq.inria.fr/about-coq))

<comment><USER19> From your link:

> Coq is the result of more than 20 years of research. It started in 1984 from > an implementation of the Calculus of Constructions at INRIA-Rocquencourt by > Thierry Coquand and Gérard Huet. In 1991, Christine Paulin extended it to > the Calculus of Inductive Constructions.

</comment></comment></comment></comment></comment><comment><USER20> Agreed. Is this pronounced "coke"? Regardless, this is a very interesting paper.

<comment><USER21> It's actually pronounced more like "cock". Coq is the French word for rooster.

<comment><USER22> In a french accent it's more like "Cuck", that's how I say it in my head. Luckily, I don't have to say it out loud.

<comment><USER23> I believe it's /ɔ/ in French but usually /ɑ/ in English.

</comment></comment></comment></comment><comment><USER24> Why are people getting downvoted for saying coq is not exactly a great name. It's not, no matter it's definition it sounds like cock, not a great name to advertise the language.

I mean if someone created a programming language called vagina, labia, penis or sphincter it would be ridiculed, cause it's not an appropriate name for a language.

<comment><USER25> "Cock" in English means exactly the same thing as "coq" in French. So, yes, the language is called "cock". Do you have anything against this beautiful bird?

<comment><USER26> I personally don't care about the bird, I am just into coq.</comment></comment></comment>


A nice picture of (dependency) hell - <AUTHOR> http://disfunksioneel.blogspot.com/2011/04/linux-software-dependencies.html

<comment><USER2> I'm not sure what the problem is here. Looks like there's a large, very functional, set of systems that have a lot of reuse.

Would it be better if there wasn't the reuse? Or if the system was less functional?

<comment><USER3> Exactly. This is code reuse done properly, not "dependency hell".

<comment><USER4> The graph was partially motivated by the experience of compiling a few open source projects in windows. In Gentoo it's not "dependency hell".

<comment><USER3> Why didn't you call it something non-controversial like _"A visualisation of open-source software dependencies"_ instead of _"A nice picture of (dependency) hell"_ , then?

<comment><USER4> Sensationalism? If you would like a post with a less controversial name, have a look at "High resolution dependency graph".

Sorry if you felt cheated by the title :)

</comment></comment></comment></comment></comment><comment><USER5> Meanwhile, over in Windows land, I'm trying to remember when I last encountered DLL hell. It's a long time ago now. People simply stopped trying to install DLLs in the system directories and just ship all their dependencies. With the amount of RAM available now, it doesn't matter if you load 100 different versions of a shared library, you're not gonna notice the difference anyway.

<comment><USER3> In my opinion, that's the very definition of dependency hell - when the system is so badly designed, software is forced to bundle _everything_ and never share it.

<comment><USER6> On the contrary, bundling in your dependencies is the very definition of good, user-centric design.

Disk space has now become so cheap that there's really no tenable excuse for shipping your software with "some assembly required" and "batteries not included" labels. Which is why pretty much every major platform has quit doing it. The lone holdouts are linux distributions. And even they betray their implicit agreement that it's bad design when they resort to employing ungainly feats of contortionism known as "package management systems" in an effort to duct tape over the problem.

</comment></comment></comment><comment><USER7> When dependencies are shown on the rim of the circle, most of the area is used by the circle.

You might want to try to do some automatic force-based layouting instead for the most dependent-on packages would be easier to see.

<comment><USER4> I am doing something like that. Look at the zoomed in graph, there you will see the more connected packages are further away from the rim.

Maybe I can give more connected packages a larger angle to occupy?

</comment></comment><comment><USER8> Is there a single package at the center of this chart that requires every single other package to be installed (either directly or via sub- dependencies)? If not, what does the most complex version of _that_ chart look like?

My assumption is that this is multiple dependency networks being displayed but that the networks are not all interdependent - eg: dev/ruby does not require dev/perl or vice versa.

It's an interesting exercise, but it needs justification to define it as representing "dependency hell" and not just a visualization of a complex system.

Also, to be read in a Crocodile Dundee voice, that's not a dependency, _this_ is a dependency: [http://thedailywtf.com/Articles/Enterprise-Dependency-The- Ne...](http://thedailywtf.com/Articles/Enterprise-Dependency-The-Next- Generation.aspx)

</comment><comment><USER9> Having explicit dependences on shared libraries in packages was taken straight from playbook of some Department of Redundancy Department. For any dynamically linked ELF binnary, the loader (/lib/ld.so or similar) notifies which libraries are missing upon execution. It doesn't take much to locate relevant library packages... Resolution at runtime could be mostly automated; say a dialog asking ``Install 5 packages (15MB in total) now? [Yes] [No]''. Probably same goes for modules of Python, Perl etc.

I recall Vim being marked as requiring Perl, Python and a half dozen other heavyweights (in PLD distro) simply because it had some _optional_ support for those. Attempting to recover half-upgraded, half-broken system over slow connnection really sucked.

<comment><USER10> _It doesn't take much to locate relevant library packages... Resolution at runtime could be mostly automated; say a dialog asking ``Install 5 packages (15MB in total) now? [Yes] [No]''._

You're joking, right? When I set up a server, I want to set it up and be done with it.

</comment></comment><comment><USER11> This could be interesting, but there is too much noise and not enough signal. All I can see is a large multicoloured circle. Why not try to process it a bit more so that this could teach us something?

<comment><USER4> I agree. The graph on the site is already processed a bit, but not enough.

Can you make any suggestions as to how I can make it better?</comment></comment>


Ggplot2 2.2.0 coming soon - <AUTHOR> https://blog.rstudio.org/2016/09/30/ggplot2-2-2-0-coming-soon/ <comment><USER2> ggplot2 is beautiful by default and it's full of interesting features.

But it still remains unusable for publication due to lack of even basic B&W support. It can't do even the basics like filling a curve with a pattern instead of a color.

When you are publishing in academia, many journals ask extra for publishing in Color or don't even support it, so this is an important feature.

I end up using matplotlib in python, which - unlike what some people think - can be make to output fantastic quality graphics, although with a lot more effort than ggplot2.

You can check [https://github.com/jbmouret/matplotlib_for_papers](https://github.com/jbmouret/matplotlib_for_papers) for an excellent introduction on how to tune matplotlib to use in papers.

<comment><USER3> When you say "filling a curve with a pattern instead of a color, do you mean like this [http://docs.ggplot2.org/0.9.3.1/aes_linetype_size_shape.html](http://docs.ggplot2.org/0.9.3.1/aes_linetype_size_shape.html)?

<comment><USER4> He means hatches, similar to how the hatch demo [1] fills in boxplots

[1] [http://matplotlib.org/examples/pylab_examples/hatch_demo.htm...](http://matplotlib.org/examples/pylab_examples/hatch_demo.html)

</comment></comment></comment><comment><USER5> Looks more like an evolution which is fine. I don't see this version changing the way I use ggplot2 for research.

I wish I could remember the syntax better. Every time I want to use ggplot2 I feel like this: [https://xkcd.com/1168/](https://xkcd.com/1168/)

I have to google the syntax or look at my previous R code every time. I'd love to have some sort of interactive plot designer GUI built into RStudio that produced the R code.

<comment><USER6> Any good resources on understanding how ggplot2 works?? I always want to use it but am so pressed for time I just end up using tableau.

<comment><USER7> Honestly I'd focus on using it a couple times and the syntax should feel very natural afterwards. Understanding what the `aes` command is doing is the most important: it's mapping a set of features to the plot, and then you are adding various `geom` objects that visualize those features.

There is a book: [http://ggplot2.org/book/](http://ggplot2.org/book/) if you want to get more into the nitty gritty.

</comment></comment></comment><comment><USER8> Subtitles and bar chart stack order are _huge_ because the existing way of doing them is hard to maintain with a consistent behavior. (the former requires wrapping the title using an expression function, the latter was _broken_ in 2.0.0 when the order parameter was removed, and setting the order in the factor directly did not work consistently)

<comment><USER9> Honestly, I'd be fine with stacked bar charts being completely removed as a feature. I have a hard time imagining a situation when they are the best plot to use.

<comment><USER8> Stacked bar charts are the best way to represent percentage proportions without using an pie chart. (Incidentially, pie charts in ggplot2 are stacked bar charts transformed with polar coordinates)

</comment></comment></comment><comment><USER10> Looks like a lot of great quality-of-life features made it into this update. There will be plenty of questions on Stackoverflow with messy hacky answers that now don't even need to be asked.

</comment><comment><USER11> Reading elsewhere, it sounds possible that more attention for `ggvis` is on the menu once `ggplot2` is in a more complete form, so I'd hoped that `ggplot2` would adopt "%>%" pipes, rather than "+" for composing plots.

It would be convenient to adopt one mental model that would be more easily transferable between the two, as well as `ddplyr`, `tidyr`, etc.

<comment><USER7> It doesn't make sense to use `%>%` in plots IMO because that implies you're going to wrap the lhs in the function denoted in the rhs (as the pipe is treated in dplyr/magrittr).

<comment><USER11> Take a look at the ggvis syntax here: [http://ggvis.rstudio.com/ggvis- basics.html](http://ggvis.rstudio.com/ggvis-basics.html)</comment></comment></comment>


Hammer.js: Add touch gestures to your page - <AUTHOR> http://hammerjs.github.io/

<comment><USER2> You should now that this project is abandoned and is looking for a new maintainer since January 2015: [https://github.com/hammerjs/hammer.js/issues/749](https://github.com/hammerjs/hammer.js/issues/749) (also issues on GitHub have been piling up for quite a long time).

<comment><USER3> I glanced through a number of issues and many of them were not bugs at all but more like "how do I do this?", "what's wrong with my code?" or just comments in general. Makes me wonder how many of them are actually bug reports.

Plus there's a decent number of pull requests so it looks like the community is contributing, just no one to maintain.

</comment></comment><comment><USER4> MacBookPro user - not really sure what I'm supposed to be experiencing? I can click and drag the white box and it moves back to its original position, is that it? I've tried all the standard Mac touch gestures.

Is this library only for tablets?

The page that was linked is pathetically vague.

<comment><USER5> It's for mobile touch events.

OSX doesn't expose any touch events to the browser.

</comment></comment><comment><USER6> We've been using this for a while, documentation isn't great, but it seems it's the best library for what it does.

We had particular trouble with double tap recognition early on but I believe V2 improved this substantially.

<comment><USER7> That's really good to know about the double tap functionality. My team was pumped on implementing this into our Rails app and had to give up because of how buggy it was. The whole experience made us extremely envious of Angular's touch directives.

</comment></comment><comment><USER8> A similar lib, but slightly different focus: [http://interactjs.io/](http://interactjs.io/)

I know this one to be very well maintained currently as evidenced here [https://gitter.im/taye/interact.js](https://gitter.im/taye/interact.js)

</comment><comment><USER9> I've used hammer.js professionally. It's small, reliable, and provides useful things like deltas. It also pairs great with mousetrap ([https://github.com/ccampbell/mousetrap](https://github.com/ccampbell/mousetrap)) for keyboard interaction. Would recommend.

</comment><comment><USER10> It's the best touch gestures for mobile library currently out there, I've tested a couple and in my current project I'm using this one! It's by far the easiest and smallest lib out there, great work guys! :)

</comment><comment><USER11> I'm missing M.C. Hammer from the older version. =(

<comment><USER12> Try pressing the button...

</comment></comment><comment><USER13> I like the design. Clean and simple, bright and bold. I like the font, and I liked red too.

<comment><USER14> I like the home button.

</comment></comment><comment><USER15> > var hammertime = new Hammer(myElement, myOptions); > hammertime.on('pan', > function(ev) { > console.log(ev); > });

This made me laugh</comment>


I do whatever I want at work and I haven't been fired yet - <AUTHOR> https://m.signalvnoise.com/i-do-whatever-i-want-at-work-and-i-havent-been-fired-yet-7aae85aa3586 <comment><USER2> In most companies I've worked, approval process is the scar tissue of years of mistakes. In every case where you need to ask for approval to do something, you can probably trace back in the company's history and find the past mistake that some goofball made that necessitated getting approval to do something like that. Someone got us sued. Someone lost us some money. We need to take _some kind_ of corrective action and the easiest solution is to simply require oversight next time.

A place where you can "do whatever you want" strikes me as a place with a very short history of mistakes.

<comment><USER3> My company has been getting a lot of talent from Amazon and Microsoft, so we are getting their "scar tissue" without any of the context, jacking up our culture. I have to do a detailed doc and plan for _everything_. It wouldn't be a big deal but we've gone from 700 to 1500 employees in just 2 years, so its been fast change.

<comment><USER4> > I have to do a detailed doc and plan for everything.

I find spending a few days writing a detailed, in-depth design document for a given implementation often saves weeks or more of development. In the immediate term it takes longer. In the medium to longer term a thorough design can often lead to fewer bugs, less severe bugs, and less complicated enhancement development.

What you describe is what _engineering_ is, at least partly. Your attitude, which is quite common, is why I scoff at calling what this industry does "software engineering". It's rarely as thoughtful, careful and detailed as engineering requires.

Not that that is a bad thing. Often what a business in this industry is making just isn't complicated enough to need much beyond simplistic hacking at a terminal.

<comment><USER5> This is the best solution when you are building a whole _system_ from scratch. If you have to build a feature or whatever it is then it already got implicit permission from the jira sponsor or the product owner or whatever stakeholders are in charge. And for a feature I don't have to lose days writing long documents. I just think how it should work, I discuss it with the senior members of the team and with the stakeholders if needed. From that point on I just speak with the users to understand exactly what they want showing them whatever I'm building to have an early feedback. I think that is much more productive spending several days in a tight feedback cycle with your users than spending the same amount of times drafting the architecture in a document.

<comment><USER4> How do you get from "I just think how it should work" to "discuss it with the senior members"? You've got notes, at the very least, that you've jotted down about the proposed changes. Guess what: that's the draft of a design document! If you've taken any reasonably thoughtful approach you'll have just a little more work to make it formal, invite formal comments and feedback, etc. Not weeks "drafting an architecture" document, just days (or possibly hours, if it's a small change). That's a small price in time to pay for such a big dividend down the road.

</comment></comment></comment></comment></comment><comment><USER6> >If you can make a decision and you don't think it's going to get you fired, just do it.

This advice only applies to people with enough experience.

I'm thinking of a certain ex-employee that followed that advice all the time, despite us constantly correcting him. Even on their final day, they was still insisting that they was doing good work.

To this day, we are still finding code they wrote or modified that is wrong or broken in horrible ways.

Why? Because they didn't have the experience to know the difference between a quick fix and a good fix, and when to employ them. (Hint: The "quick fix" is almost never good enough.)

My personal line is a long way away from "Will it get me fired?" and I've got decades of experience.

I've always said that programming is all about making assumptions. And I'll frequently send off an email stating some assumption I'm making and start coding based on that assumption. If I get corrected, I can change pretty quickly. But I'm usually right.

But just not asking? Forget it. If I'm unsure enough to bother with sending a 2-line email, it's worth asking.

<comment><USER7> Isn't the solution to this a good code review process? Even the author of the article states "I either wrote up a plan and shared it beforehand, or I just announced what I'd done after it was completed". This is very similar to asking someone review your code.

<comment><USER6> Again, my comment was about having the experience to make these decisions properly. I'm sure he didn't tell people about every single decision he made, only the ones he needed validation on.

However, I noticed that he only told others after it was completed sometimes, which is often far too late.

Experience lets you know which ones that's okay for, and which ones it isn't.

</comment></comment></comment><comment><USER8> I think this depends a lot on two people - your immediate manager, and their immediate manager. I've been lucky to have great management, and I've been able to do a lot of stuff that the article talks about, and I work in a stodgy BigCo (old school tech co).

I once went to 99Designs and paid $2000 for a designer to redo a certain set of pages on our corporate site. Start to finish, the project took 27 days. This is insanely fast in our context - the usual process would have taken 6-8 months, and at least $100,000. The large agency we work with would have dedicated a team, spun up a project, set up a series of meetings...

To be fair, I get the need for process and I totally get the value of working that way, but it's nice to have management that backs you up when you really need to get something done fast. And yes, once the need for those pages was over (conference related), I made sure they were handed over to the right team for long term management, and not just abandoned as orphan pages.

<comment><USER9> Well played hacking the system.

</comment></comment><comment><USER10> Assuming the people doing this have experienced and are trustworthy, this is honestly what companies need in a _limited_ capacity, even if they don't think they need it.

Over the course of my relatively short career so far (7 years?), almost every single "big win" has been because something was bugging the crap out of me, and I just decided to do something about it.

The key is to do this kind of autonomous stuff while _still_ delivering things people expect you to do, unless/until your peers and management are clear on the value you bring just doing stuff on your own all the time.

<comment><USER11> Also, the two things that push most people towards entrepreneurship is money and autonomy in their work.

If you can give employees these things, they will stick around longer.

</comment></comment><comment><USER12> This only works when you have the hiring process dialed in and you're selecting the right candidates to work from you.

<comment><USER13> Exactly. I once had the conversation about bottom-up vs top-down decision making with my CEO, and his point was essentially that the people we've hired can't be trusted with that level of responsibility. For me this was proof that our hiring process needed to improve, for him it was proof that our supervision process needed to improve.

There's a great book about companies run through bottom-up decision making called _Reinventing Organizations_. My take away was that bottom up can work at any scale, but it requires true believers at the top who are constantly working hard at making themselves unnecessary. Once the true believers walk out organizations naturally revert to hierarchical decision-making.

<comment><USER14> The best advice I received from an old manager when I moved into management was that if I wanted to achieve anything my primary goal was to make myself and my position redundant. Hiring and empowering the right people is the only way to achieve this, its not easy but its definitely worth it. When you can truly trust the people you are responsible for its a different game.

</comment></comment></comment><comment><USER15> This wouldn't work for 90% of companies. You cannot do whatever you want in a PCI environment, or a HIPAA compliant environment. It also boils down to your managers, product managers etc.. Do they micromanage? Is your focus shifting all the time because new high priorities tasks are coming your way?

If so, I would never feel confident in doing whatever I want, as I know I wouldn't be able to put 100% of my focus on it, and probably forget something important that could screw a lot of things up.

</comment><comment><USER16> I wonder how many programmers secretly work on their pet projects during work time.

<comment><USER17> And I wonder how many companies have benefited from the experience said programmers gained while working on pet projects...

<comment><USER18> I look at it like taking a walk, or a smoker taking a smoke break. That small reprieve, the 15 minutes I take working on a side project, or tinkering with something for fun, rejuvenates me and gets me jazzed about the task at hand when I get back to it. That's a productivity booster, and ultimately a benefit.

<comment><USER19> A rationalization that's likely to get you fired if you were to own up to it publicly. Although it's true, the company would benefit from you feeling excited about the task at hand.

</comment></comment></comment></comment><comment><USER20> I can't help but think having such autonomy is tied to profitability. I'm sure there are plenty of examples where an employee at a profitable company doesn't have autonomy. But how many have autonomy where there's not profitability?

<comment><USER21> I think you're close to the mark, but it's less about profitability specifically, and more about growth. A company that is focused on growing as fast as possible, dominating a market, and generating a favourable outcome for investors is only going to get there through big audacious bets in terms of product strategy. If you need to get 3x as large as you are a year from now, no amount of small tweaks for better user experience from individual developers is going to get you there. Instead, you'll find large numbers of developers (or maybe even the entire team at smaller shops) all working towards big, flashy advancements.

There's a relationship here with profitability, for sure - companies that are profitable are likely not prioritizing growth over profit, and aren't beholden to investors who want a big exit, but the profitability is more of an indicator than the cause.

</comment></comment><comment><USER22> Sounds like an awesome place to work. I love autonomy and the ability to make my own plans and follow through with them. However, if it's a team effort then you definitely need buy in from everyone involved!

</comment><comment> d--b His boss trusts him enough to let him take his own decisions, good for him! It's definitely not great advice for every employee, or for every company though...

I mean, it's great to be able to discuss things with your boss and colleagues and take collegial decisions...

I don't understand the idea behind the post...

<comment><USER23> From the perspective of basecamp/37 signals, they've made it a point to do things which most people say "wouldn't work". And they do it and prove that it is possible.

A lot of objections one might have to their choices are usually deeply rooted in other organizational dysfunctionalities. Other companies for example may choose to hire weaker employees due to the urgency to get people sooner. Sooner is more important than correct and then you have employees you can't trust to be autonomous. Or you put people in managerial positions whose purpose is to delegate, or approve tasks as part of their monitoring duties. This goes against autonomy entirely. Basecamp for example doesn't have any real managers.

While you are right that this won't work for many larger established companies, from the perspective of people starting out (and there are a lot of them), these posts serve a purpose of raising a middle finger to the established norms of running a business. There's a purpose built around tearing down bad decisions that lead to other bad decisions that eventually lead to ineffective teams.

And that's the idea behind this post.... Probably :)

</comment></comment><comment><USER24> Their company has good cash flow and a small number of very talented employees. I don't feel like this paradigm is easily applied to organizations that either can't afford their level of talent or have thousands of employees.</comment>