skysight-inc/HackerNews huggingface dataset:
My experience as an interviewer showed that in addition to the things you listed, people often fail to grasp binary representation of numbers in a computer at all.

This most often comes up when people are asked to do some binary manipulation of numbers, i.e.:

unsigned u = 19;
unsigned v = u >> 1;

"v" is now 9, and to really understand it one must grasp how numbers are represented in binary under the hood.

People also fail to understand strings:

char* s = "string literal";

To some, it's absolutely opaque that the first byte "s" points to contains 0x73, and that represents "s" in ASCII.
This is my first open-source project in a while. I created it because I wanted something like node's inspect() but that would spit out valid JSON. The main thing that's missing from JSON's stringify() is a depth parameter, so I added that.

JSON.stringify() also can't handle circular references or reconstruct reference to the same object if it occurs more than once in the JSON object, so I added that, too.

The fancier stuff adds something called "JSON Sigils" to the JSON output, which the deserializer can interpret. To maintain backward-compatibility with all the other JSON code in the world, I created "serialize()" and "deserialize()" to handle the fanciness, but made sure "stringify() and parse()" work the way they always did (plus the depth parameter, of course).

Lastly, while I was implementing this, the internal object reference lookup mechanism looked promising as the beginning of a "jPath"-style query implementation, so I added some initial support for that.

I'll be using this as a base for some other projects I'm working on, so I'm sure I'll find and fix plenty of bugs, but please feel free to create an issue or, better yet, send me a pull request!
As a teaching assistant for a class (http://www.cs.cmu.edu/~410/) where students write a whole lot of code in C, please introduce the address-of (&) operator and explain how to obtain pointers without using malloc(). Do this before the concept of the heap is ever introduced at all.

Be careful when explaining the compiler and how a program actually runs. I've found that a lot of student problems come from "the compiler is magic" when it really isn't (maybe related to my other surprised comment below, about how people "don't get C"--they attribute too much magic to the compiler.) Maybe even emphasize that every piece of C code can be translated in a fairly easy fashion to a pretty small amount of assembly.

For the preprocessor, emphasize that it is a solely textual replacement, with no symbolic evaluation. Explain why:

#define FOO BAR + BAZ

or

#define MAX(x,y) (((x) < (y)) ? (y) : (x))

will go horribly wrong (the first in 5*FOO, the second in MAX(x++, y++)).
It was for a while with me. I was a more "mathy" CS major which meant that languages that exposed what the computer was doing were more opaque to me... but I'm not sure that I ever considered it "scary and evil."
imho, please do have a look at "expert c programming" it is quite nice. the conversational style of the book makes it very enjoyable to read.
I've noticed that since getting into G+ my Gmail tab in safari constantly has the spinner showing. (OS X) I suspect the new status bar at the top is doing some aggressive polling or long-polling to get notifications.

That said, I have not experienced any of the problems the author describes, and I think it's telling that he does not mention his system specs, or the browsers effected, or his network conditions. Maybe he's behind a firewall that munges the Accepts-Encoding header, defeating gzip.
As for dashes in a URL, it depends on whether you're constructing an URL for human typing or for search.

For example, I went to Google News, picked the top story, and looked at the story URLs. Some are opaque, but many look like this:

http://www.star-telegram.com/2011/07/02/3196643/exxon-mobil-...

If you're optimizing for search, the dash-separated words are very common. Google likes you even better if you make the most important thing first in the URL. E.g.:

http://www.sidereel.com/The_Big_Bang_Theory/season-4/episode...
It should say "Learn C and make the hard way".
No proprietary code. 100% open source
For any product, the name is part of the "user story", although to a wildly different degree. In your case, the user story starts with "Joe finds and downloads your software". And the argument here, really, is how effectively "Ninite" as a name serves that part of the story.

The linked post seems to think it fails that step. You disagree.

I am not offering a conclusion to that argument, but just wanted to position the name debate in a less vague way.
If you can't remember the name, then it's not clever.

PS: I believe only "lifestyle" products can get away with that kind of fantasy name. Things that impact and change significantly the way you do something that you do often.
The arrow operator and identifiers with leading underscores seem to be glossed over or skipped fairly often in education. It's intimidating to look at code that uses them if you don't know what they are.
My guess... The usual way. ;-)

