HNHacker News
TopNewBestAskShowJobs

RyanZAG

8,774 karma · joined November 11, 2012

Location: South Africa
submissionscomments
RyanZAG··on Software Development Has Diseconomies of Scale
Software has economies of scale in distribution. In fact the economies of scale of software are the key point of how software businesses are causing disruption. A single software program can be replicated infinitely at zero cost and allow anybody who has 1 liter of milk to have 1000 liters of milk at no additional cost. So in the author's example, software would be the same price for both 1 and 2 liters.

Complexity is something completely different and is well known in all products. I can design a calculator that adds numbers very easily. A calculator that does fractions is much harder to design and costs more. A car with a more complicated engine is much harder to build than a simple engine. This has nothing to do with the actual economies of scale of the calculator or car or you could say that cars have dis-economies of scale too - and obviously they don't. They're the poster child for economies of scale.

Building a truck that is 10km long is worse than building 100 trucks that are each 100m long, but this has nothing to do with 'diseconomies of scale' inherent in trucks.

RyanZAG··on Japan’s 105-Hour Workweek
It's pretty sad, really. This is actually a company sabotaging itself. Each additional hour of work isn't "free" for the company - you can't add an extra hour of work to someone and expect the other hours worked won't be affected. Sitting around waiting for a boss to leave or re-doing work just means that the employee is going to do the rest of his work worse whether he wants to or not.

Japan forcing overtime pay would probably be the single best way to boost their entire economy. I'm guessing they will never do it for unfortunate cultural reasons though.

RyanZAG··on Can't sign in to Google calendar on my Samsung refrigerator
Humans are pretty funny!

Going off the usual price for apps ($2.99?), and a 'bunch' is probably about 25 apps, then replacing all your paid iOS apps with paid Fire apps would probably cost you $75.

So ignoring anything else, a lot of people would actually value their $75 sunk app costs greater than the $350 difference between that iPad and the Fire. It's a pretty interesting lesson in humanity.

RyanZAG··on Apktool – A tool for reverse engineering Android apk files
There's a concept called 'app wrapping'. A generic app is decompiled, and then the manifest and code is changed to add in some 'wrapper' code around the app. The app can then be resigned with the enterprises certificate.
RyanZAG··on Why Coinbase is now hiring remote engineers
So you're happier now because everyone else has to suffer in the same way. You still have to sit in traffic. You still have to sit in the noisy room. Nothing has changed for you. You're just happy now because you can't see other people who are avoiding it?

Let me repeat it again - for you, nothing at all has changed except that other people around you are also suffering. Your attitude is awful.

If someone came tomorrow to your office and gave a million dollars to each of your team members and $10K to you, you would resent your team members for receiving more money than you, right? People like that are only happy to see others clawed down to their own level.

RyanZAG··on Why Coinbase is now hiring remote engineers
> 4. I came to resent the remotes for enjoying this unequal perk, one that inflicts a cost on the rest of the team. Why don't they have to sit in traffic and then in this noisy room with the rest of us? What makes them special?

Seriously? Because your working conditions are terrible, remote engineers are bad for having good working conditions? Here's a hint - stop wasting your time hating others for being happy, and work out how to improve your own working conditions into something you enjoy.

RyanZAG··on Yahoo’s Engineers Move to Coding Without a QA Team
Ultimately, even with automated testing, someone has to do the manual testing of checking that it's actually providing the value it's meant to.

When you remove the manual QA team and switch to staged rollout, you are moving the manual QA burden onto your users. You still have that manual QA team - they're the first bunch of users in your staged rollout plan - you just don't pay them anymore and gather their feedback through bug reports. Users are used to buggy software because of other companies who do this (Google, etc) so they carry on being users anyway.

RyanZAG··on Dow and DuPont to merge
This kind of merger seems exactly what the regulatory system was designed to prevent, right? Have any recent mergers actually been blocked? Is the regulator completely toothless now?
RyanZAG··on The Pixel C was probably never supposed to run Android
Google definitely needs someone to step up as a gatekeeper and say 'No, this product is terrible, go make it better and we can think about a release'.
RyanZAG··on Don't bother creating a mobile app
Wait, what?

