HNHacker News
TopNewBestAskShowJobs

ganonm

816 karma · joined March 8, 2017

submissionscomments
ganonm··on If You Can't Buy the Keyboard You Want, Build It Instead
Yeah I found it very painful at first (like learning Vim but perhaps 5x times worse). I highly recommend using typing.io to get used to it. Since the training examples are source code, it ensures you get exposed to special characters, which is crucial if you're using your ergodox for programming.

As you can see from the table on my GitHub page, progress was slow and took several weeks to reach baseline levels. This was from maybe 45-60mins per day of dedicated practice. I see the time investment as having paid for itself tenfold already.

ganonm··on If You Can't Buy the Keyboard You Want, Build It Instead
Around 2 years ago now, I took the plunge and bought myself an Ergodox EZ split island keyboard. Quite franky, it is the biggest quantum leap in the ergonomic experience of interacting with a computer I have seen since learning Vim. It is comfortable, effortless and fast. If you spend any significant time interacting with computers it is a complete no brainer to invest in optimising the IO channel between your brain and the machine.

Here is a link to my keyboard layout which you can freely use. It is optimised for Vim and Ubuntu use.

https://github.com/Ganon-M/ergodox-vim-ubuntu

ganonm··on Ask HN: What is your passive income 2019?
Thanks! Yes there are possibly applications in the architecture space but I'm not very familiar with it so it's not a priority right now.
ganonm··on Ask HN: What is your passive income 2019?
https://assetstore.unity.com/packages/tools/level-design/mod...

Launched this a few months ago. I've made about $14 a month. In terms of return on investment I would have been better picking up pennies in the street, but it was a fun side project. Also, haven't done any real marketing yet... All sales have been organic discoveries through Unity store.

ganonm··on Unity creates new open source tool for architects
There are a lot of technical reasons why this may not be possible. For example, modern real-time lighting often uses precomputed data such as lightmaps to speed up/avoid real time calculations. For static geometry and lighting much of the work can be done 'offline' before runtime however it is not unheard of for this offline process to take hours (e.g. computing high resolution lightmaps for large environments).
ganonm··on How Can a Star Be Older Than the Universe?
Space itself is actually growing as well as celestial bodies having some relative motion that on average moves away from a common point. The growth in space itself is called inflation. Last time I studied cosmology (university) this was an accepted fact although the precise mechanism that explains this inflation was not agreed upon (scalar field, dark energy etc). I think there is some debate about whether inflation is speeding up or slowing down or how long it has occurred for but AFAIK the concensus is that it is a real thing.

To make an analogy, it is as if you had an elastic sheet with objects moving on its surface. The elastic sheet can be expanded which causes the distance between any two fixed points to grow.