He can still pass on the normal 5 & 16.
> it's not going to rape your family, it'll just crash

Well, if it hits undefined behavior it could in fact rape your family, the standard allows for that.
I would hazard to guess its due to two things:
1) a lack of understanding about how the machine works, and in particular the way the memory is organized; and
2) lack of explanation of why anyone would need to use pointers. Introducing pointers in the context of a linked list, or explaining call-by-reference would probably help make things more concrete.
It'll crash and potentially allow code execution if the rest of the args are user coercible. Check out the first few chapters of The Shellcoder's Handbook for examples.

Thanks for the explanation. I've never seen/had to use %d with integers. I've only used it with %.Nd for floats/doubles.
Is this .emacs file on a github somewhere? :)
I'm very excited to see Zed working on this. This exercise-driven tutorial format seems efficient and practical, but what makes this really stand out is Zed's approach to the overall goal.

I greatly appreciate an 'opinionated' programming book. I've probably heard more debates on formatting and style for C than any other language.
Right, but I've never seen it used with integers. %.2d is probably the most common format I've seen. Messing up your format strings is a common exploitation vector, so I was wondering if he had typo'd that or otherwise used it accidentally.
While this is important, it probably shouldn't be in beginner C book.

I understand all of it now, but had no idea about the stack or the x86 instructions, etc for years. I was still productive, and wasn't hindered.

The details can come later. Even big details like "how it works at the low level".

The most important part is to keep things fun; LPTHW was fun. For me, mucking about in assembly wasn't, and that sentiment seems like it might be common among new C programmers. Assembly has a way of slowly steamrolling your motivation.
If you really are that proficient, you should be able to figure out what you can skip.
http://raptjs.com/ was also ported from C++ to js :)

Note: it is a 2-player game.

Check out http://madebyevan.com/ for a bunch of other projects he has worked on.
d is for dinteger, obviously.

