Top 14 R posts of 2010 (from over 140 R blogs) - <AUTHOR> http://www.r-statistics.com/2011/01/r-bloggers-in-2010-top-14-r-posts-site-statistics-and-invitation-for-sponsors/

<comment><USER2> I have been spoiled by the K&R tradition of programming books and this has made it hard for me to pick up R. When I want to pick up a language from a book what I look for in the very first place is a presentation of its lexical structure, data types, expressions, control structures etc.

The R books that I have looked at do not seem to follow the convention. They usually start with a collection of (usually quite elementary) statistical problems and intersperse it with code. Unable to find a distilled description of the language in a single location, I invariably get irritated and give up. I know, I really should be more persistent.

I understand that the language is primarily designed for statisticians, but it would be good to have a book for those who are interested in it as a programming language. I am sure there is a book like that, just that I haven't found it/them. If anyone has, would love to hear about it. Maybe "R in a nutshell" is the one, though I haven't checked it out yet.

<comment><USER3> Have you seen these?

<http://heather.cs.ucdavis.edu/~matloff/R/RProg.pdf>

<http://www.johndcook.com/R_language_for_programmers.html>

<http://lib.stat.cmu.edu/S/Spoetry/Tutor/R_inferno.pdf>

<comment><USER2> Thanks, that was helpful. Ideally I would like a book but lacking that these should do. I was aware of the first two but not the third.

<comment><USER3> Hadley Wickham, author of ggplot2, is also working on an R wiki - <https://github.com/hadley/devtools/wiki>. If his package documentation is anything to go by, it will be top quality.

</comment></comment></comment></comment><comment><USER4> You do a great job Tal - keep up the good work.

<comment><AUTHOR> Thank you :)</comment></comment>


I always forget the argument order of the `ln -s` command - <AUTHOR> http://www.reddit.com/r/programming/comments/1qt0z/ln_s_d1_d2_am_i_the_only_person_who_gets_this_the <comment><USER2> I used to have this problem. Then I realized that if I want to really copy a file, I type

$cp file_from file_to

and that

$ln -s link_from link_to

has a very similar effect to the cp command above. I haven't messed this up ever since.

<comment><USER3> This phrasing confused me more.

`$ ln -s link_from link_to` would imply the reverse behavior. How does a symlink point from the actual file to the thing-that-looks-like-a-file-but-is- really-a-symlink? The file doesn't even know whether there are symlinks pointing to it.

Applying your definitions of "link from" and "link to", this:

Google](http://google.com/>Google);

creates a link from google.com to the hyperlink on your site.

I find the top reddit comment:

        cp existing new
        ln -s existing new

much, much more useful. You want to create a new link pointing to an existing file, which has the same ordering as when you use cp to create a new file with the content of an existing file.

<comment><USER4> Less ambiguously:

      cp    existing_thing new_thing
      ln -s existing_thing new_thing

</comment></comment></comment><comment><USER5> Does anyone know why C calls like 'strcpy' and 'strcat' are the opposite of this?

      strcat(target, source)
      strcpy(target, source)

But, in SH...

      cp source target

I feel like these things were developed around the same time, by the same community. I've always wondered if there was a reason for the different perspective.

<comment><USER6> This is a crime against usability IMO. Another comment mentioned that tar takes arguments as "target source" rather than "source target".

Ever notice that for everything in the world that screws, like valves or screws or bottle caps, counter-clockwise loosens and clockwise tightens? How is it we got the whole world to agree on that convention, but software is 50/50 on how we order the source and destination?

<comment><USER7> Except volume dials.

<comment><USER8> I conclude from this, by process of logical inference, that "louder" must be a type of "tighter".

"Forward" is also "tighter", apparently.

</comment></comment></comment></comment><comment><USER9> I've always used complex numbers as a mnemonic: real + imaginary, a + bi (obviously the file is real and the softlink is "imaginary").

<http://en.wikipedia.org/wiki/Complex_number>

<comment><USER10> The real/imaginary concept is exactly what I use too. I sort of recall being able to use the real/imaginary concept with other Unix commands as well, but I can't recall which ones off the top of my head.

<comment><USER11> rm only has the real component before you issue it and the imaginary one afterwards ;)

</comment></comment></comment><comment><USER12> You can create multiple links with the original names at once with commands like:

      ln -s path1/files* path2/

