HNHacker News
TopNewBestAskShowJobs

aethertap

3,219 karma · joined August 13, 2012

submissionscomments
aethertap··on NSA whistleblower warns of surveillance state
> The point is that hypocrisy would eventually cause a change, but there would be a period where things would work the way that you describe.

That may be possible, but it's also possible that total surveillance would result in a permanent entrenchement of whoever manages to gain (or maintain) power through the transition. It's very hard for a competing ideology to rise in prominence if it's possible to detect and crush every individual who starts to disagree, before they can even communicate it to anyone else. I think it's likely that with total surveillance we'd soon see the rise of rapid automated enforcement, which would be a incredible impediment to any attempt at changing the status quo.

aethertap··on NSA whistleblower warns of surveillance state
I think this would only work if everyone also had perfectly equal power to abuse the resulting information flood. In the U.S., it's common knowledge (or at the very least, common belief) that the majority of politicians are corrupt and routinely do things that would land the rest of us in prison. Despite that knowledge, we generally have no power to do anything meaningful about it because they make the rules.

I don't want a world where every move I make is being watched and I'm subject to arbitrary action by people who have power. I think total surveillance, even if it includes the powerful few, would be a disaster for human rights and freedom in general. So what if the dictator is impeccable in his daily routine, if he's watching every move of a population and subjecting them to unequal treatment under the law?

aethertap··on Google got it wrong. The open-office trend is destroying the workplace
The best working environment I was ever part of in terms of productivity was set up with private offices, but at the team level. We'd have a team of people who were all working on the same component (five or six people) in a room with each other, but otherwise insulated from the bustle of the office. It was hugely helpful to be in a room with all of the people who were relevant to your work, and no other distractions. That may have just been due to having a good team, but I have a lot of good memories from that time.
aethertap··on Be Kind
I had almost that exact conversation with my boss a few years back (except for the part about almost getting fired). I was completely stunned that people thought I was indifferent to their ideas and bent on finding flaws, because I had actually made an effort not to do that for quite a while before the conversation. It turns out that, at least for me, navigating through people's sensitivities while having a technical discussion and making sure the truth is discovered is extremely difficult.

The effect it had on me was to basically make me clam up, because I decided that pointing out issues that would eventually crop up was not worth the risk of alienating my coworkers. It's hard for me to say whether this was a net positive or negative in terms of overall productivity, because if my shutting up makes the team more cohesive, I can see how finding the problems for themselves would grow their strengths over time. On the other hand, we often make decisions now that I would have questioned before in the process of talking it out (that includes my own decisions often enough because the whole discussion process is chilled). Ultimately, we seem to have a more congenial team (at least on the surface) at the price of having more bugfixes to deal with. Very unclear to me whether I did the right thing, but I can't really think of another way to handle it.

Edit to add:

The other big effect I noticed after learning to let stuff go was that I generally feel a lot less invested in the projects now. Before, I would treat every project I was on like it was my baby, and now I feel much more like I'm just working on somebody else's thing. That's not necessarily a bad thing (my phrasing is poor above, but I'm too tired to fix it at the moment), because it probably more accurately represents the real situation. The sense of detachment does tend to mean that I don't push as hard to go beyond expectations though.

aethertap··on Science Fairs Aren't So Fair
Let me give you my perspective as a parent who fully intends to give every possible educational boost to his child.

I have a job, and lots of other obligations. Quite frankly, I don't really care if she wins the science fair or not. I suspect that if she decides to compete when the time comes, she'll have a good shot at it just because of the level of effort we put into education and the equipment we have around the house. The majority of my free time and money is spent on this, so we have a lot of unusual stuff.

It's easy to put that kind of effort into your own kids, because they live with you. They're around for all of your spare moments, and they can use equipment you have access to that demands close supervision. Now here's the part that's relevant to your comment - I'm also heavily involved in her school, trying to do as much as I can for all of the other kids who are interested (the topics are computer science, math, and robotics). I get to spend maybe two hours a week working on that, after my other obligations are taken care of. It's simply not possible for me to do more for the school, and even if I could the problem is concentration of resources. Given a certain budget (time and money) that I have available for this project, it's obvious that I can make a large difference for a small number of kids, or a small (forgettable) difference for a large number. Taken to the extreme, I can make an enormous difference for one kid (mine). No matter what I try to do, I'll never be able to make that kind of difference for even a small classroom full of kids, and certainly not a whole school. So I'm left with this choice: Do I spend my resources in a pursuit that's likely to be ultimately fruitless (i.e. trying to "raise all boats"), or do I spend it on something I have a very high chance of success with? Which of those is more wasteful? My answer is that I do the best I can for the school, but I feel no guilt about giving more to my own kids.

