HNHacker News
TopNewBestAskShowJobs

smithzvk

185 karma · joined October 13, 2011

submissionscomments
smithzvk··on Google Petitioned By Fans Of Google Reader To Reconsider Shutdown
> I would not be surprised to see Google Groups get munched once they finish adding a few more features into the communities bag.

I would say that this is probably firmly in motion. I doubt that many users enjoy using the Groups interface. For instance, I can't remember if there was ever a time that the groups webpage correctly rendered on any of my Android devices' browsers (it always thinks I'm using an old version of Safari?!?), or was actually useful outside of a desktop (where it is merely annoying, but usable). I think this is a good indicator that they are divesting from any work there probably in preparation of dropping it.

> I backup everything locally that I think might be valuable to me in the future...just in case.

One thing I absolutely trust Google to do is provide a mechanism to get my data out of one of their services, particularly if the service is going to be discontinued.

smithzvk··on How To Accept Bitcoin On Your Website
Also doesn't appear to work in Firefox/Ubuntu.
smithzvk··on Bitcoin Block #210 000 mined - reward halving
I guess I long ago decided that Bitcoin was interesting enough with just the possibility of not having to rely on a central authority/entity.

More to the point, however, is that this isn't really an issue of an authority, but rather an issue of trust. If I for whatever reason decided not to trust Bitcoin.org, someone else could take their place. For instance, I could get my recent state of the block-chain from a pal that I trust to do the actual task of verifying the full chain. I could even pay that person some fee periodically for providing that service. You could probably come up with a distributed, fraud resistant, method of providing recent block chain states where many sources would have to be simultaneously compromised for any attack.

smithzvk··on Bitcoin Block #210 000 mined - reward halving
So, what I don't get is why can't I, as a user, just pick how far back I want to go? Why can't some trusted party, like bitcoin.org post a their best guess for the block chain state 10 days ago. Isn't that sufficient to determine with a high level of certainty that I am on the correct branch and that there has been no funny business in the history?
smithzvk··on Ditch QWERTY – Your Hands Need Colemak
I switched to Dvorak (actually programmers Dvorak) about 8 months ago and I have to say that the jury is still out for me regarding the letter placements, but man o' man are the first layer symbols really nice (of course typing numbers is a pain in the butt now). There is actually a lot of interesting things you should consider that I doubt Dvorak actually thought of when designing his layout:

One thing people say is that Dvorak is supposed to reduce errors, but having all of the vowels right next to each other and all of the most common letters in the most common places actually means that it is fairly common for me to write a different real word than a clear misspelling, which plays havoc with auto-correct and spell checkers. And yes, Android can be set up with a Dvorak keyboard using Anysoft keyboard and the alternative us layout extension.

I will never get over the fact that 'ls' are both letters for your right pinky, very annoying for you Unixers.

smithzvk··on A Slower Speed of Light
They say it is open source but I can't seem to find the repository. Anyone else see it?
smithzvk··on Outlawed by Amazon DRM
The one-way nature is exactly the crux of the matter. In a purely chaotic world where people do whatever was in their best interest in the short term, everybody would infringe on copyright whenever they wanted a book (or whatever "non-scarce" commodity) and the content producers would do whatever nasty tricks they felt would stop this from happening, including distributing your book in a form that can only be accessed via computers that you don't truly control and "reserving the right" to cut you off from what you "purchased".

We, fortunately, do not live in this world. However, from the standpoint of someone that prefers to purchase books, movies, and video games to promote these arts, it seems that the entities "selling" the content to me are more eager to head down that chaotic road than I am. That's not to diminish the fact that there are many rampant copyright infringers that have already happily moved down that road and could care less about long term benefit. It's just that I am not one of those people, and I don't deserve to be hit with the crap-storm that you intend for them, particularly when there is no evidence that they feel any of that storm at all.

So I long ago decided on a solution, just do what feels right. Buy from whatever distributor you like (I tend to stay away from Amazon, competition is always good) and then circumvent whatever DRM they place on it (for instance, go to one of those places of ill repute and get the book in an accessible format). It's not perfect, but it sure as hell is better than playing the game they set up.

smithzvk··on Linus on keeping a clean git history (2009)
Right, I would say that it isn't worth the effort. Also, I probably never care about the code with only 1 and 4 applied. So perhaps branches aren't the right way to do what I am describing.

I always saw VC as a systematic way to keep a log of my development so that I could figure out where I may have broken my code. For this purpose, having some sort of meta-data where commits can be grouped would be nice. It would also work to do something like always end my commit messages with some kind of meta-data tag that I could grep the log for. I was just wondering if there was a prescribed/built-in way for Git to handle this.

smithzvk··on Linus on keeping a clean git history (2009)
Okay, that is basically keeping with my current understanding (though I'm not sure how much I live up to the "only have working history in the public repo" rule).

There is the other issue I raised, however: is there a good way to group a series of commits that happen to be towards a single distinct goal. Using branches is a clear step in that direction, but it seems like a nightmare to perform a rebase like you described if the commits are mixed and I would like the end result to involve grouping via branches. That is confusing, hopefully this will clear it up:

1. Bugfix in function1. 2. Bugfix in function2. 3. New feature in function2. 4. Bugfix in function1. 5. Bugfix in function2

...and we want in the end:

      /-- 1 ---- 4 ---\
  ---<                 >--HEAD
      \- 2 -- 3 -- 5 -/
Can rebase do this easily? Is this a good idea (it seems like it is to me)? The programmer would have to confirm that the code works at every state.
smithzvk··on Linus on keeping a clean git history (2009)
So I'm relatively new to version control entirely, but in the last few years my group has been making a big push to institute Git. I have been wondering lately, however: how much history cleaning is expected/desirable?

When I develop, I split my commits into as many small changes as I can so that the commit messages are single topic. I thought that was basically the idea. Every once in a while I use rebase to combine a few commits that should have been done together as they all addressed the same issue. This all seems right to me. I am left with a clean history of everything I have done on a very fine grained time scale. But the large number of commits, each with little significance to whole program hides the large scale structure of the development.

However, I could use rebase to start combining loosely related commits, trading the time resolution for clarity in the commit history. There seems to be a continuum along this scale. Where is the proper place in that continuum to say this is clean enough? Also, I don't like making changes where I am losing perfectly good information.

I know that I can group certain commits by defining a branch, developing on it, then merging (non-fast-forward) back to the original. The branch should keep the grouping in the commit history. I even suppose that this is can be done after the fact using rebase with the proper amount of git-fu. Is branching and non-fast-forward merges the preferred method of grouping related commits in the history?

If so, this seems troubling as it means that partially fixing something is difficult to do with a clean history. Until the piece of the program you wish to fix is completely working, it shouldn't be merged into master because it would ruin the grouping of the related commits. This means that there can't be any partial thought's like fixing bugs as you find them, because presumably you might want to group all bug fixes of a function together, but have a distinct commit for each.

Now I'm more confused than when I started. Seriously, any references or advice on this sort of topic are welcome.

smithzvk··on The PC is Over
Long live the PC, and by that I mean the phone/tablet that I will connect a monitor, keyboard, and mouse to when at the office or at my desk at home.

http://www.ubuntu.com/devices/android

If this was in stores today and handset manufacturers had good compatibility, I would make my next PC whatever the newest, top of the line Android phone and be relatively happy.

That said, this headline is sensationalistic nonsense. That setup would still be a PC, in fact it would look remarkably more like a PC than our current laptops we are lugging around (external monitor, keyboard, mouse, connected to a tiny "tower").

smithzvk··on Why I’m not leaving Python for Go
First let me apologize for the length, second I will say that to my knowledge none of this is about the CL condition system in particular, third this is basically a brain dump because I need to get back to work and still don't understand the error code camps points...

I definitely wasn't trying to insult but I recognize that I wasn't being helpful either. I was basically throwing up my hands. And while I like CL's system, I haven't come close to trying everything out there so I can't be a judge; I mean this not like a cop out but seriously, I am very poorly informed about what other languages have to offer.

But since you ask: I guess if I was trying to convince someone that exceptions are inherently a better mechanism, I would start by exploring how arithmetic is handled in the C language. Let's say we have a function called "add" that adds two numbers. Typically we would think expect that the return value of such a function should hold the result of that addition. It would be naive, however, to expect add to always complete without something like an error happening. While addition of two numbers seems safe, it isn't when we start using our imperfect number representations such as floating point numbers (susceptible to overflow, underflow, loss of precision, and more) but also with machine sized integers (susceptible to overflow) and even bigints (what happens if we attempt to add two numbers and exhaust system heap space?). The way these are currently handled in the C language (to the best of my knowledge) is by three different mechanisms: 1) floats return special floats that say indicate that there was an error somewhere, like NaN (though you can probably instruct your OS/hardware/whatever to issue these as signals instead of silently spitting out an NaN), 2) wrap-around is loosely taken as a standard but truly it has undefined consequences, your code must guarantee that this cannot happen, and 3) the program will probably exit. This is messy but we have learned to deal with it and has become second nature to C programmers; but that doesn't means it is good.