Hang on, this should be the number 1 point of your entire blog post. Honestly, if your post was titled the obvious "Don't make mobile apps only for one region" then you'd be getting a lot of comments saying "Well, obviously".

Seriously your problem here is not that you made a mobile app. Your problem is very clearly that you excluded 99% of your user base. Any chance you can explain the reasoning behind this..? I can't even begin to understand it. Outside of government required tax applications, I cannot think of a single successful single-region productivity app ever.

RyanZAG··on Yahoo to Spin Off Its Core Businesses
I don't follow your logic. That's like saying the new manager for the department store managed to keep the roof of the store intact while losing everything under the roof.
RyanZAG··on RethinkDB Driver for Java now available
Isn't that kind of like arguing how serializing an HTTP reply into text for the browser crazy inefficient?

At any rate, JSON is the transfer format used by RethinkDB so at some point it has to be JSON for RethinkDB to read it. You could always make your own data language and integrate it all yourself, but ultimately you can't transfer your POJO directly and will always have to transform it into something. JSON is pretty decent and very compatible.

So to answer your question: (RethinkDB -> JSON String) is a completely required part of the database communication. The additional POJO step is fairly efficient when using Jackson and unlikely to be a large part of your CPU usage - the simple and required byte copy may use more CPU on large POJOs. You could use some type of no-copy directly from the network buffer but then a complex database like RethinkDB would not be the right choice - you'd probably use local memmapped files in C..

In short: try using the driver and pojo conversion in a real world project and profile it. I think you'd be surprised how little overhead it really is. Computers are very good at this stuff, and the JVM's JIT is optimized for this stuff.

RyanZAG··on RethinkDB Driver for Java now available
Do you mean converting from JSON to POJO? Why do you consider that awful? There are very good libraries (jackson, gson) for handling that and they work really well - especially if you're going to be using those POJOs for HTTP REST too.
RyanZAG··on RethinkDB Driver for Java now available
Looks great, and the vert.x bit was also great to see. The blockingHandler a bit less so. Any plans for making a non blocking API using netty channels? That would really put RethinkDB as an amazing choice for pairing vert.x/JVM with a data layer.
RyanZAG··on Who Y Combinator Companies Want
The pattern matching issue with Java or C# is interesting, since all these companies generally do want mobile. So I guess the humorous point of advice for that: replace all occurrences of Java on your CV with Android, and C# with WinPhone, and you'll probably bump your chances of getting passed the pattern matching.
RyanZAG··on Show HN: LoginBox – Authentication, payments and memberships from a single box
What's the difference between the 'Two-Factor Authentication' and 'Multi-Factor Authentication' of the different price plans?
RyanZAG··on Microsoft Edge's JavaScript engine to go open-source
Strange thing to think. Companies do not produce browsers - employees do. In fact, not even employees. A handful of talented programmers produce browsers. All the desire in the world from a company won't improve the ability of those handful of programmers.

It's actually fairly interesting. These huge mega companies are just support teams for a few programmers. All the corporate vision and endless strategies mean nothing compared to one of those programmers having a good or bad day in their work. You honestly get the feeling something somewhere is very broken when you think about it.

RyanZAG··on Jury Duty
As a non American, the USA justice system honestly sounds like the worst possible system for justice imaginable. I don't think I could design a worse system if I tried. Do you all just keep the system because it keeps so many people employed following the pointless bureaucracy of it all?

The people making the decisions have no training in law at all, yet they have to decide if the law was broken. They get a brief spoken explanation of the law, but only after they have been given the testimony. Why would you not have someone trained in the law decide if the law was broken? Why would you not allow the jury to interrogate the witnesses when they must bear the responsibility of the decision? The idea seems to be that random people off the street will somehow be more willing to consider all angles and if they disagree, you get another random sampling and try again. Try enough times and eventually you'll get a bunch of people who are annoyed enough by being forced into jury duty to just agree so they can go home. Real justice right there.

You might say that the jury system allows for a justice even if the judge is compromised. But obviously it doesn't - the judge controls what information can be fed to the jury and the jury must make the decision based off that evidence. If the judge is biased, the jury will be forced into a particular decision anyway. Why not just have the judge do their job and have an appeals system and punishments on the judge for bad decisions? And yes, that system works fine. See the current Oscar Pistorius trial for a working system (imo).