In the end, if my daughter ends up winning a science fair it's going to look exactly like a case of inherited privilege, and maybe that's what it is. That's not because I'm trying to hold down everyone else though, it's just a simple matter of logistics. If I could give that kind of boost to everyone, I'd do it in a heartbeat.

aethertap··on How the sugar industry shaped key government research about your teeth
This is true, but I think it glosses over a bunch of important structure in society that isn't obviously connected to the voter. An analogy might be to say that ultimately, all of your behaviors come down to the neuron. While technically true, it ignores brain structures, hormones, emotional state, etc that are almost always more important in actual treatment than any attempt to deal with individual neurons.

Society is an enormously complex thing with all kinds of hidden influences and imbalances, and I think that saying "it's all the voter" tends to shut down thinking about the real alternatives for fixing problems. I'm not saying that I know what those alternatives are, just that they are likely to exist because we live in a society with structure. Since they're likely to exist, I think we should be looking for them and trying to address them in order to treat this kind of problem.

aethertap··on Rivets.js: Lightweight and powerful data binding and templating
Thanks for the tips! I haven't tried the developer tools, which sound like a crucial piece of the puzzle. Without them, the debugging experience had a lot of "Why is there nothing on the screen and nothing in the console?" moments. I did a lot of old-school printf debugging with it because of that.

As far as the big form, I agree it's typically not what you want. I'm working with a pharmacist on a workflow specific to her particular location though, and this is what we think will meet her needs the best. It's one of those tools that you'll use 500 times a day, where taking advantage of rapid input via muscle memory trumps any kind of new-user friendliness. The over-complication mostly seemed to come from the need to have the form auto-save to an alternate backup location periodically.

I've actually just about got her convinced to try some vim-inspired keybindings with it (speaking of strange, but efficient, UX), but we'll take it a step at a time on that front.

aethertap··on Rivets.js: Lightweight and powerful data binding and templating
I had it by itself. I'll check out reflux and the react developer tools (also didn't have those).
aethertap··on Rivets.js: Lightweight and powerful data binding and templating
That's interesting to me - I posted this up because I'm doing a small app right now and was getting frustrated with the amount of code I had to write to get React to do what I wanted (basically, editing a large, fairly complicated data structure via a big form). Rivets cut my codebase by about 2/3 and made it easier to understand, but I have to say that given everyone else's positive experience with React I feel like I must have been doing something wrong.

I'll have to revisit it again later I guess. One thing that was particularly annoying with what I was doing was that the whole form would fail to render on any error, and I'd often be left without even a console message to tell me what React didn't like. How has your experience been with debugging React apps?

aethertap··on Goodbye MongoDB, Hello PostgreSQL
The ORMs I've used have always tried to map tables to classes (or whatever similar language structure is available). That works well almost all the time, but I get tripped up when the queries get to be more complex or specialized to a particular use.

I haven't used SQLAlchemy's expression language, but glancing over it now it looks like it might be just what I was looking for (at least for python), so thanks for the pointer.

aethertap··on Goodbye MongoDB, Hello PostgreSQL
Your comment made me realize why I prefer to work in ORMs instead of raw SQL, even though I'm frequently frustrated by their limitations - it all comes down to composability.

The mongodb syntax looks like it supports composing statements much more readily than SQL. It makes me wonder if there's been any serious work done making a query language that's fully as general as SQL, but is designed to be safely and easily composable so that you can build queries up from parts.

Anyone know of such a thing? The mongodb approach of query-as-data-structure is as close as I've seen.

aethertap··on Ask HN: Differences you've noticed between CS students and the self-taught?
The most valuable thing to me in the CS program was really being exposed to things I didn't know existed. It may not be as big an issue today with places like HN and Reddit to push you in unexpected directions, but I really benefited from being introduced to stuff I wouldn't have even thought to look at. Once the introduction was made, I was mostly self-taught because I'd dig into it out of pure interest, but that initial introduction was vital.
aethertap··on Graph drawing by high-dimensional embedding (2004) [pdf]
I used this technique in a javascript application to render large graphs (>200k nodes). On my laptop, with my simple implementation, it could lay out a graph of that size in about 5-10 seconds (running in firefox 20-something I think). Given the amount of time required for getting a force-directed layout, this algorithm literally saved the whole project.

The layout it produces strongly emphasizes hierarchy, at least in my implementation. While it's not as pretty as a real force-directed layout for the type of data I was rendering, it's quite passable visually.

