theaustinseven's comments

theaustinseven | 9 years ago | on: Ask HN: What are you working on?

I don't really have much out there right now. I have some spec, but it's really out of date. I have done some ML and I would say that while patten matching/powerful type inference are important to the language, in a lot of other ways my language won't feel as limiting as a purely functional language like ML. One of the important things I think a modern programming language needs are functional components that can be used when necessary. An example is annotating when you want the compiler to verify that a given function is a pure function(no side effects). This allows the compiler to make certain optimizations in both removing computation when results are ignored, and massively helps with concurrency(functions can be run in parallel when you have the guarantee that they won't interfere).

theaustinseven | 9 years ago | on: Ask HN: What are you working on?

I've been working on a new programming language mainly to be what I think Go could have been. I think that it is important for us to have a compiled language that feels like a dynamic language. Its taking a lot of influence from ruby, erlang, and some assorted functional languages.

theaustinseven | 9 years ago | on: The Min-T Processor

If your going for a small processor, you should really implement a small subset of MIPS. It is really simple, and you can even compile programs from C and run them on your processor. Some Universities use this as their primary teaching tool for processor design.

theaustinseven | 9 years ago | on: Diaspora-common: does 'rm -rf /' on purge

All scripts should be run with "-eu". This prevents unbound variables from ever being used and will end the script on a failed command. If you want commands in the script to fail, just drop the "e" and run with "-u". At my last job we put "-eu" in literally all of our scripts to avoid this very problem.

theaustinseven | 9 years ago | on: Ask HN: What are your favorite tech podcasts?

I personally haven't found any quite as good as the Bike Shed(http://bikeshed.fm/). It does often focus on Ruby, but overall the types of problems they cover are not limited to Ruby in scope. I mainly like it because I get to hear some developers significantly more experienced than myself talk about how they solved certain problems.

theaustinseven | 9 years ago | on: Ask HN: What is your weekend project?

I've been working on Otter, which is an Operational Transformation Engine(think google docs real-time collaboration). https://github.com/TheAustinSeven/otter

The hope is that this will make it a little easier to build collaborative apps. More recently, though, I have been spending some time designing a new programming language(I know, I know, we already have so many), so I haven't spent as much time on otter.

theaustinseven | 9 years ago | on: Show HN: Operational transform for realtime collaborative editing in JS/Flow

Yeah, I guess I see what you are trying to say. I just want to clarify when I say predictable, I mean that given a set of operations. No matter the order they come in, the results will be the same. This makes OT powerful in that everyone just needs the operations eventually in order to have a consistent document. The only middle ground that I could see that would allow predictability in the document, and help mitigate these silent errors would be to notify users of when they have both edited the same range before consistency was reached. This would catch "almost" any case that I think you are talking about, although would of course miss the situations in which semantic errors arise due to errors in very different parts of the document(e.g. referencing a figure 2.1, while someone changes that figure to 2.2), but these errors can still easily arise with a single editor, and so are not really unique to OT. I do think that it would be nice to have a solution to that problem though...

theaustinseven | 9 years ago | on: Show HN: Operational transform for realtime collaborative editing in JS/Flow

I would expect that if an editor makes a change, their change should be preserved. There is no general case where you can decide which edit to keep, because in some cases(like the one you presented) people are editing the exact same sentence, but far more often people will not make edits to the same small part at the same time(at least in the real world). This makes OT very practical since generally the eventual consistency can be reached quickly, and there is consistency, so the results with given inputs are predictable.

theaustinseven | 9 years ago | on: Ask HN: Is personal GitHub information public domain?

Regardless of whether or not they are legally in the right, this is a definite dark-pattern. Users should not exist on your site unless they signed up. Full stop. This shouldn't be a question of whether they should allow users to delete themselves, but rather why they are creating users for people who don't even know about the service.

theaustinseven | 9 years ago | on: Apple owes $2M for not giving workers meal breaks

At the last company I worked at, one of the first things they told us was,"you must take these certain breaks at approximately certain times in the day". The timing didn't have to be exact, but this approach allowed people to take breaks in a more informal manner(they could adjust an hour or so in either direction), but kept compliance with regulations. I think this approach allows the employers to be somewhat informal about breaks, without opening themselves to lawsuits.

theaustinseven | 9 years ago | on: Thread-Safe Lock Free Priority Queues in Golang

The insert is still an N operation since N in this case is the number of nodes in the list. It would only be O(1) if the list was of constant size(and even that would be misleading). The worst case is still infinity, because you are concerned with a single insert operation, and not that there are some making progress. We are merely concerned with the progress that a given insert operation makes, and there could potentially be an infinite loop. You can reduce the probability of this happening by shortening the loop between repeating the CAS operation.

Otherwise I think it would be awesome to see profiling results, I suspect that the garbage collection time can be reduced significantly. I have recently been implementing a locking thread-safe queue, and I think it would be interesting to compare the differences in speed and garbage produced, just to get a better idea of the pros and cons. I suspect if you shortened the retry loop you have, your implementation would be faster.

When I said flawed, I meant that it was not really enforcing order on insertion, but for many applications, this doesn't matter that much. Close enough is often good enough(and the probability of this going wrong is fairly small, except in extreme cases).

theaustinseven | 9 years ago | on: Thread-Safe Lock Free Priority Queues in Golang

These queues are thread safe and lock-free, but they are far from efficient. My biggest issue here is that the runtime evaluations are wrong. The insert operation is definitely an average runtime of N (where N is the number of elements in the queue) and a worst case of infinity(since the insert operation is restarted if a race condition occurs, an insert operation could be repeated forever). I don't know if I missed anything, so I could be wrong, but this implementation seems incredibly flawed.

That said, it is always nice to see new data-structures and I really wish there were more posts like this. I always like to see the different ways that people try to solve these problems.

page 2