RyanZAG··on Are women really better than men at furniture assembly (as IKEA claim)?
I'm not sure I understand the angle you are coming from given the following:

In terms of construction scores (from 1 to 10 where 10 represents a perfectly built trolley), men averaged 8.9 with instructions, 7.6 without; the women averaged 7.5 with, and 5.7 without.

So men without instructions do slightly better than women with instructions, and men with instructions do far better..

RyanZAG··on Transformation at Yahoo Foiled by Its Leader’s Inability to Bet the Farm
Not really the issue. As you said, this was a group of less than 200 employees. Probably most of them were doing the work as expected. She cut a hugely morale boosting policy to get rid of a few shirkers and made herself and Yahoo look terrible right across the tech news for it. It was a huge and crucial mistake at a time when it looked like Yahoo might be picking up and it cut an enormous amount of momentum.

Obviously the even bigger mistake was not doing a massive company wide re-organization and throwing out all middle management. Middle management is only an asset if it is helping the business, and as is obviously the case in Yahoo, it is not.

RyanZAG··on A bad citizen in Javaland (2006)
Oh that makes for a funny part of the ending too then.

While going about your work, you suddenly disappear along with your universe and everything in it. Someone somewhere in the world drank a cup of coffee, which means that he now has an empty cup instead of a full cup. A new universe had to be created with the full cup replaced, and unfortunately your universe had to be thrown away. You continue life as a clone in a new universe with an empty coffee cup somewhere in Nebraska.

Why did this happen? Someone picked a copy-on-write map implementation because it had a slightly faster O(logN) delete behavior and unfortunately the re-use function of the map wasn't implemented yet because the author has gone on to do a series on the use of monads in baking the ultimate croissant.

RyanZAG··on A bad citizen in Javaland (2006)
I wonder how a functional version of this would go..

You need transportation, so you define an engine and a set of wheels and a chair, and a whole universe. You define a way to have the engine, wheels and a chair work together. You try to sit in the chair, but it's too small. You can't change the chair because it's all immutable, so you create a new chair along with a new universe and build a new car with the new chair.

You need to get to work, but you don't want to pollute your universe with state, so you don't know where work is. So you put all of your state in your relational stateful database and forget that this part exists in your universe. Of course theoretically you could model your knowledge as a function based off the state of the universe, but you don't have budget to do that. You write comments about quick hacks to get around purity constraints. The hacks are never removed and you end up passing stateful maps of database tables around. You make a big todo note about how you should implement a new method for handling this that you've read in a new academic paper, but never get the 500 hours you need to implement it.

EDIT: For those not getting it, the article is describing the difference between the theory behind OO interaction between self contained actors and how this really plays out in actual code. Instead of doing the theoretical part of communication between actors, we have code which does getCoworker().getWallet(). In the same way above, I've tried to show the difference between theoretical functional programming where we can create pure functions and how this actually plays out in real functional code.

RyanZAG··on Metabase: Why we picked Clojure
Nice extension! Feels right too, clojure does feel a lot like passing around similar clay bricks. When all the bricks line up, it's kind of like Lego?

The analogy also opens up another difference. In clojure, you often end up passing around a lot of maps with string keys. What are those keys exactly? You have to crack open the clay brick to take a look at how it works. With the stick model, you can often see how the sticks work if the bundle of sticks has been color coded nicely - eg, well constructed generics. Luckily cracking open a Clojure brick is as simple as ctrl-clicking, so it's not nearly as bad as it sounds!

Programming parables are definitely weird though - programming does not have true analogies with the real world. It's more of a superset of the real world and the use of programming languages is more akin to defining physical laws than building bridges with clay or sticks. I don't think we as humans have really come to understand exactly what we are unlocking with the development of programming and how vast it really is.

RyanZAG··on Metabase: Why we picked Clojure
It's kind of like building a model with clay or with sticks. The clay model is going to look nicer with rounded curves and no wasted points. The stick model will have bits sticking out.

However when you get 30 people working together to make a big model, the clay model is going to start looking very strange indeed. Different people will have different finger pressure and shape the clay differently. Some people will make more right angled parts with the clay which will clash with the parts of the clay that are carefully smoothed out. Someone might spend a week fixing a perfect parabola for a curve at the top of the model just for someone else to bend it off to the side with an ugly twist to fit with the other side of the model.

