1,632 karma · joined May 4, 2012
Don't let this discourage you, your work looks great (props on the correctly tabulated output!) - but it would never work for me in what I think is a reasonable usecase :(
I'm not seeing the point here, Trello is excellent, and already great for software teams.
We've chosen Go for two really significant reasons: a) to reduce attack surface area and b) to enable us to distribute binaries to customers who want an enterprise/firewall install inside their own network.
Speaking about surface area, we've reduced the amount of framework code in stack (rails, gems, etc are all off the table) to zero, and we've reduced the app paths to a few tens of lines of code, in most cases.
Whenever one trades off a framework "to make things more secure" one has to be sceptical, there's a massive scope to introduce SQL injection, XSS and other nasties. In Go, in our case this is fairly limited. So take that reason with a pinch of salt if you aren't building a VERY well defined app with VERY small and skilled team. I don't expect this to scale well.
The second part is also a niche value, whilst it will have some benefits for us running our hosted version of Harrow, it'll have more profound benefits when we can sell binary installations to customers.
Finally, learning how to build applications in an API centric manner, without the crutch that is Rails has been interesting, and has made us all better programmers, we have a more interesting architecture now, and are making better use of our tools (we're leaning heavily on PostgreSQL, triggers, stored procs, LISTEN/NOTIFY etc) and we have a faster system.
On the flip side of things, timing attacks are now really something we have to be mindful of. For instance the login endpoint returns "404 Not Found" regardless of whether it's an incorrect password, or the account doesn't exist. Except, interestingly we're using bcrypt (we're switching to pdbfk2 before the public launch) we need to look up the user before we can hash and verify the password. Meaning we respond in < 1ms when the user is not found and 4ms when the user is found, but the password is incorrect. (and 4ms when the password is valid). This also applies to a lesser extent in responding with "404 Not Found" when trying to snoop on someone else's project/logs/build/etc. The same way they Github does. But it's less critical there as there isn't the artificially long password hash comparison step.
All told the decision to build in Go has made the development of the project slower, but has in my mind at least lead to a better quality of software, with things that don't typically show up in Rails/et al projects (foreign key constraints, triggers in the DB).
Of course all these tools are sharp weapons if handled incorrectly, and testing triggers/functions in the database can be a nightmare from a unit/functional testing point of view.
We've avoided technology proliferation (the entire stack is Go, and PostgreSQL, with worker nodes which rely on LXC). The entire application uses three packages not taken from the Go standard library. (db driver and bcrypt library)
Ohh, and our test suite compiles, and runs (all of it.) in less than three seconds. That hasn't hurt much, either.
Big, complex frameworks such as this are anti-Go. This is bringing notifications, a new DSL, file watching, and whatever else.
I haven't reviewed the code, but it seems a shame somehow to lock some useful features up, with some fancy stuff which isn't opt-in-or-opt-outable.
Props to the authors, it definitely looks cool, but I can't help but think this, and the "Cucumber for Go" posted a few weeks ago have missed the point.
There's decently documented reasons why the Go testing package is the way it is, for a number of reasons (of varying validity). I tend to trust the core team of a language (at least until we've exhausted all the capabilities of the the stdlib and std tools)
My co-founder and I switched to that today, rather than me being the "gatekeeper", feels much better. I'm a dev, he's a marketing guy, and it works perfectly for us. 1Password is the best $35/head (With volume discounts available) you can spend to keep things safe and secure.
This doesn't really work when you get into the kind of validations that are really important in web applications with multiple users, the canonical example that springs to mind is email uniqueness validation.
If one lets the database err out with a constraint violation, and bubble the panic (thus 5XX) up to the browser, that'd be a terrible user experience.
As such I have the concept of domain errors in my application, they have the structure `map[string]string`, and are related to a domain object (User, Message, Project, etc). The package is `myapp/domain/errors`, and `domainError.ValidationError` is a concept shared by my persistence layer, as well as http handling layer, when a given entity is to be persisted, the backend might return a `domainError.ValidationError`, or there may be a legitimate (connection lost, for example) error, so they are handled through a late call to infer the `err.(type)`, and switch modes based on whether it's a validation error, something more fundamental, or simply nil.
Separating the notion of a validationError to something that can be propagated through your own microframework scales much better than this ad-hoc mechanism. That said, the OP is right that this works in this case.
Following some of my comments on the “Meals/Feels” thread (https://news.ycombinator.com/item?id=6601091) earlier in the month, a number of people contacted me mentioning that they also had these symptoms, but had never put things together.
Showing up for work at 8:30 and being useless, frustrated and unable to focus by 10:00, probably that bagel you ate for breakfast.
I just wanted to put out a link in a place where people might run into it, that might just improve your quality of life!
Whilst I can't stand by suggestions to go to a caveman diet, I can stand by advice to experiment with your food, and be aware that being short tempered, unable to focus, and a menace to your team might be related to something as innocuous as your daily bread.
Now I run 15-20 miles per week, I'm 30Kg lighter than when I had allergies, and since my diagnosis I've had the drive to found my own agency business and (almost) get a SAAS platform out of the door.
Nothing indian (all creamy, milky), very few asian recipes (i.e no sushi, I'm intolerant of the green stuff they roll it in), anything with coconut milk is a decent start.
Most "egg replacement" for baking contains stuff that I just can't eat, so anything baked is out of the question.
I was fortunate when I moved to Germany, my company's recommended doctor was the only one I could find who spoke english, and he was a sports physiotherapy specialist with a side training in homeopathy; for all that I believe it's quack science, the holistic approach to "maybe you have bad skin because there's something wrong somewhere else" was a valuable insight.
My health insurance paid the first €200 in blood testing (€50 basic panel, 150 wide panel), having established that there's no "cure", they won't insure the condition any further, but that's OK.
The effects of my intolerances as they are referred to is that whenever I ingest anything containing (almost 160+ other things) eggs, dairy, cereals, fructose, vinegars, anything with Soy/Tofu, apple skin, tomato skin, yeast, and over ripe bananas I have serious mood changes, not to mention GI issues, and suffer with dermatitis on my face and arms. It is also characterised by bloody boils deep in the skin in fatty (I'm 70Kg, 183cm and 13% body fat, so that's relative) areas of my body.
This went undiagnosed for so long, that I never counted on a cure, and, in fact there isn't a cure, my body has become allergic to those foods for some reason, and eventually it may be that my immune response subsides, and I can once again enjoy them.
(Note about how thrilled I was to hear about Soylent, and then how dismayed that they decided to hone in on the cheapest possible recipe, at the expense of the "Pea" protein variant which might have been suitable for me)
I think the meals/feels app could make a difference to any hackers who take the time to use it.
For anyone else, who thinks they may have allergies/intolerances similar to mine, beware that topical allergy testing won't catch it, but a focused blood panel for IgE response might. As far as typical reaction times go, GI disorder can set in anything from instantly, to 24 hours later, and the effects on my mood, and skin, etc have lead time of anything from 24-100 hours, and a recovery time of as much as three weeks.
Tom, if you are on HN, you're the only reason this project has been able to come as far as it has. Thank you.
Regardless of frameworks, and of technologies and platforms, I believe if I can take the load off myself with Capistrano, by turning it into the open source component of a best-practice company, and build teams of passionate, skilled support engineers, then I'll be where I want to be.
Unfortunatley Harrow would suffer if I give up on Capistrano, as part of the promise of Harrow as a SaaS is that it's all guaranteed to stay compatible, and work as we've all come to expect, just with improved workflow, etc...
([1] http://www.harrow.io, please excuse the missing graphic placeholder I've not updated the landing page in some time as I've been focusing on building the product, and the landing page performs really well without that graphic in place)
I'm also of the opinion that compiling assets in production as a part of your deployment process is insane, there's so much magic in the Rails asset pipeline that it's not uncommon to turn up bugs where tables don't exist, and the rails app can't initialize, or some javascript runtime environment isn't found which can leave your deployment in a broken state.
I'm firmly of the opinion that assets should be compiled and checked in, but then of course you run into problems with rails serving those in development mode, rather than the development files.
All these issues are fixable, but they're all indicative of tools that aren't quite mature yet, and as Capistrano sits on the boundary of where these problems come to light, it seems to fall to us to deal with it, and to educate people on what they ought to be doing.
Education is no problem, I really believe that the de-facto standardisation of Rails-like deploys (i.e timestamped releases, with common linked directories, and a symlink to the current active timestamp) is an excellent result for knowing what to expect in an environment where there's hundreds of ways to get Rails apps running, but it's still not as smooth a process as it could be.
I'm familiar with at least one project that's been re-written in Scala and Java because the previous version was prohibitively difficult to deploy as it was in RoR. (GrayLog2, to namedrop them)
The rewrite is a ground-up re-think, but it's leaning on the best of what the open source community has come up with in the last 5 years, and leaning heavily on all the best practices we've learned as a community.
The rewrite was also a way for me to say "this isn't a rails tool anymore" (of course, those of us who knew Capistrano well could always cut out the core railsisms and use it for deploying pretty much anything). And a way to say "look, this tool isn't magic, it's an orchestration tool that glues together some other libraries".
Part of the rewrite was to split things into components, so that when people have a version that works for them, bug fixing changes to rvm or rbenv, or other extensions don't have to risk breaking the core functionality. Stability through modularity.
A way for me to pay my envisaged debt to society for the good things that being the custodian of such a widely used project has brought me.
Many of the v2 releases were broken as I tried to let two people help me with maintainer ship, and both of them went a little nuts accepting pull requests, and a lot of things got merged that probably weren't quite upto scratch, or caused subtle problems, which is a huge problem of Capistrano.
I'm grateful to both of them for their bravery, and willingness to try and help, but maintaining it has been such a hard task. A balance between maintaining compatibility, and not breaking people's production environments, and pushing the tool forwards, and improving it.
I hope he figures it out before they start trolling him. My friend's “invention” also covered a product on beer-mats and serviettes that would change colour under the same circumstances, unfortunately the patent he was facing down was so broadly written that it covered basically anything that could be used to detect daterape drugs in a drink by indicating it somehow.
Surely the patent could have been battled, but he wasn't in the financial position to do so.