aethertap··on The time has come to stand up for the GPL
In for $50.
aethertap··on Quadriplegic woman flies F-35 simulator with nothing but her thoughts
This stuff is amazing.

I think I'm going to add a clause to my living will asking to be hooked up to an EEG and a "see with tongue"[1,2] kind of feedback device if I ever end up in a vegetative or paralyzed state. I don't know if it would work or not, but the results here seem suggestive that it might be possible to learn a whole new set of senses given the time and appropriate gear.

1. http://www.scientificamerican.com/article/device-lets-blind-...

2. http://www.seewithtongue.info/

aethertap··on Robotic Extrusion: 6-axis 3D printing
This was on kickstarter a while back:

http://www.fluxintegration.com/pages/flx-arm

https://www.kickstarter.com/projects/535786699/flxarm-low-co...

aethertap··on Impossible Escape?
It's a way to reduce a large number of bits to a single bit. Each region defined on the board comes to represent one bit of the answer, and that bit is determined by the "direct sum" (or exclusive-or) of all of the coin positions in the region. A direct sum is basically addition with no carry, and in this case it's done base two (so 1+1 = 0, 0+1 = 1, 0+0=0). You can also think of it as an even/odd relation: if the number of 1's is even, the result is zero. If it's odd, the result is one. If you change any single bit, you flip the result.

Once you can do that, all you need is to be able to cleverly define your regions so that you can find a single square that overlaps with any given subset of them. Flipping the coin in that square would then change the direct sum for each of the overlapping regions, and you have your answer. You first read off the bits as they lay on the board you're given, then you figure out which bits you need to flip to turn that into the pattern you want, then you find the square that overlaps with all of those bits and flip that coin.

The way the regions are laid out in this case makes it possible to do just that - you can find a square that will overlap with any combination of the regions from none of them to all of them.

aethertap··on Harvard stores 700 terabytes of data into a single gram of DNA (2012)
It should be highly parallelizable though, so all hope is not lost.
aethertap··on A Software Engineer’s Adventures in Learning Mathematics
I am doing this too, with Macdonald's "Linear and Geometric Algebra" and "Vector and Geometric Calculus" along with "Networks, Crowds, and Markets" and "Chaos and Nonlinear Dynamics." It's slow going, but very enjoyable.

The most interesting side effect I've noticed from doing this is a dramatic improvement in my ability to focus. I had been suffering from a general scatterbrained, distracted feeling for a while before I started. I think it was due to the way I consume content online, trying to follow too many interests at once. I set aside about an hour a night to work on these math courses and within a couple of weeks I noticed that my focus was greatly improved. For that reason alone I'm counting this project as a major win, regardless of whether I master these topics or not. Having something to study seems to be extremely valuable for general mental health, at least for me.

