CMU Computer Systems: Self-Grading Lab Assignments (2018) - <AUTHOR> http://csapp.cs.cmu.edu/3e/labs.html <comment><USER4> Former student and TA here. There is so much great stuff in this class and its assignments! Couple of highlights:

\- Data lab formally verifies all of the submissions and gives you an exact failing test case if the submission isn't correct.

\- Malloc lab is run competitively. You don't need to compete to do well, but you do if you want to do great. And the competition drives students to great feats. I know people who rewrote their inner loops in assembly to get better perf. Another built splay trees to get lower fragmentation. They both had comfortable A's in the class at the time.

\- The automated grading of assignments meant that the class could scale to many hundreds of students while the TAs could dedicate their time to office hours. Turnaround time for exams was sub-one-day.

\- The instructors are wonderful (and well dressed!) people and they ran the class expertly.

<comment><USER5> > Turnaround time for exams was sub-one-day.

What's the current status on accurately grading mistakes? From the exams I remember (Fall 2015), the exams autograded perfect answers well, but gave similar marks to nearly correct, but still wrong answers as complete gibberish. I felt that unless I had the answers exactly correct, it was hard to demonstrate my knowledge of the topic.

<comment><USER6> When I was studying software engineering, "nearly correct" answers would get you the same grade as "complete gibberish" on purpose. Partially correct programs would have no more value than completely incorrect ones.

In retrospect, I think it was crucially important for students to learn the price of their mistakes. Most of my previous classmates are reputable engineers now.

<comment><USER7> I think this is only fair if the exam takes place under similar circumstances to actual engineering (which is rarely the case).

</comment></comment></comment></comment><comment><USER8> I remember when my University copied a couple of these, I decided to go the full mile on the one where you exploit buffer overflow. I got myself a remote connection via execve, and was going to mess around, but soon realized I could also see and edit others' scores which could get me in significant trouble, so I had to make one log-scrubbing attack then stop. I'm surprised they never fixed the hole by containerizing it or something.

<comment><USER9> I ran an in-class test/competition once where students submitted C code to a web server running on my laptop. My laptop compiled and ran their code - <USER2> checked it against a test suite and graded it all live.

One student asked about security - and we got into a great discussion about permissions and what havoc he could and couldn't pull off with the restricted user account. I encouraged him to figure out how to write a fork bomb - <USER3> he got working after the test. He was nervous about it because he didn't want to get in trouble. With some reassurances he dove into API documentation and got it working. My computer totally died and needed a reboot. It was a great little teaching opportunity that I'm glad I didn't pass up

<comment><USER10> I forkbombed our server once by accident. I normally code a snippet at a time, see if it works, then go a little bit farther. Unfortunately you don't really want to have a loop with a fork in it with no exit condition. Really failed to think that one through.

(in my defense you probably should have ulimits set on a server where students are going to be logging in and working...)

<comment><USER11> The web interface to our local cloud at university became downright unusable for a week before we found that the problem was that a server on the cloud used for teaching was getting ddos'ed.

Apparently some student set up a mmorpg server and then made some enemies...

</comment></comment></comment></comment><comment><USER12> CS:APP is hands down THE book that every person interested in the low-level stuff in computer systems should own. But heads up, anyone who is considering to buy the book - please get the North American Edition, NOT the global edition.

I made the mistake of getting the Global edition, because of its considerably less cost, and because I couldn't afford the North American one - it was only after that I checked out the book site, where the authors mention that the global edition is chock full of errors [0].

I don't blame the authors, nor even the people who were responsible for 'the generation of a different set of practice and homework problems'. I can get printing the book in B&W, reducing paper quality, and publishing as a paperback to cut costs, but it's baffling why the publishers compromise on the actual quality of the content itself.

Amazon is full of similar 'PSAs' about not buying the global edition [1].