Edit: Actually, I finally remembered why I always use %d, and why I find seeing %i odd. While %d and %i may be the same for output with printf, they are different for input with scanf. (Also I'm not sure that %i was part of the C89/90 standard for printf, it may have been a compiler specific thing (another reason to avoid); it's defined in C99 but I don't have a copy of the 89/90 pdf.)
Sometimes due to language discrepancies, skills don't transfer and there is no easy "feel free to skip to chapter x".

For example, a conversant Python programmer's idea of string, and strings in C are 2 different things. A conversant C programmers idea of looping is different from idiomatic looping in Racket(and other lisps).
> this would also be a good format to learn new paradigms

Or you could have books dedicated to a paradigm, such as functional programming, and have examples in many languages that all serve to drive home a specific point (this is how you make something tail-recursive, perhaps), pointing out how each language is both similar and different.

"The Practice of Programming" by Kernighan and Pike is somewhat close to what I want, but is not it.
This is by the same guy who made that Linux in your browser a few weeks ago. Even this compiler was included in it.

Edit: typo.
I find myself spending a lot of time in Google+ and eventually running out of content that I can see from my friends or even incoming shares. I want to discover new content and new people in Google+ the same way I discover it on Twitter.

So I hope Google will make the search bar work for content shared within Google+ as well, not just for people. Doing this would get people to spend even more time on Google+, reading other people's opinions or discovering their shares, and perhaps even meeting them through it.

I want to read more content from other people on Google+ and I can't right now because I don't really have a good way of finding them. I hope Google was already thinking of activating this, but they didn't because at launch there wouldn't have been much content anyway.

And before anyone starts saying I should use Sparks, it doesn't work the way I'm suggesting. Sparks is more like a Google search. What I'm asking for is searching within Google+ for shares and people, just like on Twitter.
Identifiers with leading underscores? I use those for member variables... (this makes more sense in C++ without the arrow notation.)
This is interesting because it provides a mechanism for speciation that doesn't involve sequestration in a lost valley or something like that: in an already established population, once you have a herd or tribe that has translocated chromosomes floating around, that subgroup has much-lowered chances of (successful) mating outside the subgroup. That, in turn, means that any beneficial mutation that arises by random chance is kept "in-house", as it were, and refined in the crucible of inbreeding, while the subgroup begins to succesfully outcompete the rest of the local population—and that local population can't acquire the beneficial mutation because of the breeding problem.

Keep in mind the very large numbers we're dealing with when we talk about speciation events. All of recorded human history is perhaps six or eight thousand years, but a hundred thousand years is a short time frame on an evolutionary scale; so even an incredibly rare mutation will happen many times.
Oh right, I forgot they added that to the C6.283185307179586 standard.
You mean %.2f ? %d is for integers, %f is for reals (yo).
They are trying to sell business cards for dating use. It's trying to solve the issue of writing down contact details by simply passing a card to check later online.

Nice idea.
good pic <a href="http://www.f55d.com/vb/index.php/>منتديات اغاريد الشوق</a> thanx alot its seems so refliction
Isn't "C For Programmers" essentially "HOWTO Use Pointers"? Is there another really complicated idea that C has which most of its heirs do not have?
Realtime Hadoop usage at Facebook: The Complete Story
I'm in this same boat. I think that people's opinions on this probably also tend to be biased by what you're used to from a desktop-use background. the ugly, unpolished, clunky comments I just don't see. Any application weirdness has been with how a specific app handles certain behaviors (logins, new windows spawning, etc). Having worked through creating a few apps, I can agree that it's not the simplest thing to create apps which 100% abide by the android design principles, and having worked with people at my company trying to divert them away from the "let's brand it so it's obviously our style" view point to trying to abide by how Android apps function. that's quite a battle some times.
I find it is much more helpful, when teaching C, to avoid the word 'address', and call (&) the pointer-to operator. Thinking of pointers as numbers (which the address-analogy does) tends to be harmful for newer C programmers because they want to treat them like numbers.
> As the 44 chromosome man shows, this sort of change starts out pretty rare. Right now having this particular set of chromosomes is probably a 1 in 7 billion sort of thing.

Guffaw.
Well, undefined means the compiler is able to generate any code it pleases, includig, but not limited to, segfaulting, invoking NetHack, or raping your family.
I have the "learncthehardway.com" domain, waiting for Zed to stop being so insanely busy so that I can do the hand-off. :)
In my opinion the thing that many new C developers have trouble with is how large the gap between what their implementation does can be from what the standard says. I think newer C programmers are used to languages that specify a lot more than C does. Try It And See is generally not a useful response for a C question.
Strings, and why strlen(s) != the number of letters in a string (UTF-8).

Why a string must end with a 0 byte.

Binary shifting numbers, especially signed numbers.

Memory management; it's fun for the whole family, and more than just knowing how to allocate memory and store a pointer to it.

Some other points that I'm sure I'm missing.
PayPal is the most convenient for most clients, since it is reputable and used ubiquitously. The downside is that if the invoice is large > than $3000, you will lose a good chunk in PayPal fees.

Checks are great because you get to keep all the money...well, except for taxes later,

Wire Transfer (Bank) is a great option if the invoice is huge (more than $3000), to avoid costly fees.