aethertap··on The second crypto war and the future of the Internet
This is cool, thanks for sharing. I'm passing it on to the relevant teachers at our school.
aethertap··on Hand Ciphers
If you like this kind of stuff, definitely check out the book "Cryptanalysis - a study of ciphers and their solution" by Helen Fouche Gaines. It has loads of interesting hand ciphers of historical interest, going approximately through WWII. It also has tips for how to break them, and how to approach unknown hand ciphers for cryptanalysis (pretty fun stuff; I'm using it as a fun way to teach my daughter math and programming).
aethertap··on Unprecedented Level of Human Harm to Sea Life Is Forecast
One of the things I'm doing is attempting to use cattle in a way that sequesters carbon in the soil in the form of humus. Others have had success using a combination of trampling and long-rotation grazing practices to boost soil carbon by many tons per acre, without requiring the use of machinery. Biochar is also a promising area for investigation, because you can combine that with heat and power production to get carbon-negative energy (using something like a top-lit updraft gasifier, or TLUD). If you then add a fast-growing coppice species as the feedstock, you have a sustainable energy production system that makes effectively permanent improvements to soil while soaking carbon out of the atmosphere at a pretty rapid pace.

On a smaller scale, you can change eating habits so that your food comes from sustainable sources (or even grow a lot of it yourself if you have space for something like an aquaponics setup). Learning to repair things rather than replace them is another small thing that has a large impact over time, keeping stuff out of landfills and reducing the impact of planned obsolescence.

If you want to have a larger impact than those things (which I understand may feel like insignificant posing), look to your local economic networks. Things like getting zoning laws changed to allow for integrated living and small business areas, with walkable streets, can have a huge impact on peoples habits in terms of driving and buying things from far away. That's getting into government territory, but it's local government so you have a much better chance of success.

If you're interested in tinkering, there are a bunch of things that can be done in the home energy arena that make a big difference. Start with improving efficiency (insulation, draft elimination, passive solar retrofits). After that, you can consider things like solar water heating, or high-efficiency wood heat for the dwelling itself. There are wood heater designs that you can build with minimal skill that are very close to as good as you can possibly get in terms of efficiency (look into rocket mass heaters or masonry heaters). If you make a job out of it, you can have a large impact over a few years doing these things for other people who want to do something meaningful but don't have the time/knowledge/resources to make it happen.

If you like biology/ecology, I think there is tremendous potential in the creation of passive productive ecosystems. The basic idea here is that we take space that is currently under-utilized (mowed medians, frontages, hillsides, unused lawns etc.) and plant them up with productive perennial species like fruit and nut trees, herbs, and various vine crops. Combined with minimal support from municipalities for allowing safe access, these kinds of areas can have a big impact on a lot of positive things - building connections in a community, providing a significant source of otherwise hard-to-get fresh fruit and nuts that's free for the taking, and at the same time providing habitat for wild animals to recolonize places we've been keeping functionally sterile at great expense. This is the other thing I'm doing on my property - creating a permanent productive forest environment (the cattle are part of the preparatory steps, and will gradually be phased out in favor of a tree-based ecosystem). It's easier to do than it sounds, if you just work on it a bit at a time. If you don't have land available, you can often find someone who does.

A business model I'm exploring in this space is the "urban farmer" or "urban forest farmer," who basically leases unused lawn spaces in cities and turns them into productive systems. The farmer would then harvest and sell the produce locally to make the profit - possible through a CSA arrangement. If you have the people skills, you can potentially get a large percentage of suburban or low-density urban properties involved for a given area, and you end up having "farm land" to use for local food systems and ecological remediation. It eliminates the need for mowing and other busy work for the owners, and they get a cut of the produce as a side benefit. It would also hopefully get neighbors talking to each other as they see the neighborhood transform, which combined with better zoning laws would probably lead to some local businesses springing up to support either your farming activities or things that follow from there (local restaurants, food preservation shop, etc).

There are a lot of options for improvement when you start looking at how things are being done today. Some of these things probably won't pan out, but others will, and the fact that we're starting now rather than waiting for somebody else means we're leading by example. Others will follow as they are able when they see what's possible.

I think the biggest thing is to change your mindset to think in terms of snowballing passive systems. Every time you make a wood heater for someone that uses half (or less) of the firewood to cleanly heat a space, you potentially save that quantity of energy every year after for the life of the home. Each productive tree you plant provides 500-2000 lbs of food every year for generations if it's maintained, and the maintenance is minimal. Half an acre of coppiced firewood species like Black Locust can provide the majority of the annual heating needs for a modest, well-insulated home forever. That's how you can maximize the impact of your labor - build things that keep on giving after you stop working on them.

There are loads of people out there right now who can't find a decent job. If we can make a viable business models for doing this kind of work, we'd have a huge force multiplier there as well by inspiring them to take on similar jobs, or even doing work that complements our own work.

aethertap··on Unprecedented Level of Human Harm to Sea Life Is Forecast
It's the ultimate example of the bystander effect. Everyone is waiting for someone else to take charge and do something about it. There are plenty of things that can be done by individuals right now though.

Learning about that stuff is a pet project of mine, and the main reason I bought a farm and started converting it. I'm hoping that it will prove possible to make economically viable replacements for a lot of the more damaging parts of our civilization. The parts I'm working on are food production and energy use. Whether these things will work is an open question so far, but I do think there's reason for hope.

As far as humanity waking up, I think it's more productive to think in terms of how much of humanity is awake since that gives us a measurable quantity that we can actually influence. Hopefully, we'll be able to present people with a solution that actually works and doesn't require big action from on-high. If it doesn't screw up their quality of life, and it's good for the future of humanity, I think there are a lot of people who would make some changes.

aethertap··on Ask HN: What tips or tricks do you use for fast and efficient note taking?
I tend to use notes as a self-test rather than for logging what's been said. For example, as I hear something important, I'll write a small question to the effect of "what is X?" or even just "X?"

Then (this is the important part) soon after the note-taking session is done, I go back and answer all my questions from memory, in writing. That lets me get tons of stuff down on paper later at a slower pace, and it also helps to cement the stuff in my mind because I'm not distracted by trying to write it all down while it's happening. Forcing myself to recall it also does a lot to make it stick.

Usually I can use my questions as cues to go look up the stuff I forget, and if there's something that I know I'll forget and won't be able to look up, I'll try to write that down (that's pretty rare though).

aethertap··on Misconceptions about Evolution
A change in selective pressure would trigger a change in the output of selection. The parent's point that reduction in trees would trigger a change to more walking behavior makes sense to me - the environment changed, which caused a change in selective pressures, thus making walking more favorable for survival and "triggering" the change.
aethertap··on Rust, an Anti-Sloppy Programming Language
I just rewrote one of my parser functions using that, and it literally eliminated 90% of the code and improved error reporting at the same time. Very cool, thanks for the tip.
aethertap··on Rust, an Anti-Sloppy Programming Language
> If unwrap() works for you, why not use the try! macro

Unwrap only works in a loose sense. Writing a parser generator, I want to have it give usable parse error messages. Sometimes this can be done easily with a try!, but many times I should be doing a bit more processing on the error in order to get things like line numbers, input samples, and expected alternatives in the mix.

> and I write thousands of lines of Rust code a week

This is what I think I need to be doing ;). I'm not convinced yet that what I'm trying to do can't be done elegantly in the language, it's just uncommonly hard for me to "get it." I've been writing code professionally for 14 years, and have used over 30 languages in various sized projects during that time, and Rust has given me the biggest skill-check of the bunch. I actually think that my experience with other languages that have similar abstractions is getting my way more than helping.

Regarding HKTs, I'm not 100% certain they would solve my problem, but I frequently find myself wishing I could work in that space. I definitely miss Haskell's do-notation, which I think would be a potential feature in the language with a true monad (I realize there's a macro for it currently, but I haven't played with that yet).

In my original comment I said that my problem was a feedback between algebraic data types and borrow checking, but I think on further reflection that it would be more accurate to say it's between closures and borrows. The and_then function of Option and Result allows me to use them as monads, but doing so means I make lots of one-shot closures. I think the interaction that keeps stalling me is actually there, frequently with the &mut self from the parent function being used inside the closure in a way that's not allowed, or with a non-copyable type being used in the closure. I can get around it with some matching, testing, and unwrapping, but it doesn't feel nearly as solid and clear as the and_then approach.

I think Rust is an awesome language so far, and I think it's "shortcomings" are likely really my own shortcomings, but I have to say that it's been full of surprises so far. The advanced features I keep expecting to have seem to be locked away behind memory management barriers. I'll definitely keep working with it, and I suspect that I'll never turn back to C++ if I have the choice, so it's a triumph in that regard. It's just so tantalizingly close to being the "one true language" that I'm constantly expecting things of it that probably aren't quite realistic.

aethertap··on Rust, an Anti-Sloppy Programming Language
Okay, this is a revelation. I hadn't seen refutable lets, and this seems great!
aethertap··on Rust, an Anti-Sloppy Programming Language
Yes, I think I know exactly where you're coming from. I've gone through the same cycle of starting and stopping with it, for the same reason. I will sometimes spend hours looking at a simple function thinking "There has to be a way to get this to work," when I would have long since put the sequence of if-else statements in a C program, or just allocated some heap memory and been done with it. It's like I want Rust to be Haskell, but without the GC, and I feel like I'm dumb for not being able to make it work that way. It seems like the abstractions Rust makes available should be composable in a way that is prevented by the memory model. The language features are mostly there, but it's just tantalizingly out of reach and it seems to trigger my "puzzle solving" response.
aethertap··on Rust, an Anti-Sloppy Programming Language
I've been writing a parser generator in rust as a way to learn the language, and it's been a mixed journey of being very impressed, and very frustrated. A large part of my frustration comes from what seems like a negative feedback between algebraic data types and the borrow checker. I often find myself with a piece of code that looks clean and simple, using the Option and Result monads to deal with errors in an elegant way, but then I can't compile it because of issues with borrowing. Ultimately, I usually have to break apart the nice structure that feels natural and reimplement it as either a sequence of match or "if x.is_ok()" statements, which just feels... wrong somehow. It becomes tempting to just punt on the error handling and call unwrap() on everything just to get it working for now, which leads to problems later on. It's so close to being incredibly expressive and great for systems programming, but it isn't quite all the way there (at least for me, at this point).

I think that higher-kinded types will probably help a lot with this if they make it into the language, and it's likely that there's a way to get around the errors and get the full benefit from the algebraic data types and monadic functions that I just haven't found yet. The language is enough of a level-up from my C++ days that I'm sure I'll stick to it, even if those things aren't true.

I thought this quote from the article really nailed it regarding my recent experience:

"Expressiveness or elegance is not a goal of Rust. It’s certainly not bad in this regard, just not as wonderful as you may wish if you care it a lot."

← PreviousPage 4 of 8Next →