[0] [http://csapp.cs.cmu.edu/3e/errata.html](http://csapp.cs.cmu.edu/3e/errata.html)

[1] [https://www.amazon.com/Computer-Systems-Programmers- Perspect...](https://www.amazon.com/Computer-Systems-Programmers-Perspective- Edition/dp/013409266X)

</comment><comment><USER13> Ah 15-213, these labs were the most well designed assignments I ever had in college.

<comment><USER14> If I recall correctly, I believe the computer architecture course at USC ( _ducks_ ) also uses these exact CS:APP labs. I loved them, it was fun realizing partway through some of the earlier labs which type of data structure they were having you walk. Decent prep for OS, if you really dig into the malloc lab.

</comment></comment><comment><USER15> My professor for my senior operating systems class who was a CMU PhD grad, gave us these assignments (with the permission of CMU). They were some of the most important learning experiences in my undergraduate career.

</comment><comment><USER16> Didn't go to CMU, but I did take cs61 at Harvard extension last year ([https://cs61.seas.harvard.edu/site/2018/](https://cs61.seas.harvard.edu/site/2018/)). It too had some self grading assignments (time bomb). Thoroughly enjoyed that class.

</comment><comment><USER17> What are the contents of the files behind the wall? Can anyone share those files?

</comment><comment><USER18> Is there a way for non-CMU students to take complete these assignments and get scored? I worked through this book a few years back but would love the chance to do actual projects.

<comment><USER19> I worked through the book and did the actual projects, if I remember well, most of the grading logic can be run locally on your machine and is included in the projects.

</comment></comment><comment><USER20> Former head TA (Jack) here - 15-213 still remains incredibly foundational to the work I do for my job. Working with the professors of that course (who also wrote the CS:APP textbook, which I still regret never getting signed by them!) was an amazing opportunity and something I hope I never forget.

If you want some exercises to help you learn the foundations of computer systems, I honestly cannot think of a better resource than this!

</comment><comment><USER21> When I took this class many, many moons ago, the close equivalent of the "cache lab" was graded not on the number of cache misses but on the _cache hit ratio_. When I pointed the problem with this metric out to a TA he blew me off. So I turned in the original code plus a loop that read the same volatile value a few billion times. It took a long time for the cache simulator to grade, but they dutifully gave me a very high grade (something like 200%) on the lab :-)

</comment><comment><USER22> These look fun; in particular the "Attack Lab".

Dockerfiles might be helpful and easy to keep updated. Alpine Linux or just busybox are probably sufficient?

The instructor set could extend FROM the assignment image and run a few tests with e.g. testinfra (pytest)

You can also test code written in C with gtest.

I haven't read through all of the materials: are there suggested (automated) fuzzing tools? Does OSS-Fuzz solve?

Are there references to CWE and/or the SEI CERT C Coding Standard rules? [https://wiki.sei.cmu.edu/confluence/plugins/servlet/mobile?c...](https://wiki.sei.cmu.edu/confluence/plugins/servlet/mobile?contentId=87152044#content/view/87152044)

"How could we have changed our development process to catch these bugs/vulns before release?"

"If we have 100% [...] test coverage, would that mean we've prevented these vulns?"

What about 200%?

<comment> yjftsjthsd-h What on earth would 200% test coverage mean?

<comment><USER23> Coverage for all the code that was written, and all the code that has yet to be typed, of course.

All thanks to quantum computing :)

<comment><USER22> ⟨100%| + |100%⟩ = 200%!

(Even code with 100% branch coverage may have common weaknesses like those that these (great) labs have students exploit)

</comment></comment></comment></comment><comment><USER24> Former 15-213 student as well. This was one of the best CS classes I've ever had the pleasure of taking.

Also worth noting the plagiarism detector actually did its job, at least in some of the most egregious cases that I heard of.

</comment><comment><USER25> 15-213 you beauty...

</comment><comment><USER26> These would have been fun!

For the bomb one, are there protections for taking the binary and running it in an isolated environment?

<comment><USER27> You set a breakpoint at the phone-home routine.

<comment><USER28> My friends and I went the extra mile and overwrote the call to the server with nops.

</comment></comment></comment><comment><USER29> Took the CSAPP course at Peking University. Easily the most valuable course through 4 years...

</comment><comment><USER30> Another CMU alum here. Just looking at this gave me PTSD.

213, man. It's a killer.

</comment><comment><USER31> Oh malloc lab.

<comment><USER32> Oh, good times. By the way, CMU's recitation class ppt for this lab is fucking hilarious: [http://www.cs.cmu.edu/afs/cs/academic/class/15213-s08/www/re...](http://www.cs.cmu.edu/afs/cs/academic/class/15213-s08/www/recitation/mallocadvice.pdf)</comment></comment>


Evolving Our License for the Next Wave of MetaMask Users - <AUTHOR> https://medium.com/metamask/evolving-our-license-for-the-next-wave-of-metamask-users-81b0b494c09a <comment><USER2> Are they still sending failed transactions and wallet addresses to their 3rd party crash reporting service?</comment>


Microsoft Won't Fix a Skype Bug - <AUTHOR> https://9to5mac.com/2018/02/13/skype-bug-grants-system-access-microsoft-too-lazy-to-fix/ <comment><USER2> The Register reports that the flaw was fixed back in October and only versions 7.40 and earlier are vulnerable. The latest version (8.x) is fine.

[https://www.theregister.co.uk/2018/02/15/microsoft_skype_fix...](https://www.theregister.co.uk/2018/02/15/microsoft_skype_fixed/)</comment>


There's No Such Thing as Knowing Your Computer 'All the Way to the Bottom' - <AUTHOR> https://codefol.io/posts/no-such-thing-as-knowing-coding-all-the-way-to-the-bottom/ <comment><USER2> I disagree. If it can be built, it can be known, top to bottom.

Not everyone may want to know all the gory details, and nobody wants to get called on to explain it, but it can be, and should be done as a matter of course.

The issue is that the industry will kick and scream to keep from being held accountable to providing the customer with a way to be able to parse that information, and no one wants to hire people to document, because that isn't seen as positive value creation in today's corporate climate. It won't ever be short of a legal requirement to do so. That legal requirement will be fought tooth and nail on the basis of wanting to continue to protect trade secrets.

Nothing keeps a device from having it's actions fully elucidated except an unwillingness to abolish information asymmetry.

<comment><USER3> It would take many human lifetimes to learn how your computer works from the web frontend down to the semiconductor physics.

<comment><USER4> It depends how in-depth you want to go.

On my four year electronic engineering course, we did semiconductor physics, principles of electromagnetism, IC design, digital logic using semiconductors, abstract digital logic, processors and systems programming with ARM assembly, transmission lines, digital comms systems (stuff like network throughput, dish areas, network capacity, information theory), the Ethernet standard, packet switching algorithms, TCP/IP, network programming with C, high level languages (Python, Java), and on my own for degree projects I did stuff with PostgreSQL, FastCGI, Elixir, HTTP and Javascript. There were optional modules for stuff like nanotech, physical modelling synthesis, control theory, audio programming for iOS, etc.

Combine that four year degree with a computer science degree (so eight years total), and I think you'd have a pretty in-depth overview of the principles of every part of the stack from React down to silicon, boron and phosphorus, albeit not all the implementation details.

<comment><USER5> Agressive EEs can cover a lot. I started out designing chips. Agressive CS (Compilers, OS, Data Structures, Databases) can cover a lot. Some of the modern stacks dependencies (npm, blegh) leave you with a lot to comb through. Modern compiler's ability to deal with various level caches and memory architectures, and look-aheads, and TLBs, and what not, can boggle the mind a bit.

One can pretty easily understand all of the sub-systems in isolation (well, it takes more than a couple of years!), but not on ALL of the systems, and complex systems, in total are more than any one mind can reason about in, in total. Too much for one brain to contain the dependency graph.

</comment></comment></comment></comment><comment><USER6> The article makes some good points, but I feel that the headline is inaccurate.

It may be impossible to know everything, just as one cannot claim to know "all" of history, but one can make a bloody good go of it.

The main problem I've encountered personally is simply limits on human memory. Things fall out of your brain.

I studied semiconductors, electromagnetism, quantum mechanics etc as part of my Physics degree. I've written emulators, webapps, backend code, etc.

There are gaps. Not conceptual gaps but rather in implementation.

Could I write a top to bottom tutorial? Not without research, and undoubtedly subject matter experts would pick at it, but I believe I have some understanding about every level of the stack and an idea of where to pick that knowledge back up if I need to.

Is it useful?

I mean, surely that's for an individual to decide. Financially perhaps you'll be better off learning the hot new framework of the day and hobnobbing with the cool kids.

But then you could also get rich making wanky adtech optimisation. Or just starting a run of the mill exploity corp.

Me? I just want to know how it works, in endless fractal beauty.

I don't live my life based on what others consider to be "useful".

Not just in programming, either.

</comment><comment><USER7> > there's No Such Thing as Knowing Your Computer 'All the Way to the Bottom'

NAND to Tetris (www.nand2tetris.org) seems like a pretty good take on the concept.

Another one is Wirth's Oberon system, which runs on Wirth's TRM/RISC architecture, which is simple enough for students to implement in Verilog (or another HDL such as VHDL or Wirth's Lola) and compile to an FPGA.

MIPS is also simple enough to implement in Verilog over the course of an academic term and also has good tool support for languages like C and C++.

Personally I find understanding low-level system behavior to be interesting, fun, and helpful for understanding many irritating application behaviors (often errors and slowdowns) which are caused by interactions with the OS and hardware.

</comment><comment><USER8> I was recently doing some language evaluation for rewriting an existing system in Go to improve its cross-platform compatibility. One of the things I realized in this exercise was that "compiles to C" was a powerful feature - not because of C itself, since C often gets in the way of the source language's intent - but because it means that the result fits into and leverages all the C-based tooling, facilitating the desired level of platform independence.

And for a lot of projects today, "the bottom" ends with C for precisely this reason - while the fact that C is the chosen language for this task is completely arbitrary, as arbitrary as the status quo hardware paradigm of "x86 on desktops, ARM on mobile". I could imagine a universe where it was an extended form of Basic or Pascal that ruled the world instead.

Likewise, I was also looking into extending Lua with a small DSL interpreter that could accelerate certain byte-level tasks: copy around blocks of bytes, run some common algorithms quickly, define spaces for variables, apply some parameters. At first I thought of this language as a "VLIW" assembly language with a particular focus on having a big bag of tricks, but when I compared my semantics with actual hardware assemblers, I found that having no registers or stack manipulation and focusing only on direct memory addresses changed the character of it so much as to make it a different beast, one more like the "autocoders" of the 1950's: not quite ALGOL, and yet clearly headed in that direction.

All of which is to say - the more you are comfortable with compilers, the more the bottom just becomes the thing you happen to be leveraging to ship product. It isn't "the real stuff" until it becomes the specification language. Some things, like how numeric types are defined in hardware, force the terms of specification way up the stack so that the hardware may be used at its capacity. But that in itself is an "essential complexity" in computing, where the physical realities coincide with the desired programming model. When it's software defining the spec, as in our libc-and-Javascript-driven universe, that's more akin to social complexity, but it produces the same kinds of effects.

</comment><comment><USER9> Maybe it's not worth learning C as a programming language, but it's worth learning the C standard library, as every language links it in and most of the functionality is available. I'd also say to throw in a cursory reading of the Linux kernel's syscalls as exposed through glibc and a tutorial on how to go from glibc to the kernel implementation of the syscall. It's not strictly necessary for game development or frontend website design, but in games you'll end up learning C++ anyway and with websites everyone seems to migrate into the backend servers eventually or else quit programming and do graphics design.

As far as operating systems, Rust does seem to be a better entry point, with the Redox OS and general community.

</comment><comment><USER10> The main reason to dig down is to uncover faults and leaks in abstractions, which is something you absolutely _will_ have to do in the fullness of time.

A corollary reason is to improve your "mechanical sympathy" when writing high- performance code.

Many of what we once called "application devs" \-- now more commonly "full- stack devs" \-- will never have to discover real mechanical sympathy, which is fine. But there is a glass floor for such people.

</comment><comment><USER11> There is one main reason to learn C: everything can interface with C, and you may need to extend your language's capabilities.

There is one main reason to learn assembly: things WILL eventually go wrong, to the point that you need to debug at the machine level in order to understand what's going on.

Also, many debug tools such as ptrace are primarily accessed through C, and require a basic understanding of the assembler view of the machine.

</comment><comment><USER7> I realize that it's a bit like saying that COBOL programmers will never have trouble finding work (probably mostly true) but until Linux is rewritten in Rust and macOS/Xnu is rewritten in Swift, C is going to be essential for anyone who has to work with UNIX-like OS kernels and associated drivers.

I would also argue that C is pretty essential for anyone who wants to use EBPF/IOvisor.

</comment><comment><USER12> This is an excellent article and I rarely see people giving this advise. At the end of the day there is no bottom in general. And it's not clear why that's the case unless you have a reasonable amount of experience in electrical engineering / manufacturering and computer design. An interpreter or a compiler is a computer. Anything lower than that is just implementation details.

</comment><comment><USER13> I don't agree. At all. Forget C/C++. Build a microprocessor in VHDL or Verilog. This is a common task in many universities with better EE or CSE disciplines. Do these folks understand Java? Or modern C/C++. Well they do much better than the folks that learn at the Java level and work up.

</comment><comment><USER14> This lives on the assumption (one I often see repeated) that everyone is writing code to the same requirements and implementation details as you. If I'm in a washing machine I;m in total control (or bloody well should be).

<comment><USER15> What you say is true.

I would point out that the vast bulk of software in the entire world is vertical market business software. Vertical market meaning for a limited kind of user, versus horizontal software such as Word or Excel that everyone might use. Vertical market software is literally everywhere and largely invisible. Your public library has custom software. Your hospital. Ever go to get a blood draw and notice the operator is using specialized software. The place that changes the oil in your car. A lawyer's office. Cabinetry makers have custom specialized software. Cities using utility billing software. Keeps track of what gas meters (models, serial numbers) and whether and where installed, tracks the meter usage and generates bills. Rental car companies and airlines have custom software. Hotels have custom software. Restaurants software may have a map of the tables and what "state" they are in, with a list of customers in line. Some of these categories like City, Healthcare, School Districts, and other specialized software are entire industries unto themselves with huge software companies that build software just for these specific industries.

Much of this software is now web based. Because web based is centrally controlled. Zero install at the workstation and zero maintenance at all the workstations. All you need is an OS and a browser. (hint: chromebooks in some cases, and iPads, etc)

Is it any surprise that languages like Java have been the top languages year after year? It's where the jobs are.

It's not the same thing as microcontrollers. And microcontrollers are in lots of things around us. But they get built once, and replicated millions of times. The vertical market business software has thousands of specialized categories, all different, and with ever changing regulatory requirements (federal and state) and reporting requirements, etc. An accounting system with a large complex payroll module probably pays your paycheck. And is integrated with a human resources system. And benefits system.

All this software is written thinking at a higher level of abstraction some distance from the hardware. Transactions. Currency amounts and conversion. Databases. Yes, it may sound boring, but it's what makes the world go around and is mostly invisible.

It's also very stable. Like decades of employment stable.

<comment><USER14> Probably mis-represented myself. For my sins 30 odd years of MS stack. Doing exactly the money market stuff you're talking about (50bn$ PnL system on last job). I know you know, but how many people understand the transaction isolation model in SQL server (or how to write your own transaction compensator?). Wtf when a supposed DB admin won't allow MARS. Deeper knowledge, deeper understanding. You can't argue - I kinda Know this is you.

</comment></comment></comment><comment><USER16> None who doesn't care about it will ever learn it just to become a good developer.

Never seen this.

I learned it out of curiosity.</comment>


PhpStorm & WebStorm 5.0 Early Access Program started - <AUTHOR> http://blog.jetbrains.com/webide/2012/07/phpstorm-webstorm-5-0-early-access-program-started/

<comment><USER2> YES! I love PhpStorm, one of the best IDE's around for PHP development so I am glad to see they've addressed a few major issues as well as added in support for PHP 5.4 goodness amongst other nice additions like Node.JS.

</comment><comment><USER3> I will never buy any single product from jetbrains again. The last one I bought is rubymine 4. It is buggy and slow. I bought it for the deployment features but turns out I was completely wrong as they didn't support capistrano. now they do (supposedly) but I have to pay to upgrade to the 4.5 this is not happening, there is no replacement for the command line and a simple editor such as sublime text, textmate,..

<comment><USER4> I would never deny that Jetbrains ui's are buggy, but a lot of the tools that the IDE provides are slick as heck. I've tried popular editors like textmate and sublime, and Jetbrains' tools' are far better in my opinion. Some of my favorites pieces are it's super fast indexed search, the diff engine for merging conflicts, file history with annotations, and nice version control integration. It makes it very easy to traverse through a large legacy code base.

Some downsides are different command shortcuts across the different products (command+shift+f vs ctrl+shift+f) yes I can configure this, but it would be nice if it was more unified. Also, for Rubymine, I would always go back to the command line for certain things ruby based.

</comment></comment><comment><USER5> SFTP not handling symlinks has been the one headache I've had with PhpStorm recently. Glad to see it getting fixed.

It's also awesome to see Symfony2 support is coming along and more and more ways for the IDE to determine what type a variable is.

<comment><AUTHOR> I too am most excited about the symfony2 support. Especially with regards to type hinting from the dependency injection container.

</comment></comment><comment><USER6> I have to say I love using this IDE, I'm doing a lot of PHP now and it's the closest to Visual Studio that I can get.

</comment><comment><USER7> I'm from the dreamers camp. I would love to use Sublime Text on a regular basis. But, it's core mentality of keeping things slim forces me to use PHP Storm.

Now, I do like PHP Storm, there are quite a few features that I find useful. Primary of which is the debugger.

</comment><comment><USER8> Both times I tried PhpStorm I encountered showstopping bugs that were pretty damn obvious.

This was not some free beta, but a product I'm supposed to fork over a license fee for, and hope the issues get solved within a year. That way of doing business is just not on.

</comment><comment><USER9> Isn't PHPStorm 4.0 still in beta? Or just come off beta recently? Last time I used it, it was quite buggy, and that was only a few months ago.

Now there is 5.0, Firefox has messed up our release versioning.

<comment><USER6> 4 has been released for a bit, I haven't run into any real bugs in quite some time.

5 is just in Early Access, it'll be there for many months to come. Usually when they start an EAP it's pretty beta still.</comment></comment>


Show HN: weship(io) RESTful shipping API - <AUTHOR> https://weship.io

<comment><USER2> Very nice idea, but useless to me since it's US only. Is there a global or at least europe support planned?

<comment><AUTHOR> We are planning outbound and inbound US shipments soon but not within Europe. Did you check UK based www.parcel2go.com?

<comment><USER2> Mhm, there seems to be no service offering that for Germany. I even checked the local Postservice (DHL) and their API doesn't seem to support that kind of features

<comment><AUTHOR> Probably they cover UK only.</comment></comment></comment></comment>


Design is losing its seat at the table - <AUTHOR> http://mokriya.quora.com/Designer-Duds-Losing-Our-Seat-at-the-Table?share=1 <comment><USER2> Design is not how something looks. It's not pastel colors, and slick animations and cutesy UI. Design is intrinsically tied to function. Design is how you think about and solve a problem.

I go back to Dieter Rams' 10 Principles of Good Design often. [0] I've highlighted a few key ones here:

Good Design Makes a Product Useful : A product is bought to be used. It has to satisfy certain criteria, not only functional but also psychological and aesthetic. Good design emphasizes the usefulness of a product while disregarding anything that could possibly detract from it.

Good Design Makes A Product Understandable : It clarifies the product's structure. Better still, it can make the product clearly express its function by making use of the user's intuition. At best, it is self-explanatory.

The post mentions this: 'For those of us who believe in the power of design thinking to solve human problems, and to a lesser extent in the power of markets to reward solutions when the interests of consumers and businesses are correctly aligned, this was invigorating news. "

What problems are Carousel, Paper, or Jelly solving? He mentions theses question but I think he conflates pretty UI with good design when choosing these products as examples. Maybe that's a failure of the community who heralded these three as "design led apps"... but for me, these are not "well designed apps", they're pretty apps. How about Inbox, Dropbox (prime?), Periscope, Slack, IFTTT, the plethora of calendar replacements like Fantastical or Sunrise? There are so many apps that are functional as well as beautiful, why choose three objective failures?

I think design is just as important today as it has been for the past few years. We just need to be more sensitive to what counts as good design and not be distracted by rounded rectangles, lightboxes, and animations.

[0] [http://www.archdaily.com/198583/dieter-rams-10-principles- of...](http://www.archdaily.com/198583/dieter-rams-10-principles- of-%E2%80%9Cgood-design%E2%80%9D/)

<comment><USER3> > Design is not how something looks

You're right. But it certainly includes how it looks.

You can't silo off certain aspects of interaction between products and users. The visual aesthetics of a product are subjectively at the front of the line when it comes to design.

Design is a "why not both" profession. You can't have a pretty looking site that doesn't function properly and still have a great product. You also can't have a functioning site that looks like shit and still have a great product. You need all aspects of design; visual, experience, functionality, etc. to come together at the same time to deliver a great product to the end user.

<comment><USER4> >> You also can't have a functioning site that looks like shit and still have a great product.

craigslist will beg to differ

and is an example of why functioning site with shit look is better than great look with bad function

the guys at 42 floors figured this out by testing. [http://darrennix.com/our- homegrown-ab-testing-framework-at-4...](http://darrennix.com/our-homegrown-ab- testing-framework-at-42floors)

<comment><USER3> Success != a great product.

Often times users have no choice but to use the only choice. That's like saying people choose Comcast because it's a great product. No. People choose Comcast because it's the only product.

Craigslist became popular at a time when thoughtful UI design wasn't repeated or regarded as necessary.

<comment><USER4> Why is craigslist still popular when there are better looking sites around?

Why are sites like HN and the one linked earlier following a similar style.

Cause core of design != look which is how the 3 apps mentioned above seemed to be looking at.

Function needs to be the core of design.

<comment><USER3> Because all of those sites are established and have unparalleled content. There are no competitors to those websites.

<comment><USER4> established sites with good content go out of business day in and day out... that happens when they don't have a good functional design and when better options come along.

If they are the only game in town, then I will put up with bad functional design and if needed crawl on my knees to solve a problem of mine.

I remember years back trawling through multiple expertsexchange pages to solve some coding issues.. Now I don't as better options have come along...

Why is the same not happening with craigslist, cause they do the basic job well.. have a functional designed site which solves peoples problem easily.

</comment></comment></comment></comment></comment></comment></comment><comment><USER5> When your product is a solution without a real problem (which all the listed companies are, IMO), no amount of "design" will get you there. There isn't enough problem surface area to eliminate, which is where the value gets created.

Design is still killing it in a lot of places. Slack and snapchat come to mind. People want to do those things really badly, and the entire value-add of their services can be described as "get the software out of the way". That's design.

</comment><comment><USER6> Programming has been an important part of the world over the last 40 years, creating value in almost all aspects of life. But is programming losing a seat the table?

I will look at 3 apps that were programmed by programmers, and have failed. This should be enough to prove to anyone that programming is on the way out, and the future is bleak for us all.

This paragraph contains some more waffle that has nothing to do with anything. Thx for listening.

<comment><USER7> Surely the programs a good programmer creates should be immediate successes? These are thought leader programmers!

</comment></comment><comment><USER8> Design never had a seat at the table to begin with. The very idea of having design goals is largely anathema to most companies, they could never imagine actually letting a product dictate organizational proceedings.

The goal is to make money, not make a product. To make money, you figure out where to jam a lever in, then pry as much cash flow as you can from it. This is why people are worried about SEO rather than UX.

Design does not work as a competing voice in a cacaphony. It has to be the only voice, the main voice. Design _is_ the table. That was what Jobs understood, that's what he built into his company, that's why Apple is still killing it.

<comment><USER9> "It has to be the only voice"... what?

I'm a product manager at a tech company, and the job is listening to that cacophony & prioritizing. Sometimes that's design, sometimes not. It's not black and white

<comment><USER10> Program managers* make poor designers, at least in my large company. They often have no training in UX, and all their UX experience is mixed with other stuff that tends to cloud it. Having real UXDs doing the product design is much much better than "design by PM" (its like, do you want your PM to write code for the product also? of course not!)

* I know there is a difference between program and product mangers, the latter being more focused on marketing.

Edit: keeping it classy with the downvotes, clearly I struck a nerve (more citations in child post).

<comment><USER11> If you think the only difference between project and product managers is "the latter being more focused on marketing," you must work with some terrible product managers...

<comment><USER10> At my company this is true [1]. I personally don't get to work with product managers (who work in biz dev mostly and do not work with developers/researchers/etc...), only program managers.

From wiki:

> Diverse interpretations regarding the role of the product manager are the > norm. The product manager title is often used in many ways to describe > drastically different duties and responsibilities. Even within the high-tech > industry where product management is better defined, the product manager's > job description varies widely among companies. This is due to tradition and > intuitive interpretations by different individuals.

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

I only mentioned it because I was intentionally talking about project managers, who are often confused with product managers anyways, e.g. see:

[https://www.linkedin.com/grp/post/42629-100151081](https://www.linkedin.com/grp/post/42629-100151081)

[1] [http://www.quora.com/What-does-a-Microsoft-Product- Manager-d...](http://www.quora.com/What-does-a-Microsoft-Product-Manager-do)

</comment></comment></comment></comment></comment><comment><USER12> I'm increasingly of the impression that the most important aspect of product conception is figuring out how it is going to obtain users. Without a distribution strategy you don't really have a product.

<comment><USER13> Oddly, you can have absolutely no product at all, and still acheive wide 'distribution.' Think about that for a minute!

</comment></comment><comment><USER14> """ Most people make the mistake of thinking design is what it looks like. That's not what we think design is. It's not just what it looks like and feels like. Design is how it works. """

— Steve Jobs

<comment><USER15> Ironic, coming from a company with such a terrible approach to design.

"You're holding it wrong."

<comment><USER16> Or aluminium plus glass, such a brittle combination just for the sake of aesthetics.

<comment><USER17> The quote from Jobs gets thrown around pretty heavily, but I also think it is interpreted very narrow sometimes. For me, "(...) how it works" isn't just about functionality, but about "how it works on the user". Yeah, aluminium plus glass may be a brittle combination, but if people like it, it just works. And this isn't on the same level as the "how it looks", because that can be quite different. Facebook Paper for example. It looks good, it "works" well (in functionality and purpose of the app), but it just doesn't work well on the user, because the concept is all wrong.

<comment><USER18> It only "works" in the sense that users buy it because it's shiny.

Unless you're saying the only point of the iPhone is that people buy it, that isn't sufficient.

<comment><USER17> It works for Apple and how they want it to work. That's why it is designed well.

Design is very much depending on the intended outcome. Apple wants to sell devices -> design them so that they get bought (make them "shiny", as you put it ;)). Of course this is not the only point of what Apple wants, but it certainly is the biggest one.

</comment></comment></comment></comment></comment></comment><comment><USER19> IMHO, what this article boils down to is that "Design" cannot be your product's key differentiator.

Design doesn't really solve a "real problem" for the user.

Design ONLY solves an important problem FOR THE COMPANY. It enables users to navigate the product the way the company wants them to.

So does it deserve a seat at the table? Yes Does it deserve to be the king? Nope. Sorry. No really big problem solved.

</comment><comment><USER20> Regarding Carousel: it was only in the past few weeks that they finally got around to letting users exempt content.

I really wanted to like Carousel. I've tried several times, but somewhere in my Dropbox are a mess of backed up websites, most of which aren't even mine. Scrolling through the very lovely Carousel views wasn't quite as rewarding as the demos when the photos I cared about were mixed up with stock photo thumbnails, web graphics and other junk.

Dropbox bought cloud photo services SnapJoy and Loom, they've got good people. But the letting the ability to filter content fall by the wayside for years was a terrible failure of design and likely contributed to Carousel's foundering.

</comment><comment><USER21> Success is complicated.

Expecting to do well because you champion design because that's what Steve Jobs did is like expecting to do well because you yell at your workers like Steve Jobs did.

</comment><comment><USER22> The service Magic is an instance of excellent design imo. It's scrappy, clever, simple, and most importantly, there is a very clear reason to use. I can't say the same about the many of the products he listed.

</comment><comment><USER23> Interesting note is how pedantic the author is about the marketing speak of the companies he's analyzing. I find this situation all too common in early stage products -- the copy associated with the product should be very concrete and not abstract. In later stages when your users do the "concrete talking" for you, then you can start using abstract.

</comment><comment><USER24> Popularity or usage isn't the same as merit. Redesigns of apps may be absolutely amazing and objectively better but that doesn't mean they will see a lot of adoption. People don't automatically adopt things that are better. People flock to apps or interfaces like birds. That behavior doesn't tell you which things are better.

Of course, you can do a good UX design and good graphic design (both together, but they are two different aspects) and then use psychology and network effects to your advantage. Or just switch interfaces on a certain part of the users and then the rest may be jealous. Or other tricks.

Marketers want you to believe something fancy and trendy and expensive is better and so people want that status. That isn't the same as being actually better.

</comment><comment><USER25> In all my time building websites the over emphasis on design has had a negative impact on the majority of projects i have encountered.

Non-design stake holders will obsess over design to the detriment of other less interesting issues, vendors are selected on the quality of mock up not their ability to deliver or technical expertise. Designer will go for gold and disregard best practice, what the user/product actually needs and what can be delivered on time and budget.

But I (like most people) do not work for apple/dropbox/megacorp... so my anecdotes are not exactly relevant to the article.

</comment><comment><USER26> I don't think design is losing its seat at the table: most new apps are nothing _but_ design. But it would be nice if pretentiousness lost its seat at the table.

</comment><comment><USER27> " _If you gathered some of the world's best designers and gave them significant organizational support and all the resources they need, is an app which at best matches the functionality of bundled OS features from a few years ago what you'd expect?_ "

If I read an article by a professional writer, I expect sentences I can parse.

</comment><comment><USER28> The original title 'Designer Duds: Losing Our Seat at the Table' was more insightful and less clickbaity.

<comment><USER29> To me the original title is confusing. I wouldn't have known what was meant by "Designer Duds." Duds can be used to mean clothes, so it almost sounds like an article about designer clothing... haha.

</comment></comment><comment><USER30> "Design is how it works". Maybe. But engineering and software development is also about "how it works".

That Steve Jobs quote seems to have propelled a lot of people doing graphics into a broader field; if it is entirely fair and on whose expense I am not sure.

Secondly. Graphical design today is much more a commidity than it used to be.

Libraries such as Twitter Bootstrap puts professional high quality (albeit generic) graphical design into any boring old webapp. And for 90% it is good enough.

Mind you the reason d'etre for most software developed today is a set of specific tasks not aestethics, not branding or marketing. Good aesthetics may be a nice touch to add and I found that it often helps boring internal IT- projects that they look good and conway an immediate sense of quality. Luckily today it is in within the reach of the average programmer.

<comment><USER31> > "Design is how it works". Maybe. But engineering and software development is > also about "how it works".

Yes, engineering and software development include design. For example the Waterfall process explicitly has a "design phase". That phase is not only about the GUI, but about the internal architecture aka "how it works".

</comment></comment><comment><USER32> Design _should_ lose its seat at the table if it keeps chasing fads without thinking.

Here's my latest pet peeve...

Remember when the Android Gmail client first got the feature where you would drag the inbox or any list view down as if you were trying to scroll past the top of the page, and it would put a little colorful horizontal animation bar at the top of the screen while it checked for new messages, and then the messages would show up there?

This was brilliant. After all, when a list of messages is sorted with the newest on top, if you want to see an even _newer_ message you'll naturally try to look at what's above the topmost message. There's no real difference between scrolling somewhere in the midst of the list and scrolling when you're already at the top: if you drag the list down, you want to see something newer than what is currently displayed.

Then Material Design came along and turned that unobtrusive animated bar at the top into a circle thing that follows you and spins as you drag down and then spins back when you let go. Unlike the animation bar which was displayed _exactly where any new messages would appear_ , the circle jumps up and down saying "Look at me! Look at me!" In fact, the spinning circle obstructs your view of the messages in the list: "Don't look at those messages! I, the spinning circle, am much more important!" A far cry from the previous unobtrusive animated bar.

But even though the visual appearance became annoying, at least the gesture still did the right thing.

Part of what made this gesture work is the fact that it's non-destructive: Checking for new messages has no effect on the messages already in the list on your screen.

But then things went very wrong.

The Chrome team for Android saw this and said, "Wow! Dragging down is the new way to refresh. And it has such a cool animation. We'll make that gesture refresh in Chrome too!"

So try to scroll to the top of a page and you'll get the spinning circle unless you stop just in time. If you're a very fast thinker, you may see the circle and realize you can cancel that pending reload by dragging back up a bit. (Don't let go!)

This is pure stupidity. Reloading a web page is a _destructive_ operation. You may end up with a whole new version of a dynamically generated page. It may blank out the entire page if it can't connect.

This doesn't _in any way_ resemble the nondestructive act of checking for new messages at the top of a Gmail list. It's something you're very likely to do by mistake - I've done it hundreds of times since this change rolled out.

Refreshing a web page should be something you explicitly request, not something that happens to you when you were just trying to scroll to the top of the page and accidentally dragged a little too far.

This chasing of fads is why I am fed up with Design.

<comment><USER33> You got the refresh / circle only if you scroll when you're already at the top of the page though.

</comment></comment><comment><USER34> I don't know. Aren't there are also plenty of recent successes that owe a lot of their success to good design? This feels like an attempt to slap on a grand narrative when it's really nothing more than "most new products fail". More relevant would be a study of the exceptional cases--successes--to see if there's a correlation with an improving standard of design.

</comment><comment><USER35> Design never loses. Write it down. Remember it. Simple truth is that in digital age, some computer operators with a little bit more of a visual culture are perceived as a designers. Nope. I am learning visual artistry from 6 years old. First started at school, then from old masters by serving them like a dog, then when digital era started i learned more about the medium, then learned about the business by risking it all, than learned about the psychology of perception, culture impact, age differentiation, then learned to think from user perspective, to measure reaction and get critical design data from it.... Now when i am almost 40 years old i can say that i can make a good design. Not only because of a talent, intuition or experience. Mostly because my life is a direct result of my design. And when i am designing i am a servant of people's needs. And i always learn. Write it down. Design always wins. Vanity always loses.

</comment><comment><USER36> Design is always among one of dimensions. Like others, commoditization and its limit in certain context could make it looks powerless. Even if so, when context changes, things will be on the other side of cycle again.

</comment><comment><USER37> Previous discussion: [https://news.ycombinator.com/item?id=7677031](https://news.ycombinator.com/item?id=7677031)

</comment><comment><USER38> I don't think it's fair to judge Paper too harshly based upon download metrics -- if I had to guess, Paper was an experiment designed to produce two things: a working prototype of a modernized Facebook UX as "something to point at" for further thinking, and tooling/processes that would allow the wider company to iterate towards that vision in their main app. The idea that Paper was intended to be a popular app, potentially outstripping the downloads, etc of the primary branded Facebook app seems far-fetched.

</comment><comment><USER39> User interaction and industrial design are two different things. Here are some of the icons of industrial design:

\- The Electrolux Model 30 vacuum, 1937, by Lurelle Guild.[1] This is the iconic vacuum cleaner of the 1930s-1950s. The streamlining dates it. It was a good vacuum cleaner; many survive and parts and bags are available. The computer equivalent is Pac-Man in console form.

\- The Honeywell Round thermostat, 1953, by Henry Dreyfuss.[2] Still for sale, and the world's largest selling thermostat. The Nest is a clear derivative of the classic Round.

\- The Olivetti Lettera typewriter, 1963, by Marcello Nizzoli. This is a classic in portable typewriters. Olivetti in the 1960s produced some beautiful typewriters, calculators, and computers. They didn't keep up on the electronics side, but their machines looked great. The computer equivalent is the original Macintosh.

Now, all of those were good, working products. There are other design icons that didn't.

\- The S1 locomotive, 1938, by Raymond Loewy.[4] This was a case mod for a steam locomotive, apparently based on spaceship designs from Buck Rogers comics. The link shows locomotives with and without the decorative sheet metal. As an add-on, it was a huge maintenance headache, making access to the working parts harder. It ushered in a whole era of "streamlined" steam locomotives, many of which lost their non-functional sheet metal during WWII. The software equivalent might be console video game user interfaces with lots of pretty but marginally functional shiny things.

Loewy did better with the GG-1 electric locomotive. His main contribution was to insist on welded seams rather than rivets, providing a smooth exterior. This worked better on an electric locomotive, where all the important parts are inside, not outside. The software equivalent might be the Windows Aero theme. As it turned out, though, the future of locomotive design was to ignore aesthetics entirely.

\- The GP7 locomotive, 1952, by Richard Dilworth and John Markestein.[5] This is a classic for a completely different reason. It's an ugly locomotive. It was _designed_ to be ugly. Dilworth: "I wanted to make a locomotive so ugly in appearance that no railroad would want it on its main line or anywhere near their headquarters. But they would want it out as far as possible in the back country, where it could really do useful work." The GP7 is a long narrow box with walkways on both sides and a bigger box for the cab. Everything important is easily accessible from doors all along those walkways. No need for ladders, no need for lifts, easy access for maintenance. The GP7 looked like no locomotive before it. Every Diesel freight locomotive since looks a lot like a GP7. Like Craigslist, it's brutally functional and works.

[1] [http://www.theelectroluxman.com/](http://www.theelectroluxman.com/) [2] [http://yourhome.honeywell.com/home/Products/Thermostats/Manu...](http://yourhome.honeywell.com/home/Products/Thermostats/Manual- Non-Programmable/T87+Round.htm) [3] [https://en.wikipedia.org/wiki/Olivetti_Lettera_32](https://en.wikipedia.org/wiki/Olivetti_Lettera_32) [4] [http://www.theguardian.com/artanddesign/gallery/2013/nov/05/...](http://www.theguardian.com/artanddesign/gallery/2013/nov/05/raymond- loewy-timeless-designs-in-pictures) [5] [http://www.american- rails.com/gp7.html](http://www.american-rails.com/gp7.html)</comment>


How to write a programming book - <AUTHOR> https://www.aquicarattino.com/blog/how-write-programming-book/ <comment><USER2> What pains me about programming books is that due to the market pressure the balance is skewed extremely in the direction of beginner material and there is precious little material for advanced users.

If you look at other branches of knowledge, say electronics, there is couple of books for beginners and then massive selection of highly specialized books for experts.

I get that part of this is due to multitude of languages, paradigms, frameworks, etc. but I suspect that a huge part is due to the fact that programming book writers have huge incentive to make the book palatable to absolute beginners and anything else seems to be a sure way for the project to tank.

<comment><USER3> Another thing that bothers me is that most intermediary books on a topic tend to start with a good chunk of beginner stuff. For example, many game programming books will cover a ton of beginner material at the start, same with graphics books or books on a particular programming language. I shudder to think of how much duplicated content that I will never read because I'm no longer a beginner is sitting in my bookshelf. If I buy an intermediary or advanced book, I don't need a recap giving me the absolute basics! Eg if its an intermediate-level programming language book, don't tell me how to do simple conditionals or loops or something that I definitely already know to consider an intermediate-level book...

<comment><USER4> This is why I look for gems like Professional Javascript for Web Developers[0][1]. _(I can 't speak to the latest version, I think I read the 3rd edition from 2012.)_

It's a book about Javascript that assumes you've written software in other languages before. I believe the book uses Java/C#, Python, and maybe a couple other languages as reference points.

It describes language behavior and constructs that may be new to you, and details where the familiar may differ from what you'd expect. For instance, the section on `var` and how function scoping (and hoisting) differ from block scoping was quite detailed, but I don't remember it spending a lot of time on what it meant to declare a variable or why scoping rules matter.

If the book had a beginner focus I might have seen the section on declaring variables, skimmed to see the `var` keyword, and skipped the rest. Then I'd have written a bunch of code that would bite me later, because why would you ever assume function scoping when coming from another language?

It's unfortunate that it's so difficult to find books with either an intermediate to advanced focus, or a focus on switching languages, as I think both are sorely needed in the current programming ecosystem.

[0]: [https://www.wiley.com/en- us/Professional+JavaScript+for+Web+...](https://www.wiley.com/en- us/Professional+JavaScript+for+Web+Developers%2C+4th+Edition-p-9781119366577)

[1]: [https://www.amazon.com/Professional-JavaScript-Developers- Ma...](https://www.amazon.com/Professional-JavaScript-Developers-Matt-Frisbie- ebook/dp/B07YP276S1/)

<comment><USER5> Fluent Python sounds like the same thing. It assumes experience in another language and having done the official Python tutorial.

<comment><USER4> Thanks, I'll have to check it out. I've definitely dabbled in Python but I would like to learn it properly.

</comment></comment></comment></comment></comment><comment><USER6> Generally speaking, books as a format make no sense. I have seen the financial records for number of popular tech book authors — and numbers related to them having published, for example: products, services, consulting & speaker fees, etc. If the author is trying, they make way more money from the numbers related to them publishing than the book sales.

If you like writing long form tech guides, do yourself and your audience a favor, figure out how to publish your materials for free digitally and grow an audience you have direct one-on-one access to, then allow people to order paper versions if that's what they prefer.

Then, writing a book becomes easy: grow audience, provide an outline, get feedback, write more, write testable code, get more feedback, etc.

Anything you write (as in subsection) should have a timestamp of when it was: written, rewritten, last reviewed, test, environment tested, etc.

<comment><USER7> _> Generally speaking, books as a format make no sense. _

This is such a silly assertion. Books have been one of the most effective ways for an informed author to get large, complex topics and rich experiences into a another persons head literally since the Roman Empire.

Even in today's world where we have an infinite number of other formats and media to choose from, millions of people still prefer and learn from books. The ability to encode spoken language into a series of written words that can be consumed at a pace the reader controls is one of the most powerful technologies humans have ever invented. And an author taking the time to organize an entire body of work into a single coherent linear narrative is one of the most effective tools to move information across brains.

 _> I have seen the financial records for number of popular tech book authors _

I think what you're trying to say is that _conventional tech publishers_ make no sense _economically_ , and I am inclined to agree with that. The idea that an author can do 90% of the work and get 10% of the royalties is just bananas to me. That kind of royalty sharing only made sense in a time when publishers formed a hermetically sealed cartel preventing independent authors from easily accessing bookshelves. Those days are thankfully over.

It is possible to make decent money from writing technical books if you self publish and build an audience yourself.

<comment><USER6> >> "conventional tech publishers make no sense economically" [...] "It is possible to make decent money from writing technical books if you self publish and build an audience yourself."

Do you have an example of an author doing this? (Meaning all they do is self- publish books and have disclosed financials.)

<comment><USER7> Yes, me.

My self-published book "Game Programming Patterns" has made me a lot more money every year for the past six years than I ever expected. It's not enough to live off of, at least not in an expensive city while raising a family, but it's nothing to scoff at either. I could probably make quite a bit more if I put time into marketing, supplementary materials, etc. As it is now, I just let the checks from Amazon etc. roll in and treat it as a nice bonus to my day job income.

If I lived somewhere cheaper, wrote full time, and made some adjustments in my lifestyle, I could probably get by on just my writing.

<comment><USER6> First, congratulations, thanks for publishing, thanks for sharing your experience!

Second, yes, maybe I was not clear, my advice relates to the average author on a simple straightforward method of write a book that reduces the odds of it not being of use of the audience it seeks.

Lastly, might be wrong, but it appears:

(A) at least on Amazon, your book appears to be rank in the top 20,000 of all books;

(B) you appear to have published a singular book;

(C) as you say, yourself, it does not make enough for someone to live in a major city;

(D) writing books is not your primary means of income;

—- to me, what I hearing does not conflict at all with my analysis and your example, to me is survivor bias: [https://en.m.wikipedia.org/wiki/Survivorship_bias](https://en.m.wikipedia.org/wiki/Survivorship_bias)

——

Writing multiple best selling books year after year is VERY hard to do as a means of income. There are much easier ways to earn an income and share what you know. If someone wants to do that, awesome, though I do not have advice for doing that, nor do I know of anyone else that does; that would result in publishing 1+ successful books a year. My advice is just no nonsense take on being reducing odds of book being useful, which for the average author is much more of a challenge.

<comment><USER7> All of that is true, but it's also worth balancing that with the fact that when I was writing that book, I was only spending about an hour a day on it, and now I spend zero hours a day. The long tail of passive income seems to be pretty long so far.

You're right that it will be hard for many people to make a living solely off writing technical books. But I also think it's true that you can make more money that most people realize just by not giving a traditional publisher a huge cut of it. Maybe not enough to live on, but likely enough to make it worth your while.

</comment></comment></comment></comment></comment></comment><comment><USER8> This is relevant to me because I'll likely be teaching Linear Algebra online in the Fall. I'm rethinking support materials from scratch. This article does not rethink its genre from scratch. And I nearly stopped reading, unwilling to take advice from a fixed pitch body font.

I've learned dozens of programming languages, and I find programming books increasingly unreadable. They all give me that feeling of ADHD that actual programming heals.

I've also made progress learning various human languages. No single approach works. Doing crosswords in old age doesn't fight off dementia but does make one better at doing crosswords. For language aquisition, read with the sole goal of getting better at reading. Listen with the sole goal of getting better at listening. Repeat phrases in the car as if that's a self-contained game one plays. Then trust that these separate skills will integrate as one travels; they do.

For anyone who has learned the board game of Go, it's interesting how books on Go are compartmentalized. There are books solely dedicated to short timescale tactics, for example.

After a few programming languages, one can easily absorb the "short timescale tactics" of a programming language, and still be at a loss on idiomatic ways to assemble complete programs. Just as the best mathematicans only read original literature, the best programmers simply read code. A programming book can ease the transition to reading code. We should be clear that this is our primary goal.

One experiences a more intense sensation of comprehension, reading and understanding how a short complete program works, than reading any neverending text that ambles on. Take a cue from human language aquisition: Programming books should deliver a sequence of "aha!" moments of comprehension, teaching language constructs through explanations of a sequence of cleanly separated short complete programs. Their success should be measured in terms of the enjoyability and intensity of the experience of reading code this way. Leave it to the reader to find other ways to put together the rest.

<comment><USER9> Good luck with the LA book. It is a beautiful subject with so many applications, so a great opportunity to do an original take on it.

In case this is might be helpful, here is a preview of the LA book I wrote[1] and the condensed four-page-in-small-font tutorial version[2]. You might also consider using a computer algebra system for teaching, see [3] for my take on LA using SymPy. Last but not least, I highly recommend the CMapTools software for creating concept maps, which can really summarize the field in a very compact form[4].

[1] [https://minireference.com/static/excerpts/noBSguide2LA_previ...](https://minireference.com/static/excerpts/noBSguide2LA_preview.pdf)

[2] [https://minireference.com/static/tutorials/linear_algebra_in...](https://minireference.com/static/tutorials/linear_algebra_in_4_pages.pdf)

[3] [https://github.com/minireference/noBSLAnotebooks#no- bullshit...](https://github.com/minireference/noBSLAnotebooks#no-bullshit- guide-to-linear-algebra-notebooks)

[4] [https://minireference.com/static/tutorials/conceptmap.pdf](https://minireference.com/static/tutorials/conceptmap.pdf)

</comment></comment><comment><USER10> One thing that is constantly left out of books is challenging problems with solutions for the user to cement the new ideas they've learned in actual examples. It's very easy to read along and nod your head but it's very hard (at least for me) to incorporate my new skills without memorable hands on examples.

<comment><USER11> As a reader, what I do is make up my own challenges. Do I feel comfortable modifying the code and knowing it will still run error-free?

<comment><USER12> I do the same when learning a new concept, find a little way to apply it by slightly to heavy modifying the original code until it clicks. I save those to a folder I can reference sometime in the future. I've been doing this for a really long time and it works well for me.

</comment></comment></comment><comment><USER13> I think the article is really general advice about (tech) writing, not about writing a programming book. There is very little if anything specific to programming itself, e.g. e.g. the types of code fragments you should use as examples.

Also, apart from the line:

> You can always ask feedback from people you trust to gain confidence

there is no mention of getting someone to proofread or even copy edit the book. This would also seem really important for a programming book - e.g. to check that the examples work away from the author's dev environment.

<comment><USER14> >there is no mention of getting someone to proofread or even copy edit the book. This would also seem really important for a programming book - e.g. to check that the examples work away from the author's dev environment.

You're actually talking two different things.

Someone needs to proofread/copyedit the book. Full stop. And, unless you have a partner or particularly close friend who will/can do a careful edit for you for a case of beer and a pizza, you're going to have to pay someone.

For a programming book (or other types of technical books), you probably need a technical reviewer. If it's just a sanity check for technical accuracy, colleagues etc. can probably do that. But to work through all the code in a book, again, someone will probably have to get paid.

<comment><USER15> This is a much more useful comment than the OP.

Books need review - not just a few comments on the general concept, but line by line proofreading of the English, and fact checking of every single technical statement.

This is fundamental to the process. It's not an aspiration, it's part of the writing process - because often you'll be writing content while other content is being reviewed, and feedback from both can influence the rest.

</comment></comment></comment><comment><USER16> > "If you ever start the path of writing a book, you should ask yourself why > you are doing it."

I've wanted to create a short video series for my workplace, but I'm stuck on what the approach and theme should be.

The series would be about automotive assembly, and I have a lot of things to talk about, but I keep getting stuck on what people would be interested in and what would be helpful.

<comment><USER17> Start with a round table, provide a space so that people open up about what they find confusing, try to map out the knowledge gaps.

Is this about design for manufacturing from an assembly standpoint? Would it also cover repair? The spark plugs on a VR6 are inaccessible, can you fix that?

<comment><USER16> It's about IT for Mfg, so kind of broad. Sorry about the spark plugs. Packaging is a bitch.

</comment></comment></comment><comment><USER18> "...in 24 hours"

</comment><comment><USER19> This would be interesting if I could read it. Would it be possible to display text without enabling JS?

I have read several IT books recently and they aren't good. Basic stuff like visibility of diagrams, presenting advanced subject matter but also supposedly in a way that will teach you programming, or having pages of code to illustrate something trivial.

<comment><AUTHOR> I'm working on that. I just used a stock template for the website.

<comment><USER20> Cheers! Much appreciated. :-)</comment></comment></comment>


Verizon offers iPad/MiFi Bundle on October 28, 1GB/mo for $20 no contract - <AUTHOR> http://www.apple.com/pr/library/2010/10/14ipadverizon.html

<comment><USER2> My wife had a MiFi for her Macbook, until she went to visit her family in Canada for a weekend. As far as we can tell, the Macbook decided to update itself in the hotel while she was out and had left the MiFi on. With the indicator light design on the MiFi it's not simple to tell the difference between "I'm charging" and "I'm eating up all of your allowed bandwidth at roaming rates". The result was an almost $900 bill for data roaming charges. I don't think we even exceeded her 2GB/month allowance, at least not by much.

Apparently, in Verizon's view, Canada is such a technologically backward nation that it costs an order of magnitude more to send data over their maple- syrup-soaked drunken-beaver-operated telecommunications system than it does here in the US.

There was no recourse; Verizon doesn't care why the bandwidth was used, even if it was unintentional. We canceled the contract.

EDIT: Contrasting point: for my Android, Verizon gives me unlimited data for $45/month. I use at least 1GB/month, and that's without watching videos or doing any other data-intensive stuff that I'd probably want to do on an iPad. (I don't pay the extra $20/month they want for tethering. I've found the Android is sufficient for my mobile computing needs.)

<comment><USER3> Due to the ease of unintentionally spending so much so fast, it seems like the US should have consumer protection laws in place that the mobile phone companies should at least be mandated to text or call you and let you know when you've gone $100 over your monthly bill.

<comment><USER4> from earlier today:

"The decision was the first step in a months-long process at the FCC that will ultimately result in another vote on whether carriers should be forced to alert consumers when they near their allotted limits for voice, text and data services. Carriers would be told through text and voice alerts before reaching their limits and they would be similarly warned when their carrier charges the user for international roaming fees."

[http://voices.washingtonpost.com/posttech/2010/10/fcc_votes_...](http://voices.washingtonpost.com/posttech/2010/10/fcc_votes_to_explore_cell_phon.html)

<comment><USER2> That's great and I fully support it, but in my case it wouldn't have done a damn thing to help. The MiFi has its own phone number which is separate from any other accounts you have with verizon. While it can accept text messages the only way to see them is to tether the MiFi to a computer and run the verizon connection manager which has a non-default tab where you can view and send texts. An email also wouldn't have helped because my wife was attending a wedding while her computer was downloading stuff back at the hotel, so by the time she saw the email it would have been too late.

My situation wasn't a gradual build-up of data charges over a month; the entire $900 worth of charges were incurred in just a few hours while the computer was unattended. The law should cause carriers to terminate service when the limit is reached, and only allow the limit to be exceeded if the customer explicitly requests it and authorizes the charges. This is especially true for a device like the MiFi, in our modern world of automatic updates, syncronization, and applications that phone home regularly for all sorts of reasons.

</comment></comment></comment></comment><comment><USER5> 1GB per month for $20? What is this, 2001?

Of course, you just know all the Dogberts at Verizon are wagging their tails over collecting those _juicy_ overage fees.

<comment><USER6> why is wireless data so bloody expensive? what are verizons margins on $20/1GB?

<comment><USER7> Per wikipedia://GSM…

 _GSM has used a variety of voice codecs to squeeze 3.1 kHz audio into between 6.5 and 13 kbit/s._

So that is between 100k and 200k bytes per minute of speech. That gigabyte is the same radio load as 10000 minutes of talk time.

Where does one get 10000 minutes of talk time for only $20?

I think the question is _Why is wireless voice so bloody expensive‽_

<comment><USER8> (Pedantic) Verizon uses CDMA, not GSM, but the question is still a fair one. I wonder how the numbers change for CDMA, if at all.

<comment><USER7> Wikipedia says CDMA uses 3 rates, 8.5kbps, 4kbps, and 0.8kbs at the sender's choosing. It averages about 6kbps, so the numbers are about the same. There are improved codecs, but I can't tell if they are in use.

The 0.8kbps is just for encoding background noise when the person is not talking.

</comment></comment></comment></comment></comment><comment><USER9> You can get the same MiFi 2200 device from Virgin Mobile (my local BestBuy carries them) which uses Sprint's 3G network for $40/month unlimited bandwidth and no contract. I bought one last month for a road trip and love it.

<comment><USER10> I have the Virgin MiFi in NYC, and the service here is terrible.

The connection from the MiFi to 3G drops every 20 minutes or so, and the connection from the iPad/MacBook to the MiFi drops 2-3 times a day. The latter means I need to reboot the device and re-enter my admin details 2-3 times a day. When it does work, the connection is so slow I cannot watch YouTube videos or stay connected to any chat service. The badness seems tied to the time of day. I can sometimes get stuff done early in the morning on Saturday and Sunday. Any other time of the week it's mostly unusable.

If the MiFi still seems like a good deal to you (maybe it works fine outside of NYC), please contact me in my profile, I'll sell you mine for 50 bucks.

<comment><USER11> That is a good deal.

[http://www.bestbuy.com/site/Virgin+Mobile+-+MiFi+2200+Wirele...](http://www.bestbuy.com/site/Virgin+Mobile+-+MiFi+2200+Wireless+Router/9919286.p?id=1218195439442&skuId=9919286)

</comment></comment></comment><comment><USER12> So they're tacking on $130 to the price of the iPad to cover the device? I like my setup much better ...

I have the iPad WiFi coupled with Virgin's MiFi which is $150 + $40/mo for _unlimited_ bandwidth (on Sprint's network). No worries about overages, works great everywhere I've been and you don't even pay for months you don't use it.

Most Best Buy stores have them. [http://www.virginmobileusa.com/mobile- broadband/mifi-2200.ht...](http://www.virginmobileusa.com/mobile- broadband/mifi-2200.html)

</comment><comment><USER7> The bundle is costing about $130 more than the iPad, plus whatever sliver of profit they get on the iPad wholesale. No risk taken by Verizon, no need for a contract.

</comment><comment><USER13> I have an iPad and a MiFi from 3 and it's a good combination for occasional 3G access (most of the locations I use my iPad at have WiFi).

The MiFi with 8GB PAYG was about £70 whereas a 3G capable iPad is £100 more than the WiFi models here in the UK - also means I can have other devices (laptops/ipod) on the MiFi when required.

[Edit: I would never get a MiFi on contract - PAYG works fine with no risk of silly bills]

<comment><USER14> Yes but the £100 is a one off cost.

<comment><USER13> The £70 for the MiFi is a one off cost - you still have to pay for the data in both cases.

</comment></comment></comment><comment><USER15> Verizon working with Apple: Does this just validate all those rumors of an iPhone next month on Verizon?

<comment><USER16> I think it's safe to assume that. It shows that Apple and Verizon don't have as terrible a blood feud as some had thought. In fact, the offer looks somewhat... desperate. It's blatantly anti-consumer (lug around a MiFi and pay for the privilege!) in comparison to the AT&T offering. I wonder if it's not part of some contractual agreement from Apple: "Alright, we'll give you the iPhone, but we want iPads in Verizon stores this holiday season, and [we don't have the CDMA chips ready yet/don't want to announce we have CDMA chips yet]. What are you going to do?"

<comment><USER17> It's hardly anti-consumer. For the price of a 3G iPad, you get an equivalent Wi-Fi only iPad and a MiFi that all your other devices can use. I would have bought this in a heartbeat over my 3G if it had been available in April.

<comment><USER18> Was this option _not_ available? It seems like the only convenience is the bundling here, or were Mifis never without contract before?

<comment><USER19> I'm pretty sure Verizon's MiFi is contract only (and $60 for 5GB data). Virgin's just recently became unlimited, but I /think/ it's always been contract-free, it just used to be 5GB.

Virgin's got a public awareness problem (at least among the people I know), however, so for most people I bet the only known options were from Sprint, Verizon, AT&T, etc.

</comment></comment></comment></comment></comment><comment><USER20> ".. MiFi 2200 is small enough to fit in a pocket and allows customers to create a personal _Wi-Fi cloud_ capable of sharing the high-speed Internet .. "

Wait, what?</comment>


Site with future Vulkan tutorials for beginners - <AUTHOR> https://learnvulkan.com/ <comment><USER3> The author's earlier project, learnopengl.com, helped me catch up to modern OpenGL after having been away from OpenGL since shortly after it became Open. (I learned iris GL first.) Looking forward to the Vulkan version.

<comment><USER4> Yeah it's a great resource. I'm eagerly awaiting this Vulkan version

</comment></comment><comment><USER5> I found the learnopengl.com web site to be an amazing resource, it is of similar quality to a good book! Thanks Mr. De Vries.

<comment><USER6> Oh, it's the same author? I'm definitely looking forward to this, then.

</comment></comment><comment><USER7> Right now Google Analytics is loaded but there is no tracking code configured! Not the biggest fan of trackers but definitely would want that configured if my post would be on the HN front page.

</comment><comment><USER8> Somewhat disappointed that it's yet another book about Vulkan _graphics_.

I want Vulkan _compute_.

<comment><USER9> Why would you want that exactly rather than CUDA or OpenCL?

Although I haven't written a compute shader yet, compute in Vulkan looks trivial to use once you have waged your initial battles against the rendering pipeline setup. Most of the complexity with Vulkan lies in understanding descriptor sets, pipeline layouts and pipeline objects. I find that the Vulkan interface is remarkably consistent once you get over the initial - <USER2> substantial - hurdles.

<comment><USER10> Because Vulkan is cross-device, cross-platform. I dont want to tied to the Desktop or to Nvidia.

Vulkan Compute shaders work in recent Android devices and on every Windows/Linux PC that has a <5 year old dedicated GPU. And for iOS/OSX there is an interop layer in the works that will enable Vulkan over Metal.

<comment><USER9> Apple has direct support for OpenCL. Why would you want to use a Metal wrapper instead?

<comment><USER11> iOS doesn't support OpenCL

<comment><USER9> Oh, I did not know that. Still, using Vulkan strictly for its compute shaders sounds weird to me.

</comment></comment></comment></comment></comment></comment><comment><USER12> I was really hoping to live long and prosper :-/

</comment><comment><USER13> Well, I just bought OpenGL SuperBible and was eventually going to go about making a simple game engine from scratch and learn the linear algebra required for graphics engines.

Would anyone still suggest learning OpenGL/building a graphics pipeline or just proceeding on to Kronos's Vulkan?

<comment><USER14> opengl, possibly even something higher level. Vulkan has a lot of low level stuff thats just tedious, esp for a beginner

<comment><USER15> +1, if you really care about learning just the math OpenGL is a lot simpler from an API perspective. Once you start caring about performance then dig into Vulkan to understand the various render commands/pipelines/etc.

</comment></comment></comment><comment><USER16> I wonder if there's something for people who are not game engine developers, but they need some 3D visualization for e.g. science.

In my experience it is a pain point.

<comment><USER9> While the final rendering code for visualizations may look very differently from game rendering code, the underlying techniques are exactly the same unless you are doing some really hard out of core stuff or something else that is really extreme. So I do not see the point for separate resources, to be honest. Visualization is much more about the pipeline that you execute before you start rendering.

<comment><USER16> Visualisation usually has much much smaller scope than game development. So frequent vs infrequent developer problems apply here, as in [https://news.ycombinator.com/item?id=16561901](https://news.ycombinator.com/item?id=16561901)

Any new concept or tool dependency, e.g. 3D editor or shader, is a pain point here since it increases project compexity superlinearly.

Also, many "game engines" which aim to speed up development impose a lot of constraints on client code. For example, they're not compatible with non-GL windows from same process or with external event loop. I made a mistake trying to use a few of those and impedance mismatch was really painful. Had to divest to plain OpenGL.

<comment><USER17> I mean, yeah. If you try to use a framework intended for games, it won't be a great fit for other use cases. Look into Open Scene Graph if you want a higher level API that isn't as opinionated towards games.

Vulkan isn't a higher level API though, which might be why you and the other guy are kind of talking past each other.

</comment></comment></comment></comment><comment><USER18> Great, that would be very helpful for those who want to learn Vulkan without delving into OpenGL first.

<comment><USER19> You can learn the basics of modern OpenGL and the related modern toolkits in very little time. That knowledge directly carries over.

<comment><USER18> Sure, I didn't mean it's not useful.</comment></comment></comment>


The Internet That Wasn't: Review of "The Friendly Orange Glow" by Brian Dear - <AUTHOR> https://www.nature.com/articles/d41586-017-07220-w <comment><USER2> Some quick comments on this book review from the author of the book:

1\. The vision didn't ultimately fail. It lives on in all sorts of ways today -- we just don't recognize it as having come from PLATO.

2\. The review seems almost eager to celebrate the demise of PLATO before we get a chance to know what PLATO was.

3\. I don't bemoan the failure of teaching machines: if by that the reviewer means Skinner devices.

4\. The reviewer calls the book "a worthy addition to the history of computer science" which is misleading -- the book has little to say about computer science, and computer science and computer scientists had very little (nice) to say about PLATO. This is not as book by, for, and about computer science. It's a book about a big slice of American history, a biography of a technology vision as lived through the cast of characters who lived and breathed that vision.

5\. The reviewer seemed to miss the whole point of Part II of the book, which is the most interesting and fun third of the book -- how the hacker kids took over PLATO in the 70s and brought forth what I call the "interpersonal computer revolution" before the personal computer revolution even got started. PLATO was the best early example of social computing but you'd never know it reading this NATURE review, which is a shame. I urge folks to check out the book themselves.

<comment><USER3> The review author seems to think that it was "maddening" that the PLATO team didn't see that personal computers were the way to go when they became available in the late 1970s, but I wonder if the reviewer really understands just how limited personal computers were then -- they couldn't really handle things of the sophistication of PLATO lessons until the mid 1980s at least -- and even then you'd miss out on the multiuser concepts.

</comment></comment><comment><USER2> Some additional comments about the review versus what's actually in the book. Here is a short list of SOME of the stories told in the book:

\- The birth of e-learning / computer-based education

\- The creation of time-sharing (not at MIT)

\- The invention of the gas-plasma flat-panel display for PLATO

\- The invention of touch screens for the PLATO display

\- How seeing an early prototype of the plasma display changed Alan Kay's life and led to the vision of the Dynabook

\- The secret the founders of Xerox PARC did not what you to ever know (imagine a completely different Silicon Valley today for one thing)

\- The first instance of government cyber-censorship: in 1973, the Nixon White House wanted to shut down ARPANET and PLATO due to people posting messages advocating for Nixon's impeachment

\- How early multiplayer games evolved quickly on PLATO

\- The rise of the hacker culture on PLATO in the 70s

\- The first multi-user chat room Talkomatic appears in 1973

\- So does instant messaging, in 1973

\- So do message forums in the form of PLATO Notes in 1973 (which would directly lead to Lotus Notes)

\- PLATO quickly became a teeming social hangout online, with addictive games and early net.celebrities

\- The first MUDs (multi-user dungeons) appear on PLATO long before anywhere else, despite what the history says

\- PLATO developed its own set of emoticons/emoji nearly 10 years before the :-) appeared elsewhere

\- How Control Data Corporation botched its opportunity to own personal computing and online services multiple times.

There's a ton more. Read the book.

</comment><comment><USER4> I also wrote a piece on this book a couple of weeks ago (for Motherboard) and had a chance to interview Brian for it, and I feel like Brian's comments on the matter ring true—the most relevant parts of the PLATO story were the parts that really had nothing to do with the system's development and commercial sale, but the way that users invented ways to maximize the technology they had.

One could argue that UIUC (and later Control Data) focused on the wrong system infrastructure by leaning on mainframes and ignoring the later impact of personal computers, but it risks missing out on the most interesting parts of this story, which are the ones where people who actually used the system broke its intended use case.

Pieces like these are tough to break down—summarizing a 600+-page book in a 1,000-word article isn't for the faint of heart—but considering so much of the book was spent highlighting this point, the omission of this discussion in the linked review is unfortunate.

(And for what it's worth, I'm not linking my piece because I don't come to criticize the writer or say my article is better, but because I think this context is important to highlight.)

</comment><comment><USER5> Some trivia - PLATO influenced Greenberg and Woodhead who went on to write Wizardry - which went on in turn to influence Sakaguchi who created Final Fantasy.

<comment><USER6> Mahjong solitaire also started on PLATO: [https://en.wikipedia.org/wiki/Mahjong_solitaire#Computer_gam...](https://en.wikipedia.org/wiki/Mahjong_solitaire#Computer_game_history)

<comment><USER2> I devote an entire chapter to the origins of Mah-jongg on PLATO and how it became Shanghai on Mac and PC

</comment></comment></comment><comment><USER7> Yeah i have sometimes pondered why the terminal+mainframe combo never took of like the net did. And in the end i think it comes down to "multiplexing".

Notice how some talk about having 100s of browser tabs open. This may be to one site like wikipedia, or a multitude of sites as they follwed some chain of links down a proverbial rabbit hole in search of something.

Similarly, dialing into an ISP didn't just allowe me to look up what that ISP had stored back during the early days.

I had IRC, NNTP, email, web, and new stuff sprung up almost weekly it seemed.

And for the most part i could have all of that going on a single connection.

The net was not and ends, it was a means to an ends.

This similar to how an OS, desktop or even app is not an ends, but a means to some ends. Some task i want to perform, be it calculate taxes, check news or communicate with friends or family.

<comment><USER8> There were terminal systems with integrated multiplexing. The one that survives into the modern age is the Bloomberg terminal, I suppose.

The great advantage of the Internet is that it _doesn 't_ have integrated billing. This allowed marginal price to be driven to zero and the user to consume as much as they want without worry.

<comment><USER7> I admit i am not familiar with the capabilities of a Bloomberg terminal, but i have the impression that it is tied strictly to the Bloomberg service.

What i was thinking more of was how we can bring up the likes of Facebook and Twitter while only maintaining a connection to our ISP.

I guess one could go deeper down the stack, and compare packet switched and circuit switched. This in that to me a terminal connection suggests a circuit switched connection.

Yes, later on one got the idea of the terminal server. But the fundamental idea of a terminal, at least at the time, was that of a very intimate connection between terminal and a (rather bulky) computer.

</comment></comment></comment><comment><USER9> In the late 90s, my high school used a system called NovaNET, which was based on PLATO. It was used for individual learning, special education, etc. I learned a bit of Russian with it, other kids did remedial math and English, and some just played games. It used a Windows client to connect to the NovaNET "mainframe"(?), had some color graphics, and supported Cyrillic. It only shut down in 2015: [http://www.platohistory.org/blog/2015/08/august-31-2015-the-...](http://www.platohistory.org/blog/2015/08/august-31-2015-the- end-of-the-road-for-novanet.html)

</comment><comment><USER10> There really should be at least a mention of Minitel in articles like these.

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

</comment><comment><USER11> > Unlike ARPANET, PLATO was not designed to be a seed that sprouted into a > tree of networked computing. Rather, it was a single branch that grew in the > wrong direction, and subsequently withered.

I'd disagree to an extent, as multiple PLATO sites, each with its own CDC mainframe host, were networked with one another. The point stands that the terminals-into-mainframes paradigm persisted, but almost anything that would have been on ARPAnet in that era would have been a large (VAX-class or bigger) system save for the lucky few with Sun workstations.

I was at UIUC in the mid-1980s, and I thought it odd that PLATO and ARPAnet were isolated from one another. Usenet was available via the "notes" client that mimicked PLATO notes in style, but was never linked to PLATO. I guess it didn't help that PLATO lived in the CDC mainframe world and spoke neither ASCII nor EBCDIC.

Online networked discussion forums, online chat, even MMOs existed on PLATO decades ago, and not integrating it with ARPAnet was a huge wasted opportunity.

</comment><comment><USER12> Another example:

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

> The Minitel was a Videotex online service accessible through telephone > lines, and is considered one of the world's most successful pre-World Wide > Web online services.

</comment><comment><USER13> I have fond memories of PLATO, Tutor, and AIDS. There's gotta be an avatar port somewhere...

<comment><USER14> There's a full emulated PLATO mainframe online at:

[https://www.cyber1.org/](https://www.cyber1.org/)

<comment><USER15> Connecting to this system, I feel like a futuristic alien, stationed outside Earth, with hundreds of millions of times more capacity on his lap, taking a curious interest in the precious few bytes on this primitive system he's observing, and doing it all casually before breakfast.

</comment></comment></comment><comment><USER16> PLATO was the Concorde of its time. It showed how technology and social interaction would create new tools and cultures.

Since ubiquitous computing and communication were far in the future, it never had the breakthrough it deserved.</comment>


Lenovo Service Engine (LSE) BiOS Vulnerability - <AUTHOR> https://www.us-cert.gov/ncas/current-activity/2015/08/12/Lenovo-Service-Engine-LSE-BIOS-Vulnerability

<comment><AUTHOR> "Certain Lenovo personal computers contain a vulnerability in LSE (a Lenovo BIOS feature). Exploitation of this vulnerability may allow a remote attacker to take control of an affected system."</comment>


H-1B visa use cuts U.S. programmer, software engineer wages by up to 6% - <AUTHOR> http://www.computerworld.com/action/article.do?command=viewArticleBasic&articleId=9131729 <comment><USER2> Mental note: ask for 6% raise tomorrow.</comment>


The rare earth element big squeeze - <AUTHOR> http://www.salon.com/technology/how_the_world_works/2010/08/30/rare_earth_elements_and_china <comment><USER2> I had thought there was a shortage of rare earth metal deposits... but it seems that it's a shortage of processing facilities. I feel that tasmania (the triangular island at the bottom of australia) has incredible deposits of everything else, and so would probably include rare earths - but if we (australians) don't have the processing facilities, it doesn't really help.

Otherwise it would be a good investment.</comment>