The other options suggested above are good alternatives, too.
The first problem is the notion of absolute precision and detail required to do even the simplest task.
The next is how syntax relates to such notions.
Then comes mapping the syntax to the task.
If they don't grok variables at this point, they're not going anywhere. A lot don't.
Above all is the imperative of completion: if they don't make it work somehow, it doesn't work period. I'll try to salvage their work, tell them what to fix, and accept resubmissions - but if it doesn't work, it inherently won't pass the low bar for success.
Every piece of meat should have a picture (video?) of it being slaughtered...
Don't miss out,,, Buy new iPad2 for only $74.30  EZY-BID auctions
Don't miss out!,,, Buy new iPad2 for only $74.30 from http://www.ezy-bid.com EZY-BID auctions online for cheapest iphone4 ...Hooray!!!
Motorola Milestone 3 technical specs revealed
Motorola has revealed the features of its official Droid 3 Android smartphone, which in Europe should keep the name Milestone.
Stolen Code Is Linked to Program for Chess
Leaving it at "crash and don't do it" is enough for a beginner C book.

Mentioning code execution and shell code isn't really in the scope. If he mentions code execution, then it sort of warrants mentioning modern architecture prevent executing data as code, or the code segment is not writable on many architectures...and shell code is basically the op code that your machine executes, and injecting shell code in absence of any protecting mechanism will execute arbitrary code, and in presence of protection mechanism, it will crash.

I think just mentioning shell codes and code execution aren't doing a beginner any good. And explaining it is well out of scope. It's not that this is going to be the end all C book, and as long as the reader sticks to using proper format strings, he is good. If he doesn't, knowing about what might happen isn't doing much good either.
Enter

javascript:document.querySelectorAll(".skew1")[0].contentEditable=true;document.querySelectorAll(".skew1")[0].onkeyup = function(){ document.querySelectorAll(".skew2")[0].innerHTML = this.innerHTML };

And you can edit the big one in the top left (and its shadow!).

Really amazing what HTML5 is capable of doing (and what people is capable of do with it of course)
https://plus.google.com/115440827534646207947/posts
code/ex3.c:6: warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘double’

You should probably read this book. :-)
Moving from Python to C is a very good move. It allows you to go from programming to inner workings, everyone should have a solid knowledge of C since it give you the tools to identify and correlate aspects of other languages to reality.

I don't understand what "practicing the syntax" means (language barrier?), but I'm not suggesting that I've stopped learning, which I never will.
I feel the same way about Web 2.0 names with trendy dropped vowels. Bnter, for example - is it bantr? bntr? banter? These brands provide great fodder for typosquatters, I'm sure.
You will hear nothing about Google+ a year from now. You heard it here... well, probably not first, but you heard it here.
They are numbers (either 32-bit or 64-bit). Nothing more, nothing less. I don't understand why you wouldn't want to think of them that way.

For example...

const char* current = "ohai thar";
const char* end = current + strlen( current );

assert( end >= current );
size_t bytecount = (end - current);

(size_t is an unsigned type, so if 'end' is less than 'current', it will overflow. If you want to allow for that, use ptrdiff_t.)
For some reason Ninite sounds very familiar to me, so it's easy to remember...
There are plenty of reasons to make a shell corporation. For instance, suppose company X and company Y are working on a joint venture. It makes a lot of sense to make a shell corporation, fully owned by X and Y, to actually do the work of developing the joint venture, owning any patents for it, and licensing or marketing it.

This keeps things nice and clean for X and y, and if one or both ever want to get out they can easily sell their interest in the joint venture by simply selling their shares of the shell.

Basically, doing something in a separate corporation you own instead of doing it directly under your main corporation turns it into a single thing (your shares of the separate corporation) instead of a bunch of things.

It's essentially the business organization equivalent of a library or module.
Oh I'm totally using that.
Oh, there's a lot more tools on the way. C is one language that you could spend whole books on just the tools.
There are lots of popular python tools that do something very similar to web2py. For example visit, enthought, blender, pygame. "exec" is the only function that distinguish a purely interpreted language forma a compiled one and it is a powerful tool. I agree there are improper uses for exec but that is not the case of web2py. Web2py does have "automatic imports"; web2py exec(s) code in an predefined environment and that is the proper way to use exec. Those who criticize web2py for for this either do not undertand why we do it or are being partisan. I will agree that every design choice has pros and cons.
Ver'Cielo Rojo'capitulo 31"online
Ver'Cielo Rojo'capitulo 31"online
Dianne passing of his mother in Cumana will increase in Dulce beardedladyfriend Diana When Dianne met twenty years moved to San Venancio Morales and Gabriel meet and fall
Hmm, I don't recall MSVC++ ever warning about that! Unfortunately, I did use Windows at one point in my career.