(it's been many years since I studied physics so any corrections to my comments are appreciated)

ganonm··on China's super camera can pinpoint specific targets among of thousands of people
I worry that widespread camera tracking is an effective route to determining identities of otherwise anonymous online accounts. If you can work out times when people are unlikely to be posting content online (e.g. because they are seen carrying bags of shopping) you can gradually, through process of elimination, work out who is the real identity behind some online account, or at least some probability. For example, if I make some number of posts on hacker news, every person who has an 'alibi' at the time of a post cannot be a candidate for the true identity of the account.
ganonm··on New Mac Pro Tech Specs
Apple service is atrocious. Don't they make you book an appointment and turn up at their store just to get someone to look at it? I hear of people who spend more time taking their laptops to the local Apple store than most people with major illnesses spend going to the doctor...

I bought a Dell XPS13 laptop recently which unfortunately had a non functioning motherboard. I contacted Dell and a technician came to my house first thing the next day and replaced it, no questions asked. Totally hassle free. I'd take that any day over having to book an appointment to see a 'Genius'.

ganonm··on Tell HN: Thank you for not redesigning Hacker News
One issue I find on mobile with HN is accidentaly hiding or flagging articles. It's very easy to do considering how close together flag, hide and comments are.
ganonm··on Ask HN: What are you learning in 2019?
I delved into this exact area in the last startup I was at. I worked pretty extensively with Kuka 6 axis industrial robots and spent a lot of time programming them as well as integrating them with our custom hardware. Totally agree that there is a big opportunity for a unified software layer on top of all this hardware.

The system I ended up building allowed users to monitor the robot from the cloud, including telemetry such as end effector sensors and axis positions, as well as uptime. It also allowed steaming tool paths from the web platform to the robots directly with appropriate safety measures such as manual intervention required to start it. Would love to generalise this sort of thing and create a turnkey solution that allowed people to focus on solving their actual robotics problems, not spend all their time glueing together disparate components.

ganonm··on Ask HN: What are you learning in 2019?
I'm going to safely assume you're not an idiot. The only major hurdle I can see would be not fully grokking the core concepts. I suspect this might not be helped by the domain specific terminology that isn't used much outside game dev or even Unity itself.

First thing to really wrap your head around is 'what is a GameObject'. A GameObject is just an entity that exists at runtime in the game world and has things called 'Components' attached to it. The simplest possible GameObject has only one component, called a Transform. This is simply a stateful record of the GameObject's position, rotation and scale. You can expect to write lots of code that involves manipulating Transforms.

There are components for everything. Want your GameObject to have a visual manifestation in the game world? Add a MeshRenderer component. Want to allow it to obey the laws of Newtonian physics? Add a Rigidbody component.

You can expect to spend a lot of your time implementing your own components. These custom components will often, ultimately just end up manipulating the transforms and other components of other GameObjects in the world.

Now you might wonder how GameObjects are created. One way is just to create an individual GameObject and attach components to it (analogous to an anonymous class), for the most part however, you will create things called 'prefabs' which are analogous to classes in OOP. Instances of these prefabs can then be easily instantiated (either manually via the editor or programmatically at runtime).

Once you have gotten your head around these core concepts, the rest starts to naturally follow. You can study topics like animation, custom shaders, net code, physics etc. and quickly understand how they relate to the core concepts.

My path to learning Unity (and I'm still learning!) was to follow the Unity official tutorials then start prototyping game mechanics - how to create a first person controller, how to allow player to interact with game world objects, how to animate characters etc. I'm now at I guess an 'advanced beginner' stage. I'm comfortable with the core API, have dabbled in most of the common topics you would need to be familiar with to make a game, and now I'm just doing projects to build up my productivity and skills.

ganonm··on Ask HN: What are you learning in 2019?
Thank you! It's all a bit of a shot in the dark for me and I have set my expectations very low for any sort of revenue - I mostly did it as a learning experience. Hopefully it's helpful to some people though.
ganonm··on Ask HN: What are you learning in 2019?
Yes, there are many gradual paths to learning Unity. I would highly recommend following the official introductory tutorial series. This covers core topics like Components, Transforms, Prefabs, Game Loop etc. After this it gets a bit less clear how to proceed. If you're already a competent programmer I'd go straight to just prototyping ideas and reading the documentation in depth. I would especially recommend reading the best practices guide.

Regarding the development environment, yes it's very integrated and isolated. For me this was a bit of a culture shock as I generally prefer working with text rather than IDEs, but I've gotten fairly well acclimatised to it now.

ganonm··on Ask HN: What are you learning in 2019?
I'm a software engineer who has until now mostly worked on web applications (backend and frontend). I have recently been learning Unity3D which has been immensely satisfying. The breadth and depth of skills needed to tackle projects in this field makes for some really interesting work.

I am currently awaiting approval to sell an editor plugin on the Unity store which I spent some free time working on as a side project. In game level design, most artists make use of 'modular' assets to some extent. These are small sections of a structure e.g. a corner wall section or a roof section, which can be combined together to make endless variations on a building style. The plugin I made allows you to specify 'sockets' on each modular asset, including a type and compatibility system, then it handles automatic snapping together of assets in the editor. This speeds up a assembly of modular assets significantly. The alternative, old fashioned way of doing this is 'vertex snapping' which is tedious and time consuming.

Video here: https://youtu.be/MvYTbIU1d-c

ganonm··on Should lawyers learn to code? Arguments for and against
I feel like Software Eningeering and Contract Law have many parallels and similarities. What does a contract and a codebase have in common? 90% of the content is covering bizarre edge cases and eventualities.
ganonm··on Why we ground electrical systems (2015)
"Since the ground-fault current path has inherently much higher resistance than the neutral wire, the amount of current flowing through the circuit jumps enormously during a ground-fault."

This is incorrect (probably a typo) - the GFC ensures there is a very low resistance path to source, which ensures a current spike that is sufficient to blow the fuse.

ganonm··on The New Austrian Railways' Intercity and Nightjet Sleeper Train Interior Design
Sleeper trains make so much sense for travel over land. They are often competitively priced with air travel, they pollute a lot less and the time saved can be huge when you consider that you spend time travelling when you would otherwise be asleep (although this is sometimes true for air travel, many/most people find it difficult to get quality sleep in economy class).

The London - Edinburgh sleeper train (Caledonian Express) has been running pretty much since 1873 and is an amazing way to get between the two cities. You arrive at the station in London between 10-12pm, depending on if you want to have a few snacks or glasses of wine, then wake up in Edinburgh around 8am the next day.

ganonm··on Desktop Neo – rethinking the desktop interface for productivity
I feel like the best desktop interface I have used is Ubuntu's workspace implementation. Typically you have one app, e.g. your browser, per workspace and seamlessly transition between them using ctrl + alt + arrows. The animation is very snappy and doesn't get in your way.

The workspaces are laid out in a grid (e.g. 4x4) so you naturally adopt a convention for where you place applications. For me, I have browsers and desktop apps along the bottom, terminals and IDEs along 2nd row and then GVim instances in the remaining top two rows. I can almost instantaneously switch between any window I like.

I like this setup so much that when I was using MacOS for a brief period, I installed TotalSpaces2 which emulates Ubuntu style workspaces.

ganonm··on Service for Some, Slavery for Others
If the proverbial 'man from mars' took a look at developed Western society what might he see? A middle aged man gets up at 7am and climbs into a car, conveniently parked right beside the shabby dwelling he sleeps in. He then spends the next 18 hours ferrying other people from location to location stopping only to use the toilet. He eats when he can - maybe a rushed sandwich during a 5 minute quiet period until he is again summoned to the next person. At the end of the day he returns to his starting point and, exhausted, collapses into his bed. The next day he repeats this.

The man from mars concludes that this person must be a slave.

ganonm··on Why OO Sucks by Joe Armstrong (2000)
You can represent 'primitives' as objects at compile time and treat them as primitives at runtime. Kotlin does this for example.
ganonm··on Why OO Sucks by Joe Armstrong (2000)
Well, the problem with a value not having a corresponding hash is that it can't be used in any code that relies upon it having a hash. E.g. in Java, there are many hash based data structures that work for any object as they all have hashes. Even if there is no meaningful hash, by default the memory address can be used. This may mean you don't gain the performance benefits of a hash based data structure, but at least it is compatible with the type system.
ganonm··on Why OO Sucks by Joe Armstrong (2000)
Yes, I agree, I don't understand why modern languages don't make references immutable by default. The best I've seen is symmetry between val and var. Talking about safe defaults, I remember being very disappointed when Jetbrains changed the default scope in Kotlin to be public....
ganonm··on Why OO Sucks by Joe Armstrong (2000)
Sorry, I realise on reading that that my response makes it sound like I'm an opponent of making mutable state private. I totally agree with you, what I was trying to say was that mutable state in general is considered as something to be avoided if possible, however, if it is necessary it should be hidden i.e. made private
ganonm··on Vim.wasm
I've been using the Ergodox EZ for over a year now and it is life-changing. The ergonomic benefits are huge and it forces you to learn to touch type properly.

I went through 20 iterations to find a layout optimised for using Vim in Ubuntu - feel free to check it out.

https://github.com/Ganon-M/ergodox-vim-ubuntu

ganonm··on Why OO Sucks by Joe Armstrong (2000)
I think this article is quite old, so I can forgive the author for being out of touch with modern OO language practices. Nonetheless, I find myself disagreeing with almost all of his arguments.

When he talks about state for example, I assume he means mutable state. Everyone knows this is best avoided if possible. The vast majority of OO languages provide mechanisms to avoid mutability e.g. data classes or keywords to make references constant.

He also rails against private state specifically. I assume again that he means private mutable state. This is generally a bad idea and is accepted pretty uncontroversially as a bad idea. The principle of data hiding in general however is definitely not a bad idea. Being able to enforce scoping rules on classes/functions/members is not meant to facilitate creating 'black box' entities whose internal mutations are difficult to reason about, but is instead meant to provide guarantees about dependencies between different parts of a system, i.e. Separation of Concerns.

Regarding 'everything is an object', in many cases this is perfectly acceptable as it guarantees some sort of basic interface that all entities conform to e.g. being able to ask an entity to provide a hash code, or to carry out a comparison check with some other entity. Some modern languages like Kotlin even eschew the concept of primitives altogether and just make everything an object.

Finally, regarding his point about OO languages having data type definitions all over the place, I must be misunderstanding something here... Why on Earth would you want all your data type definitions in one place?

Anyway, just wanted to give my $0.02 lest anyone get the impression that these are 'knockout punches' against any and all OO languages.

ganonm··on Errors – Gotta Catch 'Em All
The fact they are typically referred to as exceptions has nothing to do with the fact that they are exceptional or not. Exceptions, in an abstract sense, are a language feature that allows exiting from functions via an alternative mechanism to traditional 'return' statements.

The main advantage (just picking reasons off the top of my head) is that you can write your code as if it will certainly succeed, then have a separate block of code for handling failure cases. This makes code a lot more legible and draws explicit attention to failure case handling. Some languages make a distinction between 'checked' and 'unchecked' exceptions (e.g. Java) whereby checked exceptions must be handled at the call-site, whereas unchecked exceptions can be caught anywhere in the call stack (or not at all, in which case the thread or program will terminate). It is often conventional to forego checked exceptions and only use unchecked exceptions to provide flexibility to the caller in where they handle the exception. Some languages such as Kotlin remove the concept of checked exceptions from the language entirely.

Languages like C which don't have exception handling force the programmer to use return code checking to verify if a method call has succeeded. This is fine, but as I alluded to above, can add noise to code and diminishes flexibility.

One example of the power of unchecked exceptions is e.g. an exception mapper in a REST server. This allows the programmer to throw an unchecked exception at any point in the server application code and this will (if not handled by the application code explicitly) get caught by the exception mapper. It will then map this exception to an appropriate HTTP response code and return it to the API user.

An argument against exceptions is that there is a large 'overhead' to handling them. I've yet to see a scenario where an application performance bottleneck is being caused by exceptions. YMMV.

ganonm··on I Miss Rails
Kotlin + Dropwizard is a great choice (or Spring Boot). I've used it in production and it's got the best aspects of Rails (opinionated) with the best aspects of a modern, statically typed language running on the JVM (need I say more?).
ganonm··on Was MongoDB Ever the Right Choice?
If you need limited document storage capabilities I'd recommend just using S3 alongside a traditional RD like PostgreSQL. You can simply store object IDs in the primary database but the actual document/data in S3. I used this methodology for a cloud platform I built that required the ability to store large 3D models uploaded by users. Metadata was stored in PostgreSQL then the actual data in S3. This also facilitated generating a acquisition URL on the server which could be triggered client-side so that after initial creation, there was almost no primary server overhead (bandwidth or storage) for retrieval.
ganonm··on America’s Cities Are Running on Software from the ’80s
Maths is running on 'software' from 500BC. Don't see anyone complaining.
ganonm··on The Ring of Steel
This reminds me of a similar problem I came across whilst studying quantum mechanics in my undergrad. The problem is stated as follows 'imagine a perfectly upright pencil balancing on its perfectly sharpened tip. How long does it take to fall over?'. At first this seems surprising. Classically speaking, the pencil would never fall over, but knowing that we live in a quantum world, we can conclude that it would in fact fall over. The reason for this is the famous Heisenberg Uncertainty Principle which says that the product of the uncertainty in a particle's momentum and its position is always greater than or equal to hbar/2. You can derive a similar expression for uncertainty in angular momentum and angular position.

Now, these expressions don't imply it's impossible for the angle (theta) and angular momentum (L) both to be simultaneously zero, just that it's infinitely improbable. If you plug in reasonable values for both parameters, say by assuming that Δtheta = ΔL = sqrt(hbar) and that the actual values took a figure corresponding to an expected value assuming these uncertainties, you can work out that the pencil will actually fall over in a few seconds.

← PreviousPage 2 of 5Next →