But this doesn't need to be the case, we could use the return value checking that is being promulgated by some here. We can define add as...

error_code add(int a, int b, int *return)

...where int could be any number type and translate every occurrence of "a+b" in our code into something like...

int ret; if (err = add(a,b,&ret)) { // err handling here } // ret holds the answer here

I cannot believe this is preferable to anybody, in fact I am going to go out on a limb and say that it isn't. Instead we just trust this to work when we know that there are instances where it won't and, in the case of floating point math, it is extremely common for you to hit those cases where it doesn't work. If we were serious about writing code that handled these errors gracefully, our C code would be unmaintainable. If we were honest about the source of this laziness, I think we would say that this is due to the syntactic and mental overhead of the error handling. The fact that we don't code like this, even the very fact that C will spit out an NaN and propagate it along indefinitely, is proof in point that people dislike this type of "check the return value" error handling. This is C more or less pushing us to write code that is less robust.

If we really wanted to consider what happens in a Common Lisp system, you would have a function "add" that takes two numbers and will always return the correct result of that addition or won't return at all. This means no wrap around overflow, no NaNs; this is vastly cleaner. However, as far as I know, this has nothing to do with CL in particular, this is presumably how Python or any language with a exceptions works. This is what I cannot fathom: that there are people that are willing to throw away this simplifying assumption because it means that your code might have controlled non-local transfer of execution. This is what Joel on Software directly says (linked elsewhere in this thread); exception handling is like goto, goto is bad, even when it is contained within an apparatus fixes its problems, like the exception handling apparatus. Or that people think the same amount of work is involved in either system? How does that make sense? Which way would you rather treat something like "add(a, add(b, add(c, d)))" because to my eye the C style handling adds a bunch of boiler plate code that I'd rather not write while adding little to no value. Like I was saying, I cannot fathom it so it is hard to form an argument against the alternative stance that I do not understand. Perhaps there are places where we want our execution so close to the structure of the code that handling errors C style makes sense, but I have to imagine that they are few and far between.

If we compare a more common example where people will place error handlers: writing to a file. Is it better to have writefile(file, data) return an int that indicates error, or is it better to just say "writefile puts this data in file, period". Here are two errors that might come up when writing to a file, we don't have write permission for that file or the disk is full. Where do you want to handle these errors? One error happens when we open it, the other happens when we attempt to write to it further down the call tree, but presumably we might want to catch both and deal with them at the same location. With exceptions you catch/handle the exceptions you are interested in. When returning error codes you have to manually defer the error up the call tree, affecting the interface of every calling function up to the highest function that can actually handle the error. So you can add the boiler plate code to combine and propagate errors up the call tree to your task list now. At the root of this is the exact same issue as the previous point, it adds syntactic and mental overhead for the programmer.

This article seems to have spawned some responses. Consider this post: http://www.yosefk.com/blog/error-codes-vs-exceptions-critica... He makes claims like in the code...

open_the_gate() wait_for_our_men_to_come_in() close_the_gate()

...if there is an exception inside wait_for_our_men_to_come_in then we'll never close the gate. While this is true for the code he's written, most people would (or should) consider that code buggy. In my experience and the comments of that post confirm it, most languages have a mechanism to ensure certain side effects happen even under non-local control transfer. Where are the points of intermediate state that he render exceptions equally bad as error codes? Are they the states that we explicitly account for in any bug free program, like closing the gate if there is an problem bringing the men in? I will reiterate, I truly am at a loss, this is not a rhetorical question. It seems like I am missing something.

To sum up: One method seems like a clean method of dealing with errors that will happen, the other seems like a nightmare syntactically and basically consists of code that I deeply feel should be up to a compiler to write.

smithzvk··on Why I’m not leaving Python for Go
I am glad to see some CL condition system pop up here. This article basically turned me off from Go and reading peoples support for C style error handling has made me question what the heck they are thinking.

There are actually several nice things about the CL system, but nothing there is going to convince someone that actually thinks not only that having every return value in your language serve the role of an error signal is reasonable, but actually arguing that it is equivalent from a programmers perspective or even a better method of programming.

smithzvk··on The Pirate Bay - 9 years and still bloody runnin
Going back and reading the initial comment, I think I see where you are coming from. The poster says "FOSS projects like GNU..." and that is off base if he was implying that GNU has anything to do with OSS. You are right, no one should be talking about a GNU as a FOSS project due to their outright rejection of the OSS ideology.

But just so we're clear, it is possible to talk about FOSS itself (the software) in a meaningful way. It's not like the term is oxymoronic or something, in fact, the two descriptions are nearly redundant when it comes to describing the rights you get as a user, which is what you should be concerned with as a user of the software.

Why shouldn't we apply this to projects as well? I guess the questions I would ask to clarify the point are: 1) What do you call a project that would like to empower users with software freedom but would also like to embrace the development style of Open Source? 2) Given that there are so many projects out there that embrace exactly that combination, shouldn't we have a name for that?

smithzvk··on The Pirate Bay - 9 years and still bloody runnin
There is such a thing as FOSS. That stands for Free and Open Source Software. There is software that is "Free" and software that is Open Source and, as I'm sure you are aware, the software that belongs to both groups is the (vast?) majority of each respective group.

It is called Free _and_ Open Source Software, it is the intersection of the two groups, and it is a pretty useful group to think about when you want to be inclusive and avoid word definition collisions with the word "free".

smithzvk··on English is heavily left-handed
I argued the other day that for programmers using qwerty, the left shift gets way too much action as all of the programming stuff is on the right hand, stupidly, the most common stuff tends to be an the shift level.
smithzvk··on Firefox 15 plugs the add-on leaks
While this is basically true (and even more so for me, typically 3+ months before a security update finally nags me into rebooting 1 month after it was installed) Firefox saves your open tabs, so restarting takes no time and it is basically like it didn't even happen.
smithzvk··on Eric Raymond: Why I think RMS is a fanatic, and why that matters
It is interesting that you should bring up SpaceX. If SpaceX used the GPL, there is nothing to say that you would ever get to explore that source code. The only time you would be guaranteed the source is if you have a rocket of your own and are using their control system, which is arguably when this becomes more than just a wonderful curiosity and becomes truly important.

The GPL doesn't stop software developers from making money, only certain software developers that would like to market their software software in certain ways, like sell it as if it is a scarce commodity when it is not. Although I'll have to take his word for it, RMS is quick to point out that the vast majority of software is produced under private contracts or internally. Under these situations, the GPL has no "not getting paid" issues for developers as the software you produce under contract is the companies to distribute under the GPL or not distribute. In fact, the FSF has an explicit statement that NDAs for contracted GPL work are acceptable (https://www.gnu.org/licenses/gpl-faq.html#DevelopChangesUnde...). RMS doesn't have a problem with companies keeping their secrets or with developers not allowing you to see the source code they write so long as it isn't on your computer. The flip side is that he does have a problem with the independent developer that wants to write a closed source program and milk it for all it's worth by selling it by the copy or the subscription to end users. Admittedly this is a well represented group on Hacker News and amongst entrepreneurs in general, probably because copying bits can be a quick and/or easy way to make money when compared to getting paid for the actual development directly.

To his credit, RMS has been fairly clear (at least recently) that writing GPL software to sell copies is not a viable business model. And no, I don't think that developing proprietary software so that you can force a false scarcity should be called evil, but perhaps immoral is not too far off, and certainly sketchy.

edit: Actually, on second thought, I think RMS hasn't been clear on this; he seems to refuse to answer the question because it is irrelevant. If the business practice is immoral, it doesn't matter if it is viable. I took his silence as conceding the point.

smithzvk··on Humble Indie Bundle 5: pay what you want for video games
Update on that. I downloaded it and gave it a try and sure enough, the sound doesn't work. Looks like they didn't perform the due diligence of testing. I'm currently downloading the windows executable to try with my system install of Wine.

My rule is, if it is proprietary software, I don't fiddle with it. I dislike Playdead for making me break my rule.

smithzvk··on Humble Indie Bundle 5: pay what you want for video games
I agree, but so long as they actually tested it to make sure that it works and will support issues with the wine setup, then it is acceptable, IMHO.
smithzvk··on Bitcoinica hacked. ~$100k USD stolen.
If you look at the Anonymity page on this wiki, it basically states that being able to generate as many addresses as you want is not much protection. The coins still need to be transfered between your wallets, and that means people can track whether a wallet has received any funds from an address that has been reported as having stolen coins (after the theft was reported, of course) In fact, I think it is down right easy to do.

https://en.bitcoin.it/wiki/Anonymity

I assume that "tumbler" is basically as good as any eWallet service with a bit of obfuscation on the transactions in and out. That is fine, if you trust someone enough to take you coins, mix them with a bunch on other peoples money, and then send them back to when you need them, you can remain pretty anonymous. This is because that person/organization can do virtual funds transfers off of the bitcoin block chain record. However, in the scenario where address are marked as dirty or clean, that eWallet supplier is going to find him/herself in the possession of many dirty bitcoins and will have to burn them.

In the Silk Road example, if people use stolen bitcoins on that network, all bitcoins that get sent in are tainted by that (to some percentage) and the value of the entire working volume of Silk Road bitcoins in the "tumbler" laundering machine is lessened. This means that either Silk Road passes that loss of value on to the sellers, possibly pissing them off, or they throw those bitcoins away (or send them back) and tell the person paying with them to pay again from a clean address because that money was reported as stolen.

smithzvk··on Bitcoinica hacked. ~$100k USD stolen.
> Yes, if a 'regular' bank was hacked and money was stolen, those stolen from would be reimbursed, whereas with bitcoins there is no chance of reimbursement

This is not entirely true. When someone is holding a great deal of someone else's money, they can do exactly like banks do and insure their bitcoins, or they can just take the hit and pay for it out of their own pocket, like slush did when his mining pool's bitcoin wallet was comprimised: http://bitcoinmedia.com/compromised-linode-coins-stolen-from... The end user isn't necessarily screwed, and should probably request whoever is holding their money to protect it not only via security but also via some guarantees against the worst case scenarios.

smithzvk··on Bitcoinica hacked. ~$100k USD stolen.
Well, I think that there is something like the ink packet for bitcoins, or there could be. I may be wrong (and please correct me if I am mistaken), but it is my understanding that every Bitcoin transaction is public (just peruse the block chain), it's just that they are transfered between possibly unknown parties. You could track where those bitcoins went (the thief's account), and where that thief subsequently spent or laundered those bitcoins. You can trace them as far as you like though they would quickly get combined with bitcoins that came from legal means and then you can only give lower and upper bounds on how many bitcoins are illegal in each wallet.

We could, as a society, decide that we will not accept bitcoins transfers from addresses that are reported to have taken any stolen bitcoins, whether directly implicated or implicated by violating the rule I just described. We could also decide that the only way to get your address back into good standing is to, for instance, transfer whatever coins that could possibly be ill-gotten into a bitcoin sink (an account that everyone agrees to never accept transfers from, basically dead bitcoins). You can even come up with more continuous proposals; not just illegal or legal, but rather you can have a 90% clean account, and it is clear how that translates to value of your bitcoins when dealing with people who won't accept illegal coins.

This is in many ways like an ink-packet. That doesn't get the other person their bitcoins back, but it removes the financial incentive to steal. Of course this is probably ripe for abuse. It would definitely be a way to screw over whoever you were sending money too, but it wouldn't be a charge reversal. You lose the money but the other party gets no spendable money.

smithzvk··on The Real Cost of Used Games
Admittedly, I am not an expert with video game issues, but I would say that the biggest loss of quality between a used game and a new one is the amount that graphics and game play technology have progressed in the time it takes for the game to become available used.

Perhaps a way that game developers can combat the sale of used games undercutting their current offerings is to make games that are so good that people don't want to part with them so quickly.

smithzvk··on Why I Pirate - An Open Letter To Content Creators
> The problem with these arguments is they boil down to "I will never pay more than $x for product type y" when these prices should really be dictated by the market itself.

I kind of like the complete view that the OP provides. Copyright infringement is a very real market force in this system. It is empirically the case that the OP will not pay more than $x and that price seems to be surprisingly close to what I 'feel' is right. I wonder how many others agree with these numbers. This price is dictated by the market when the relatively low risk of legal action is factored into the equation.

What he seems to be arguing is that publishers should be less concerned with rectifying this market force via legal means and more concerned with rectifying it via improving the services offered.

smithzvk··on Introducing the HUD. Say hello to the future of the menu
> I usually learn faster than a computer, so the way I see it is not computer "learning", but computer arbitrarily "changing" its behaviour. So, instead of memorizing "to call Jack, I have to press J and Down and Down", I have to always pay attention when the interface changes...

Thanks for putting this in words. This is an example of an innovation that reduces the learning curve to a device, but almost certainly makes it slower for the experienced user. One of the reasons that I use GNU/Linux on my personal computers is precisely because FOSS interfaces tend to not make this trade-off (as evidenced by Emacs, Vim, Blender, Inkscape, and many more). So, I am a bit luke warm towards this new HUD interface (then again, I haven't forced myself to swallow the Unity pill yet, either).

My keyboard doesn't randomly swap around the keys on my keyboard, and I appreciate that because I spent the time learning to touch type. Arguably, adaptively moving keys could be faster for 'hunt and peck' typists, but not for people who have spent some time learning how to type.

smithzvk··on In case SOPA passes: IP addresses of popular websites
Did they reintroduce it? I saw it shot down around 5PMish EST, and rightly so, I suppose, if you believe in SOPA.
smithzvk··on Live video of House SOPA hearing
This saddens me. I just saw Polis attempt to grant an exemption for University run DNSs (something already in place for businesses). The amendment was rebutted with a meaningful argument. Then I watched 20 minutes of completely mislead arguments such as people thinking like this would mean universities could freely violate copyright, post copyrighted material without legal consequences, and anybody at a university is immune from prosecution when downloading copyrighted material. It was eventually voted down. Ugh, clueless people...
← PreviousPage 3 of 3