I'll pass on reading it since I don't intend to write C ever again, but I hope the book works out well for you. :)

Edit: Just dug up some of my old C code. It is indeed %.2f that I was thinking of. Sorry for the confusion once again.
C is difficult, yes. Dangerous - I don't know in what sense. I manage to get more exceptions in my Python, Ruby code, owing to undefined variables or incorrect types, than I get segfaults in C.

The main issue with C is it takes some time before you are ready to take it head on. An experienced C programmers would have his repertoire of generic data structures library with time complexity guarantees (programs without hashes, expandable lists and operations on them are a pain), will know how to properly use function pointers to do that dependency injection thing other programmers are raving about, separate interface from implementation, know the build environment, know how to use structures and function pointer to build abstractions etc.

But before that, C takes much work to produce little. For someone starting programming, the learning curve is steep. Or more like, the gratification is really, really delayed. It takes some time before he can take on a real world project(it does in the high level languages as well, but the initial progress is faster).
Truly looking forward to this book!
Would love to but this redirects to this very page!
I get your point, but I think that's simple too: you received the post because it was sent to you. Or in Google's vocabulary: because you were in the circle it was shared with. I can agree though, that this slightly more confusing than the Facebook model: because your friend posted it.

I really like the idea of suggesting Google+ "celebrities" to follow; you should suggest it with the feedback tool. I recommend Tom. :)

http://profiles.google.com/myspacetom
actually you are right, it completely doesn't work in that example
Has anyone actually used "Learn Python the Hard Way" in a beneficial way? I started it several times but never got very far and just learned Python from other sources. I didn't really care for the approach.
cf. http://conal.net/blog/posts/can-functional-programming-be-li...
I much prefer using %g for the general scenario.
I completely disagree. I probably trust Google more than any other company. I bought a cheap phone on CL and put Android on it, which Google (and the wonderful folks at Cyanogen) have made available for free. I keep loads of my data on Google servers for free, and importing and exporting it is easy. If it wasn't for Google I'd be paying for email, using slow and/or expensive desktop calendar, email and document clients, have no control over the software on my own phone, and be printing out line-by-line MapQuest directions any time I wanted to drive somewhere new.

I got a Gmail account in 2004 and since then have moved more and more of my life into Google's system. In those 7 years I've never been disappointed. I don't really have anything against Facebook, but if Facebook can do it, Google can probably do it better while also giving me more control and transparency. That's what they've done with everything else they've touched.
Was it your first book? If not, you weren't in the target audience from what I make out of the contents of the book.

For people who already know programming, the official tutorial is the fastest and the best way to start: http://docs.python.org/tutorial/index.html
Besides, how would Apple know how to make a notification system without Android?
I know what you mean, it took me multiple books and articles to pick up functional programming. 'Seven Languages in Seven Weeks' was a good book - as is the K&P book you mention, but something complete that can teach an existing non-func programmer from the ground up, possibly using multiple languages, would be great
We could probably use more SEO, but we're actively fighting that once in a blue moon use reputation.

We're working to position Ninite as a great general download site and our new Ninite updater should help repeat use. Even with a single app, clicking next next next through an installer is silly. Our paid users end up using Ninite daily at their work already.

A big issue with SEO for us is that normal users don't even imagine that what Ninite does is possible. I think some mix of education and oblique SEO could help, but I think the newness of what we do complicates things a lot.

We aren't hurting for traffic, but it's primarily word of mouth and press so far.