or

      ln -s path1/* .

Doing that helped me remember the order because I knew my command could end with a directory as the destination and links would be created there.

Sometimes hardlinks are useful too. You don't always need -s

Edit: Why was this downvoted? I didn't see anyone else mention it until after my post and to me this was an easier way to remember the order than comparing it to "cp".

</comment><comment><USER13> My god, this thing always keeps biting me. It seems so obvious now with that cp-mnemonic. But it makes me wonder, why does everyone do it wrong in the first place?

<comment><USER14> At least for me, it's because I say in my head "link $FOO to $BAR", which must be typed "ln -s $BAR $FOO".

<comment><USER15> My theory is that we're used to see symlinks as part of the "ls -l" output, which lists the link name first, and then the target. Later, we want to create symlinks as we're used to see them (linkname -> target).

</comment></comment></comment><comment><USER16> For me, it's always the recursive options in (s)cp and chown/chmod and which one is capital -R which one is lower case -r. Simply vexing.

<comment><USER17> Yeah this one is particularly annoying.

</comment></comment><comment><USER18> That's funny, I do too. I always thought it was just me...

<comment><USER19> It is never just you. An important lesson I learned while programming.

</comment></comment><comment><USER20> The way I remember it is "ln -s target [filename]", where filename is an optional argument to override the default, where the default is a link created in the CWD pointing to target. Easy.

<comment><USER21> Yup. The thought process is basically "the target is optional, so it has to go last".

</comment></comment><comment><USER22> Why don't we have better shells that give hints on these things?

I'm thinking like an IDE will pop up some help text when you begin typing a function name or a recognised special word. Why doesn't the standard sh (bash for me) give me similar help, as I type "ln" it could give me a pop-up with the possible completions and then as I get to "ln -s" it could remind me with "TARGET [NAME] // will create a file named NAME that is a soft link to TARGET, or use TARGET's name if NAME isn't specified". You get the picture.

In a pure text env the help could appear on the next line highlighted appropriately or could be to the right of the cursor or somesuch.

I'm hoping someone will say $CONSOLE does that already ...? Anyone?

<comment><USER23> It's mostly for historical reasons. More specifically we have restricted shell as text mode only tool, and intellisense-like features/inline help do not tend themselves neatly to line/character based output.

I think that there could be a place for a modern, more graphical orinted command-line interface. In addition to inline help it could display tables more nicely, maybe even allow proportional fonts. And while we are changing stuff, then maybe the object passing idea could be taken from PowerShell.

<comment><USER24> It could still be text-based if it uses ncurses. For instance, something like bpython: <http://bpython-interpreter.org/screenshots/>

</comment></comment></comment><comment><USER25> Yeah, the UNIX ln command is full of trouble.

* The arguments order is just the opposite of common sense. It has taken me years to really remember it, and I still have to think a little every time I use it.

* The default is to create hard link, which you almost never want. And if you do want them, you are probably doing it wrong. Making hard links is just asking for trouble.

I've read that Plan9 has somewhat corrected this whole problem. At least there is no ln command at all. Instead one uses bind, mount, and unmount. Of which bind is most similar to ln -s, but with arguments in reversed order.

</comment><comment><USER26> I stopped remembering what the order was and just use the `lns` script found here: <http://interglacial.com/~sburke/pub/lns.html>

<comment><USER27> Same here. lns is always one of the first things I install on a new system.

</comment></comment><comment><USER28> The annoying thing is that the mklink command in Windows uses the opposite order, so you have to do

mklink link_to link_from

EDIT: formatting.

</comment><comment><USER29> The worst part with that kind of mistakes is that you end up never knowing for sure. :)

You start with "ln -s A B" and realize you always make the mistake, so you force yourself to do the opposite of your natural instinct: "ln -s B A". It works until _this_ becomes natural but you still think you always get it wrong, so start doing the opposite of your new natural: "ln -s A B". You'll now be very confused until you force yourself to learn it for good.

This happens to me all the time for various binary things.

</comment><comment><USER30> Someone told me 'fact before fiction' a long time ago, and I've never forgotten it.

</comment><comment><USER31> I just read the -s as "source" even though it really means symbolic.

ln -s source fakename

</comment><comment><USER32> Think about boobs.

Everyone prefers real to fake*

      ln -s real fake

Now you will never forget.

* _Yes, I realise this isn't strictly true_

</comment><comment><USER33> I used to get this wrong all the time too. Mentally, I'd be thinking "ln -s source destination", where source was the link and destination was what it pointed to. Of course, that's completely backwards. 'man ln' on OSX didn't help either, since they use the terminology 'source_file [target_file]' which just re-inforced my incorrect thinking (target sounds like something that is pointed _to_ , does it not?).

As other people have mentioned, thinking of it in terms of the files created (ala cp) has helped to learn the correct behavior. I think this is a case where some minor change in the documentation might help to avoid the whole problem.

</comment><comment><USER34> If you leave off the second argument, you don't need to remember it. Much easier.

<comment><USER35> That's how I finally got it right. Now I just remember that the second arg ("dest") is optional.

</comment></comment><comment><USER36> I think the source of confusion is that linking is closely associated with chains. When you add a link to a chain you always add the new link to the existing chain or

ln -s new_link (onto) existing(chain)

Obviously the target isn't a chain but the association between links and chains is a strong one.

In other words I don't think of creating a link as creating something new _from_ something that already exists, I think of it as adding something new _to_ something that already exists.

</comment><comment><USER37> As someone who always had that problem, I think it's because I always mentally picture a command as saying "do <action> from <arg0> to <arg1>", ie, "copy this file to that file". But this construct doesn't hold up for linking, so I just have to remember it arbitrarily by remembering cp. function(src, dest) just generally seems to be the unofficial "right way" of ordering things.

</comment><comment><USER38> Its like a black hole in my mind. Every single time I screw this up. I've.... just had to learn to live with deleting my first crappy link. :)

</comment><comment><USER39> I think up to the 100th time reading the man page I would forget, until I memorized the following mantra:

        ln -s target link_name

<comment><USER40> Same here, I just memorized "target [the] link name".

</comment></comment><comment><USER41> I just remind myself that second argument is optional (and it couldn't be the other way around for that to work)

</comment><comment><USER42> In CP/M the order really _was_ "cp to from". So chosen to match the assignment operator in programming.

</comment><comment><USER43> Every comment except this one is just a repeat of the stuff said in the original reddit discussion

</comment><comment><USER44> My mnemonic for this is to remember that the link name is optional. When you specify only one argument the link name is the base name of the target (in the current working directory). Therefore the link name must be the second argument.

</comment><comment><USER45> Imagine there's an arrow pointing left between the arguments. You know - "the symlink is pointing to this file".

ln -s file <== symlink

Always remember that. Pointing left. The symlink is pointing at the file.

</comment><comment><USER46> My mneumonic is that in "ln" the "n" comes second, and n is for "name" so the name of the symlink comes second. But I still have to think about it every time...

</comment><comment><USER47> a copy points to the original (for an instant anyway) the same way that a link points to the original:

      cp original copy

      ln -s original link

</comment><comment><USER48> The way I think of it is that the path that exists first (the target file), comes first.

It's kind of a dumb way to think of it, but it seems to work for me.

</comment><comment><USER49> I also occasionally forget the -s, and really wish it was the default since I'm almost always creating a symbolic link.

<comment><USER50> Could you maybe add:

alias ln='ln -s'

to your .bashrc? A quick test of this in my terminal and the alias takes precedent over the ln command. Although, I guess it'd be worth doing a few tests to make certain!

<comment><USER49> Sure, but I'd rather not get bitten when I'm on a system where I don't have that alias defined.

</comment></comment></comment><comment><USER51> when I noticed that I was messing up when using ln, I started thinking this way: "write what you already know first, so you have time to think about what you'll write next

"what you already know" being the existing file and the second part being the name of the link to the existing file.

I never got it wrong again.

</comment><comment><USER52> Ruby's alias_method(new_name, old_name) always gets me also because I'm so used to ln [-s] (src, tgt).

<comment><USER30> The arguments are in order they appear. i.e. alias_method :alias, :method

But yeah, it's weird that it's opposite of ln.

</comment></comment><comment><USER53> A co-worker once told me to remember it like: "I have a (src) that I'd like to call (dst)"

</comment><comment><USER54> My mneumonic is "lentil", since it's ln (-s) <T-for-target> <L-for-link>.

</comment><comment><USER55> _I always forget the argument order of the `ln -s` command..._

...because I met the `man` command.

</comment><comment><USER56> Ditto. I just remember that it's the reverse of tar, but the cp trick is better.

</comment><comment><USER57> Funny, I have a similar problem with scp.

</comment><comment><USER58> I just think of the "-s" as "source".

</comment><comment><USER59> "ln -s something somewhere"

</comment><comment><USER60> think like so: ln -s {source} {target}

(not "from"/"to", which is ambiguous)

</comment><comment><USER61> Keepin' it real fake...

ln -s real fake

</comment><comment><USER62> $ ln -s javac javac

Not like that.

</comment><comment><USER63> remember real first fake second ...

</comment><comment><USER64> ln -s _source_ destination

</comment><comment><USER65> exist want

from to

source target

</comment><comment><USER66> It's the same argument order for mv and cp, also the same for rsync and scp

Hell, it's even the same argument order for git-clone.

Pretty much all command lines use "source destination" order.

Why is 'ln' confusing? Because people think of "linking" in a backwards way, it seems that if you're creating a link from A -> B, A is the source and B is the destination. But that's not the meaning of "source destination" that command lines expect

      mv B A

A is the new B

      cp B A

A is the new B, but B is still there

      ln -s B A

A is the new B, except it's just a link, and yes, B is still there.

B is the source, A is the destination. B is the source of the data, A is the destination for that data; the command will create 'A' (or modify it), that's why it's the destination.

For the link itself, B is the destination, but for the operation of creating the link, B is the source, and that's the meaning that's consistent with all other commands.

</comment><comment><USER67> I use emacs and dired as a condom that shields me from the stupidity that is remembering this kind of trivia.

</comment><comment><USER68> Yeah it seems backwards to me as well. I always thought it was the only one.</comment>


Ask HN: Would you use a modern pager? - <AUTHOR> There has been a trend recently with fancy "dumbphones" which offer cell connectivity but no distractions. Examples are the "Lightphone" and "Mudita Pure".
If you have been considering a device like this, would you use a modern pager?
https://en.m.wikipedia.org/wiki/Pager <comment><USER2> Probably not what you're thinking, but I always thought that a sort of dedicated pager for old/infirm people would be useful. Picture something about the size of a sheet of paper that could be stuck to a refrigerator or something. Always on, and maybe with a soft chime when a message comes in.

The idea is that you could (say) send your aging mom occasional unobtrusive messages. Big letters would help. And they could do likewise, via some sort of keyboard.

Needs to be drop-dead simple. If it's cheap enough, maybe no "addressing" at all--the messages always go to a single correspondent.

My aging parents can no longer deal with texting or email. Even voicemail has become too much.

</comment><comment><USER3> In my case, I don't need most apps, but basic calling/texting/email is a must.

I think a lot of people already have a "pager" in the modern era, and it's a smartwatch. Samsung even sells a 4G smartwatch that doesn't need the phone nearby to operate, and that would give you the rough functionality of a "pager" in a better, modern form factor.

</comment><comment><USER4> Already do. It's called a cellphone with a smallish screen. Basically what you do is _not configure email_ etc and just install a bunch of texting apps. Then you simply don't use the web browser etc because you know the thing is now _just a tool and no longer a toy_.

</comment><comment><USER5> I personally would not</comment>


Rust or Go? Which will rise? - <AUTHOR>

After 5 years, what can I expect to see? Rust or Go? I seek the most expert comments. <comment><USER2> At this point, I feel that there's enough momentum and a big enough backer behind Go that I have very little doubt that it will still be a going concern in 5 years.

Rust is more questionable, after all they haven't reached 1.0 yet. But I'm cheering for them -- IMO, they're the more interesting language and I like the choices they made.

<comment><AUTHOR> Go was mature enough, even before its 1.0 release, I think. In case of rust, it has reached 0.3.. and it is accelarating fast.

</comment></comment><comment><USER3> Both. They are not really competitors. They ship robust and modern approach to concurrency, which is insanely demanded these days, and is probably the only reason why they are constantly mentioned together. But they are quite different otherwise.

Go puts programmer productivity on top, thus fast compilation, "zero-thinking" memory management (thus global GC). They want the best from both fast but hard C++ and elegant but slow Python.

Rust aims at low level, close to hardware, as fast as possible programs, thus fine tuning for memory management (arenas, isolated GCs, choice between GC and non-gc allocation), thus disallowance of implicit copying even at cost of making language a bit harder etc. They want to fix memory unsafety and bad concurrency problems of C and C++ while keeping all the perks which are the reasons why those languages are still used for new software.

I imagine the choice will be like between C++11 and Java today: one's a bit faster and less memory greedy, the other's a bit easier, and each will have niches where the other is strongly unwanted.

</comment><comment><USER4> Both, given that programming languages shouldn't be a horse race. They're different languages that fit differing niches: both address concurrency and parallelism at the language level, yes, but at least from my perspective, Rust is oriented towards systems programming (task-level GC, lower level memory access, and strong static safety guarantees), while Go is for rapid network service development.

</comment><comment><USER5> Some people might tell you Go is the one, and if enough people believe that it might become a self fulfilling prophecy.

I personally am very interested in Go and I think it's a great choice for all my future projects.

Will Go become popular after 5 years? I honestly don't know, but I think it's a great tool and I want to use it. And honestly, I'd be weary of a language/platform if its popularity was based primarily on hype (for example, node.js) rather than usefulness.

Also, there's no reason that only one of Rust or Go can become popular. They could both become popular, just like Ruby and Python are both popular these days.

</comment><comment><AUTHOR> Which is more general purpose? By this I mean to ask that, which language touches more domains? For Example - Today i write kernel. Tommorow I write a gui app. The next day, a web backend, the very next day, a self aware neural type of thing. Which one single language suites me?

</comment><comment><AUTHOR> When I google for comparison, I get this as a top result.

[http://stackoverflow.com/questions/9339560/erlang-versus- go-...](http://stackoverflow.com/questions/9339560/erlang-versus-go-versus- rust-comparison)

</comment><comment><USER6> First one who gets a Rails-like showcase application. If that doesn't happen, both will get some action, but more on an Erlang/D level than Ruby/Python.

<comment><AUTHOR> So, according to you, which one has more chances of getting used in a future popular app or framework?

<comment><USER6> I'd say none of the above. There have even been a few interesting projects done with Ocaml (mldonkey, unison), which is a pretty good choice for system- level programing and has a pretty fast compiler. Also a lot of people are using Erlang for it's supreme concurrency support and stability.

Which is why I don't doubt that there'll be quite a few people using Rust and/or Go. But I'm really not sure whether either of them will move beyond this tier into the PHP/Python/Ruby territory. A framework like Ruby would certanly help, and that can come out of nowhere. But I wonder whether the day of killer-feature frameworks aren't numbered, i.e. whether something like this can happen again.

So I think in the end it comes down to which of the two will do better in the Haskell/Ocaml/Erlang tier. Go has some rabid fanboys and quite a decent designer pedigree, good libraries and a bit of a headstart, whereas Mozilla is ripe with dumped applications and failed projects. So unless they're rewriting major parts of their infrastructure with Rust and actually release stuff, I'd bet on Go.

<comment><AUTHOR> I am also not betting/expecting/ whatever-you-say to make it into python/ruby sphere. I expect them to make for a new tier of high performance concurrent apps(higher than erlang), 'targeted towards more number of C familiar programmers'.

Mozzila giving out broken products? - well, dont you use firefox?

<comment><USER6> I actually do use Firefox, but don't forget that it basically was a skunworks alternative to the feature creep that was the Netscape suite. And then there's Grendel. Not that Google doesn't have the same issues on a bigger scale, so even though both Rust and Go have some backing, it doesn't mean that both can't be canceled straightaway.

There actually might be more _renewed_ interest in C++ (in its current C++11 reincarnation) than actually _new_ interest in Go/Rust. (Chances of someone reviving Modula-3 or creating a killer framework for Ada will remain low)

<comment><AUTHOR> Yeah, there are a lot of positive opinions building around C++11. But, my personal opinion is that, to be in a long run, c++ has to change very fast again!(I mean, the design patterns, to match up with new hardware and expectations). This is not the case with rust or go!!!

<comment><USER6> Well, as opposed to things like Prolog or the more esoteric functional languages, those three language aren't too different regarding their basic mindset and ties to machine architecture. Never mind that I don't believe that we're in for a massive change, anyhow (and all three can cope with multi-core in about the same way).

Sure, you don't have the legacy libraries and architectural styles of C++ in Rust/Go, but that's a pretty moot point if we're talking about new projects. Go wild with generics, lambdas, concurrency, type inference etc..

</comment></comment></comment></comment></comment></comment></comment><comment><USER7> As a PL guy, I can say: both. Despite both calling themselves "systems programming languages", they serve completely different niches. Go is for web- services/web-apps development; Rust is for truer systems software (if they keep GC optional it could even be used for kernel development).

<comment><USER8> yes I agree with rust being the only one I could consider a potential 'systems language' of those two.

</comment></comment><comment><USER9> I thought Rust was going to be akin to Dart as far as programming realm. Was I incorrect? Is it a low-level programming language?

</comment><comment><USER10> Does anyone have any benchmark numbers for either?

<comment><USER8> language shootout has benchmarks for go but none for rust yet unless I'm mistaken. Here is go versus c on a x64 quad cpu (scroll down to see the comparison):

<http://shootout.alioth.debian.org/u64q/compare.php?lang=go>

<comment><USER8> and here's how go measures against other languages in the language shootout (averaged):

[http://shootout.alioth.debian.org/u64q/which-programming- lan...](http://shootout.alioth.debian.org/u64q/which-programming-languages- are-fastest.php)

<comment><USER11> Looks like PHP is faster than Perl, Python and Ruby in that chart.

</comment></comment></comment></comment><comment><USER12> C will still be king.

<comment><AUTHOR> C will not be the king for eternity... It is time to look for the future king, then C should continue to reign till the prince becomes a man.

</comment></comment><comment><USER13> Both.</comment>


The Command Line Crash Course (Zed Shaw) - <AUTHOR> http://learncodethehardway.org/cli/book/ <comment><USER2> This was posted yesterday: <http://news.ycombinator.com/item?id=3358544> along with existing comment thread.

<comment><USER3> Yes, I thought HN prevented this. Anyway, see the above discussion and keep in mind this is a first rough draft.

<comment><USER4> I missed the previous link, so I'm glad it came up.

I do a lot of powershell, Zed. Would you be interested in feedback? For example, while "type" still works, "get-content" is the powershell equivalent.

Nice work, one way or the other. Please keep it up.

<comment><USER4> Heh. I just checked. "Type" is an alias for "get-content".

I suspect bringing all that up would just confuse the issue, and detract from your goal.

</comment></comment></comment></comment><comment><USER5> Since I didn't get a chance to comment on yesterday's post on "The Hard Way" command line course, I want to mention today that Zed Shaw is also working on a very nice C course for experienced programmers. I've been looking unsuccessfully for an online C course like this one, that doesn't do things like explain what functions, primitives, etc. are. Starts out a little slow with compiling and setting up your development environment, but then reveals a very well-written introductory course on C programming for experienced programmers. As an experienced Python/Javascript/PHP programmer with an interest in C, I've been looking for an online course like this for a long time.

Zed: can we somehow compensate you for your works-in-progress? I've gotten a lot out of your C course. I can't wait until it's available in epub format.

<comment><USER3> Just tell me when you find errors so I can fix them, and then if you appreciate it buy a PDF/ePub when it becomes available. Actually selling something is way easier to explain to the tax man than a "donation".

<comment><USER5> Will do. And I just purchased your udemy C course. And WOW! I'm looking ahead in the pdf and you're going to cover a lot. Perhaps the same is reflected in the HTML version -- I 've not yet looked ahead.

Folks, if you're a Python, Ruby, Javascript, etc. programmer and you're interested in learning C, this is the book for you.

</comment></comment></comment><comment><USER6> While I'm glad that you aren't dismissing Windows out of hand like some people, interleaving the Windows instructions with the POSIX instructions could get a bit confusing. It may be better to maintain separate builds of the book for POSIX and Windows.

<comment><USER7> I thought this looked like an interesting, possibly-unique feature, not a bug.

Including Windows up-front ensures that whoever picks up the book can make use of it immediately, no matter which computer they happen to be sitting in front of.

Also, as one who knows the Unix command line pretty well but knows next-to- nothing about Windows, it's good to get exposed to a similar-yet-different style of command line.

And if I ever need to use Windows again I plan to try this book first: By covering both in parallel, the book might turn out to be a pretty good guide to learning one in terms of the other.

<comment><USER8> It's easy enough to get a POSIX/Linux toolkit via Cygwin.

Though this does assume the user is allowed/enabled to install software.

Barring that, bootable CD / USB distros are also highly tenable. The default Ubuntu installation disk includes this, though there are many other options.

<comment><USER6> ...Except Zed's whole point with this is that you _don't_ have to use the fancy Cygwin/POSIXy stuff or a Linux Live CD or whatever to do programming and the command line. POSIX environments are better for programming, but you don't _need_ them, and a lot of the people who would benefit most from learning programming don't have Linux experience and wouldn't do it if they had to do something fancy to get a UNIX-y environment.

<comment><USER8> For me it's more a matter of cognitive simplicity.

I _can_ use a POSIX environment anywhere. It's one less hurdle if that's the tool I'm using.

I've learned (and forgotten) numerous proprietary system languages. I prefer sticking with stuff that will be around. POSIX/Unix/Linux have demonstrated staying power.

</comment></comment></comment></comment></comment><comment><USER9> It's been interesting to read your tweets about Windows. It's encouraging to see a fast learner get up to speed despite plenty of misgivings about the subject matter.

I think it will be less confusing to some if you mention Windows Vista here:

> If you don't have Windows 7, you should _seriously_ consider upgrading. If > you still insist on not upgrading then you can try installing it from the > download center. You are on you're own though since I don't have Windows XP, > but hopefully the PowerShell experience is the same.

<comment><USER10> "Your" not "you're." I guess I'll submit some corrections.

</comment></comment><comment><USER11> I'm not enjoying this much. I think the tone is a bit harsh. Compare to Learn Python THW:

(<http://learnpythonthehardway.org/book/intro.html>)

See, especially, "do not copy paste" which is firm but clearly explains why you don't copy paste.

<comment><USER10> Don't forget, this is a first draft. Since the best predictor of future behaviour is past behaviour, expect the rough edges to be sanded down over time.

</comment></comment><comment><USER12> > Just like above, here's the same list but using the Windows versions:

> TODO: Need the windows version.

Is there an easy way to contribute to this book? Ideally people could submit patches to be merged by Zed at his own discretion.

</comment><comment><USER13> I was aware that pushd and popd existed but never used it. I see how I can gain a lot of productivity from it, so I'll probably be using it from now on.</comment>


Ask HN: Were there any learnings from last week's political detox? - <AUTHOR> Regarding: https://news.ycombinator.com/item?id=13108404<p>I'm curious if HN has done any analysis of the interactions, or if people have any opinions to share. <comment><USER2> Honestly, I didn't even notice. And I browse here a minimum of 2-3 hrs a week.</comment>


Ask HN: A start-loading button for videos? - cool-RR

(Reposting.)
I thought of an idea: Online videos should have a button, "Start loading", which makes the video start loading. Personally, when I come across a video I want to see, I usually hit play and then immediately pause, then go read something else, so the video will be completely loaded when I start watching it. And it's annoying to do that, especially because sometimes it takes time until the pause button shows.
So I suggest a "Start loading" button that will cause the widget to start downloading the video. It will disappear the moment it is pressed or "play" is pressed.
What do you think? <comment><AUTHOR> Most videos start loading in the background as soon as the Flash embed loads. Or at least, they should - I've heard the YouTube team complain of bugs in Flash player that sometimes break the load. This makes much more sense than a manual "start loading" button, though, since it requires no manual intervention and loads the video with unused bandwidth as soon as possible.

<comment> cool-RR There's a problem with that, when you're visiting a site which has several (possibly many) videos embedded in the same page. I know some good sites that are like this.

You don't want to have them all starting to load, because then they'd take a lot of bandwidth and you'd have to wait too much to see the first video.

<comment><AUTHOR> I'd rather video sites optimize for the common case of one video on a blog. If there're multiple videos, I can always click on them to take me to the original video page, where just one is loading. Or open that one video in a new tab and hit Stop on the page with all the videos (which _should_ pause loading of all Flash embeds, though I'm not sure it does with the current Flash player).</comment></comment></comment>


Breakthrough Turns CO2 into Clean-Burning Fuel - <AUTHOR> http://www.popularmechanics.com/science/energy/a18861/breakthrough-material-is-a-better-way-to-turn-co2-into-fuel/ <comment><USER2> My naive question would probably be "Don't plants already do this for us?", but I'm probably not understanding the problem that they hope to solve with this technology.

<comment><USER3> Nope. The CO2 produced from burning coal/gas is normally just vented into the atmosphere. This is why we have global warming.

Other toxic stuff like nitric and sulfuric oxides are captured to meet emissions standards.

<comment><USER4> He uses the word "plants" to mean the green leafy type.

</comment></comment></comment><comment><USER5> Yeah, this doesn't mean "free energy", but it's a way to potentially recapture CO2 emitted from a power plant or other major source and put it back into the energy cycle.

</comment><comment><USER6> Well, its a vector of energy, but very cool</comment>


Is youtube.com down right now? - <AUTHOR>

What the hell?  Never seen that before.  If it's just me, let me know and I'll delete this post. <comment><USER2> <http://www.downforeveryoneorjustme.com/youtube.com>

Looks like no, loaded up for me.

</comment><comment><AUTHOR> Okay, it was down, but now it's back. I guess nevermind. It's just I never ever see it go down.

</comment><comment><USER3> I'm getting some weird traffic coming from one of the caches. It's been super slow for me.

</comment><comment><USER4> YouTube is working for me, albeit rather slowly.</comment>


Ask HN: Take a Look At My Site - Studylance.com - <AUTHOR>

Hi All,
I submitted my site for feedback here a while back and got some really useful feedback.
I'd be really interested in getting some more feedback now a few months have passed.
My main concerns are that the question posting process isn't working well enough and people are dropping out before posting their question.
Also the mechanism for responding to questions may not be clear enough,
Any feedback on design/usability/coding would be much appreciated.
The url is:
www.studylance.com <comment><USER2> I definitely like the concept. My hang up is -- how is this different than mahalo answers? (more focused, sure, but the mahalo folks could answer these questions, no?) Doing something to verify the tutor's expertise might help with this (could be simple quizzes or something).

Another general note -- as a tutor, I'd like some assurance that I will get paid for answering the question. This may lead to less questions, but significantly more answers. This obviously introduces quite a bit of complexity for the poster, but I think its necessary. You could potentially start people with a few pounds in their account that you finance to get things rolling (or, give people a few pounds when they sign up and add a credit card).

Next -- visual design -- I was impressed with your design, there are some nit- picky things to tweak, but overall it is visually appealing. -In safari, the sign in/register links at the top have the descender part of the g gets cut off (probably because the containing div is too short). -The font color in the "Post My Question", "View All Questions", "Answer Question/Make Bid", etc is a bit difficult to read. This one nags at me quite a bit because it makes the buttons look pixelated or something -- i'd fix this up right away. -Really like the visual representation of description of service -> ask a question call to action. looks great/leads the eye the way you want it to!

As others mentioned -- the about us could use some copy. Don't want to spend too much time on it, but it adds a lot of credibility (or rather, it takes a lot a way to see 1 line of text there).

I have to run here in a second, but one last thing -- you might want to think about requiring signup AFTER someone has answered the question (as you do with the asking of a question). Once someone has spent time answering a question they are more likely to sign up.

Wish I had some more time, but the site looks good, keep up the great work!

Good luck!

<comment><AUTHOR> Really useful feedback, thanks...

a) I think it differentiates itself by being a targeted vertical, a "destination" to go for homework answers from tutors who are rated and can provide full and in depth answers. Mahalo answers doesnt really focus on anything.

b) The assurance of getting paid is a potential problem, I dont think theres any way of giving that assurance...

c) The buttons problem is definitely something that needs changing.

d) About us - yes, doesn't look professional!

e) The last issue, allowing people to signup after theyve typed an answer is a really good idea... I think however that it's going to be much harder to get people to post questions than getting them to answer them. I've had lots of tutors sign up, just not that many students...

<comment><USER3>
      b) The assurance of getting paid is a potential problem, I dont think
      theres any way of giving that assurance...

Of course there is. It's called escrow. I pony up the money when I ask the question. You pay it to the answerer that I designate the winner. If I don't designate a winner, you pay the money to a random answerer, to keep me from never picking a winner, but benefitting from their answers. Finally, of course, if nobody answers, the money stays in the account to use for the next question.

</comment></comment></comment><comment><USER4> 1\. I'd really like to see some copy. A nice 1-2-3 big and bold where I can see it.

2\. Your sort/search isn't well thought through. Ideally I'm looking for high- dollar questions, in either CS or mathematics (fields in which I am knowledgeable), that need answers. I can sort by cost, (ascending cost is first? wtf?) but I get a lot of "deadline expired" questions. If I sort by "deadline", I lose the cost sort, which isn't what I want. I can filter by one field at a time, but not, say, the union of CS and math. As an answerer, seeing questions that already have answers or that the deadline has expired is totally worthless to me. People wanting answers to a specific question will probably come through Google anyway, rather than searching your site directly.

3\. After looking for answered questions to get a feel, the first "answered" one i found was this: [http://www.studylance.com/question/pos355-introduction- to-op...](http://www.studylance.com/question/pos355-introduction-to-operating- systems) Seriously? There's no question and no answer.

4\. After failing to find a truly "answered" question, I'm mystified as to how the site works. I see references to "bids", yet it appears that the question- askers name their prices. Is this an auction format, or a price-as-listed format? Also, see #1.

5\. Your FAQ link is broken (Safari 4, OSX)

6\. Most of the questions on this site are simple CS or math problems (like algebra 1). Something about the relative quantity and distribution of the questions makes the me suspect the number of real users is virtually nonexistent (for instance, I find it hard to believe this 20s guy with a GCSE can't plug-and-chug two variables into an algebra 1 equation given four possibilities: [http://www.studylance.com/question/how-many-of-each-color- of...](http://www.studylance.com/question/how-many-of-each-color-of-shirt- were-sold) ).

</comment><comment><USER5> The site looks great!...

But, just by looking at the homepage, It could be difficult for a NEW user to understand what's actually going on, especially pertaining to the description where you say "decide the price"

POST YOUR QUESTION

1\. Type your question 2\. Decide the price* 3\. Choose the best answer

I'd also suggest that the tutors themselves be verified some way or the other, because anyone can claim to be an expert.

I really do like this, because you are trying to please TWO user groups; Users (students/'askers') and Tutors. That can always be a challenge.

<comment><AUTHOR> The language does seem a bit vague now you say that. Any ideas for a better 1. XXXX 2.XXXX 3.XXXX sequence on the homepage?

<comment><USER5> I'd suggest to have two sections.

One for 'Students/Users' who have questions 1. XXXX 2.XXXX 3.XXXX, and another for 'TUTORS' 1.XXXX 2.XXXX 3.XXXX

I hope this helps

</comment></comment></comment><comment><USER6> Please, don't send passwords over the clear via email:

Your account has been activated.

Login: somename Password: [redacted]

<comment><AUTHOR> Thanks, will be sure to change that...

<comment><USER7> I sure hope you aren't storing passwords in plaintext...

<comment><USER8> Rather than storing the actual passwords in the database, you'll want to only store a digest of each password.

For example, storing a keyed HMAC using SHA-2 is great. An easy similar method is to store the SHA(password + some server secret value + user's email address) In this case the user's email address serves as the salt. The server secret value prevents a database-only compromise from leading to locally brute-forced passwords. When the user logs in, on the server, re-compute the digest and see if it matches the stored digest.

I didn't notice any HTTPS -- you might want to use it for queries involving the password and any financial transactions.

</comment></comment></comment></comment><comment><USER8> When creating my account, I left the default of "Student" so now I can't answer questions. I suppose I'll have to create a new account and chose Tutor so that I can answer questions. How about making it an editable value in the account page, or also letting students answer questions?

</comment><comment><USER9> these types of sites are a dime a dozen, you really need to differentiate yourself from cramster, justanswers, etc. + there are a whole bunch of free options.

</comment><comment><USER10> Clickable: <http://www.studylance.com/>

<comment><USER11> Thanks, I hate it that HN doesn't allow clickable links in stories description. Isn't the web all about links? Lame.

<comment><USER3> Upvoted. While there may be reasons that this was done (I assume to minimize using HN for google juice) I don't understand why you're being downvoted for this.

This is inconvenient, and expressing that is reasonable, especially as it wasn't even a random rant, but in direct response to the clickable link being posted.

Seems like a little javascript would address this issue. PG could make the link unclickable in the HTML, but add a JS function to make it clickable, thus reconciling the goals of user convenience and google juice withholding.

Edit: Or add (rel="nofollow") of course, would be even easier.

</comment></comment></comment><comment><USER12> Overall it's pretty nice.

I like how you can post your question and it gets you to sign up slowly step by step. UI is pretty nice and also fast.

About us should have some more meat. FAQ and Contact us at the top don't work. Should have a similar quick way for tutors to get started like you have for questions. Clicking on cost to sort by cost causes an exception. Overall maybe a bit too many rows with links which is a bit confusing. Maybe simplify the navigation a bit. Why have the see all categories? Why not just show them all? NOt that many anyway.

I wish you a lot of luck!

<comment><AUTHOR> Thanks! Good to hear some positive feedback about the question posting process.

Users have to confirm their email before the question goes live, any opinions on whether that is necessary?

<comment><USER12> You are protecting against spam right? Or why would you want this? You might try testing alternative question posting options and see which gets a high follow through. Obviously you want some way to protect against spam but by adding as little overhead as possible. You also have captchas in the registration - maybe it's enough.

<comment><AUTHOR> It was to protect against spam, ensure the user is a real person who can be contacted etc.

But I can see that a few people sign up, post a question, but never click the link so their question never goes live. I may try removing the requirement to confirm emails...

<comment><USER3> Or give them assurance in big bold letters that their email is safe with you, and won't be published, but is only used to forward answers to them.

</comment></comment></comment></comment></comment><comment><USER13> Site looks nice. However, the area where you post the questions could use a little tweaking. A few thoughts:

\- You have the page numbers and the "Finish" link. I instinctively clicked finish without looking, because I assumed a "next" and "previous" would be there. I think you should add those.

\- Actually, the word "Finish" is a bit strange. Usually I think the word used is "Last"

\- I think you should add a default expiration time or require one. Questions with 33 days left till they expire seems unrealistic to me.

</comment><comment><USER14> During sign up, please change "accept TOS" to something like "accept terms"... the lay person may not understand what TOS is... just a suggestion.

</comment><comment><USER15> Post Your Question.

What kind of question? Can I ask how to get rid of my cat's fleas?

The title of the site makes it somewhat obvious, but you should make it even more obvious in your call to action.

Also, I can see that you're using jQuery. I'm curious what you're running on the server.

</comment><comment><USER6> Looks pretty :)

Question: What is the default timeout for a question? It seems that homework help is typically one of those "I need this answer sometime tonight, before I have to turn it in." So, wouldn't it be wasting tutor time if the question is old and the asker is no longer interested?

<comment><AUTHOR> The user can choose a "need answer by" date in the question posting process, there is no default timeout at the moment...

</comment></comment><comment><USER16> When you click on the ? next to qualifications to become a tutor, it shows a wad of lorem ipsum in the notification.

Oh and please don't display bids publicly to Tutors that have already been answered (still have it show up for Tutor who answered) or timed out.

</comment><comment><USER17> While trying to set up an account the menu boxes freeze up. OS: Ubuntu 9.10, Browser: Chromium.

<comment><USER17> Also, I should be able to bid to answer a question at something much less than half a pound. I answered a question for someone in like 2 seconds, and I was just going to charge them a 0.1 pounds.

<comment><AUTHOR> If an individual answer costs less than 50p - I lose money as the transaction costs are too high...

<comment><USER8> You can make the minimum deposit/withdrawal for your system 50p or higher, while still allowing smaller transaction amounts for questions and answers.

</comment></comment></comment></comment><comment><USER18> How do you pay?

<comment><AUTHOR> Paypal... Going to include Google Checkout soon too.

<comment><USER19> does the person paypal the tutor directly or do you guys act like the middle man?

<comment><AUTHOR> It goes through studylance...</comment></comment></comment></comment>


Is Open Source Software Really Good For Business?  - <AUTHOR> http://sosdev.blogspot.com/2008/04/is-open-source-software-really-good-for.html

<comment><USER2> The entire argument is based on a fallacy: the idea that most of the software engineering industry makes money selling existing software.

Actually, most of the software engineering industry makes money from selling their services to build new software, or maintaining existing software that was previously built in the same way.

The question of whether the software is then shrink-wrapped and sold for money is irrelevant. As a Ruby on Rails developer, I couldn't care less what my clients do with the applications I build them (except, of course, within the context of building them an application that better meets their needs). And the fact that Ruby on Rails is open source makes no difference to that - except, perhaps, in that it allows me to work solo and so not have to deal with a large team of incompetent people in my daily work.

Actual software licences are a very small market, most of it owned by giants like Microsoft and Apple.

Daniel

<comment><USER3> Actually there are quite a few good lifestyles available if you charge for licenses of your software and you are a small software shop.

</comment></comment><comment><USER4> I really wish we could get past free as in beer & move on to free as in speech. Getting the sofware for free is all very well & good, but the really valuable part is being able to change it for your purposes.

<comment><USER5> There are a couple of very large business focused projects that work on code escrow and termination clauses.

The general idea is that when you contract for a customized application you get a price break by not taking the source code (as the vendor will expect to get money from change requests, support and selling to other customers). However takeover or bankruptcy of the vendor will let you claim the code under a GPL-type license from third party escrow.

Some of the peace of mind of OSS, but a decent revenue model for the vendor. I would prefer 'genuine' open source but as a buyer I would rank this kind of arrangement far above the normal 'we die and your tools stop working'.

</comment></comment><comment><USER6> If he feels so bitter about open source, he should stop contributing to it. I am up for creating a donation fund to buy him a license of Vista Ultimate Edition.

<comment><USER7> Most developers working on open source software see no problem and love working in open source project. This is because most open source developers work for a large company, such as IBM or Sun. These companies of course use open source software to sell services which pays so much better than selling shrink wrapped software. Must better to push 30 junior consultants through the poor customers door for 2 years than simply selling software.

Look at the Linux commit log, 80-90% of new code comes from corporate open source drones.

However, every independent developer that has been working on a fairly successful open source project for a couple of years will become bitter at times and to some degree. Even Richard Hipp, the creator of SQLite hints about this in the google video where he discuss SQLite.

The reason is simple, after the first fun of working on a new project, there is very little incitement to continue. a) There is no money to be had, donation does not work in the sense of putting salt on your table. b) Selling services does not work, because most users don't need support or if they do, support will already be provided be lots of "open source" consulting companies selling services for your product. c) Most user feedback is rude and usually complaints about missing feature or bugs and d) you are usually alone. Its a myth that most open source project are run by a merry band of altruistic developers. Usually they are run by 1-2 developers for the love of the craft - at first. No wonder these independent developers become bitter if they continue for some reason. And the worst part, if he should dare complain a bit, he only get smug stupid remarks from idiots like yourself who have never contributed a line of code in your whole life.</comment></comment>


How to build the perfect App - <AUTHOR> https://medium.com/p/498a0937fa1a

<comment><USER2> There was all this outrage a week or so ago about Rate My App dialog boxes in various iOS7 app. Everybody was proposing fixes to them by focusing on the dialog boxes. I believe the dialog boxes were themselves a symnptom of the real problem - the crummy user review system.

It's not unusual for users to take a perfectly functioning app and give them a low review for reasons having nothing to do with the app (having misunderstood it) or because of some minor thing they didn't like. While it may mean the app doesn't get 5 stars, it shouldn't translate to 1 star either. Even Gruber was recommending that people rate perfectly fine apps with 1 star just because the app had a "Rate My App" dialog.

Also, developers have no way to respond to reviews. Complaints posted as poor reviews never get feedback, and misconceptions never get cleared up.

The only recourse is to discern some clue that a user is having an okay experience and the interrupt the user at this point to ask for a (hopefully positive) review.

If the user review system itself wasn't in such a bad state, the Rate My App dialog problem wouldn't exist.

It's been said - be careful what you measure, that's what gets gamed.

<comment><AUTHOR> I agree that the real problem is the review system. Apple doesn't make it easy for the user to make a review. So either you end up with a lot of empty 5 stars "Great App" reviews or with one star "I hate you" reviews. And in both cases they don't really rate the app correctly.</comment></comment>