30 people on the stick model? Not really a problem. All the sticks look the same. Anybody who needs to attach one side of the stick model to something else just needs to grab a stick and tie it on. You won't see a perfect stick parabola, but then you also won't be stuck with a strangely twisted piece of clay.

You can always create a style guide for using the clay - always keep between a 30 and 60 degree angle on joins. Apply one finger of pressure when doing joins. And so on. Sometimes this works with very diligent reviews that keep everything in place, but as soon as a crisis comes up or the model needs to pivot urgently? Everyone rushes to touch up the model in the quickest way possible and your model starts to get a bit thinner on one side than the other, etc.

So there's nothing wrong with choosing a great clay model that fits well into your hand and you can shape effortlessly - but you need to remember that sometimes the 'painfulness' of using a model made out of sticks can be a big blessing when you're trying to massage a bit of clay that someone else pressed a bit too firmly on.

EDIT:

Also, when you've been making and using models for awhile, the stick models get an added benefit: you can browse through the stick models really fast based on only their outline and be able to understand very quickly how they work. Pretty clear why: the rigid sticks form a very distinct outline (think interfaces and forced directory structure in Java). Being a stick model expert therefore has very good job mobility and high demand.

Each clay model is generally more unique and requires some study to understand even if it does look nicer.

RyanZAG··on Metabase: Why we picked Clojure
> .. However, we had a strong aversion to using Java itself ..

Honestly, why? Seems odd given Java's great track record for exactly this problem and huge library and developer share. The code itself is forced to be static and explicit which makes for easy onboarding for new developers.

It's a bit strange to just dismiss Java in the context of the rest of the article. You're kind of staking your company on decisions like these, and making them because of some unquantifiable 'strong aversion' seems like a poor choice.

That said, Clojure or other lisp base definitely seems like the correct choice for a query language / dsl. That's the shining point of lisps after all.

RyanZAG··on Kazakhstan to MitM all HTTPS traffic starting Jan 1
Woah, it can't be stressed how bad this is. If this succeeds, other countries will definitely follow! If it can be shown to work, it will be demanded that this be implemented by pretty much everyone for difficult to deny political reasons (terrorists, children, crime, etc)

This feels like the first bullet in a new war that will occur in every parliament world wide.

RyanZAG··on The 100-Hour Rule
There's also a different 100 hour rule. 100 hours is enough time for someone to become dangerously competent: just competent enough to complete something, but not competent enough to complete it well.
RyanZAG··on Mob programming – The mob rules, OK?
A 3.5 hour long meeting every day? This does not sounds like a good idea.
RyanZAG··on What photos of Facebook’s new headquarters say about work
Well this looks like a great breeding ground for the next big plague. If one person gets sick, it'll spread around the entire company?

Also looks strangely reminiscent of the industrial revolution. http://3219a2.medialib.glogster.com/jayytyler97/media/c6/c60...

RyanZAG··on Musings on AOT, JIT and Language Design
The problem is that a static easily tooled language is not going to be as good as the dynamic un-toolable one without massive tooling support specifically for that language's features. Creating those tools is not the job of a lone developer. The cost is immense. The language first has to achieve popularity to receive the tooling, or be heavily backed by a large tooling capable company (eg, Google, Jetbrains, Microsoft). So far, the only recent languages to receive the kind of required static tooling are from those 3 companies. Also note that the language did not come first in those cases - the requirement for the language came first, and a language was made to fit what was needed.

However even more importantly - if you're going to create a language, it needs to be the ultimate language in your own eyes. You can't leave off novel features that you have experience in because it doesn't have mass appeal or has tooling issues. You need to create the best language you possibly can if you want to compete with others trying to create the best language. Hamstringing your enjoyment of the language by going in a direction you don't like because it has more apparently mass market appeal isn't any more likely to be successful, and it certainly isn't going to be enjoyable enough for you to slog through the tiny complexities.

While there is a tiny chance that your language becomes the next big thing, it probably won't. That means you need to make the language you want to make and hope it succeeds, not make the language that 'will succeed' but you don't want to make.

← PreviousPage 11 of 34Next →