HNHacker News
TopNewBestAskShowJobs

ganonm

816 karma · joined March 8, 2017

submissionscomments
ganonm··on Lombok makes Java cool again
Lombok is a useful crutch if you're writing lots of Java code on a day to day basis. However, given how easy it is to use Kotlin alongside Java I would question whether Lombok is the right solution to the problem.

Kotlin has data classes which auto generate sensible 'toString' and 'hashCode' methods which is a massive time saver.

Really, if you are considering introducing Kotlin to a Java project I'd recommend you just take the plunge. It's pretty much just a minor change to your pom file (if you're using Maven). Kotlin has Java interop as a primary feature and is flawless from my experience.

ganonm··on Demystifying Radix Trees: How Radix trees made blocking IPs 5000 times faster
If I understand the post correctly, the advantage for e.g. inserting a subnet is that most of the overall IP address value is shared between each IP in the subnet. In a Radix tree, this shared data will only be represented once in the three (since the entire path from root to leaf makes up the entry value). For a hash based solution, yes you get constant time insertion and constant time access, but you need a unique entry of the entire IP for each individual entry. This increases overall memory requirements.

If query time became a bottleneck, would you consider putting a Bloom Filter in front of the Radix tree? This would have low memory usage and a low false positive rate. Any positive hits would then do an exact check on the radix tree. So, for say 99% of non-blacklisted IPs, you would get constant time blacklist checks.

ganonm··on Personal Finance Lessons for Technology Professionals
The best piece of financial advice I can give people just starting out (e.g. early 20s), especially if they are working in startups, is this: make sure you have enough cash savings so that you can afford to be unemployed for at least 2-3 months. Besides the obvious safety net to ensure you aren't out on the streets in the event you leave/lose your job, the more important reason for this is so that you can afford to be picky about where you work next.

The opportunity cost of making a sub-optimal choice when it comes to employment is huge, both financially and in terms of your career. Taking a hit on a few months pay is a complete no-brainer if it means you can take a job that you find intellectually stimulating, gets you out of bed in the morning, and offers better long term compensation.

ganonm··on Wealth: The Toxic Byproduct (2013)
"The Gates foundation directs a large amount of resources not to "prudent economic decisions" (eg, it looses money), but to non economic priorities he set."

This is true, and although certainly not a bad thing, is perhaps a sub-optimal allocation of economic output. There is perhaps an argument for having individuals with enough power to do this as a means of making decisions that are sub-optimal in the here and now, but over long enough spans of time turn out to be optimum. Another example would be investing in renewable energies.

ganonm··on Wealth: The Toxic Byproduct (2013)
Your point about inheritance is a very good one and is a rather major flaw in the capitalist model. Inheritance tax goes some way to dampening the transfer of power from one generation to the next but isn't perfect. Hard to see how this would conceptually be solved without required a 'robin hood' style system that 'resets' everyone's economic status regardless of who their parents are.
ganonm··on Wealth: The Toxic Byproduct (2013)
"The point is, money spent on consumption is toxic — value-destroying"

This is something I've been thinking about a lot recently. Surely when comparing inequality in societies, what we really care about is consumption. Singling out billionaires as an example of how unequal our society, I feel, is disingenuous. How much more does Bill Gates really consume than your 'average Joe'? Sure, he presumably eats good food, wears better clothing and has a big house, but his personal consumption levels are probably no more than an order of magnitude greater than ours.

What separates him then from us, considering he has a paper net worth many orders of magnitude greater than us? Well, mainly that wealth grants him an outsize influence on the economy. By virtue of his wealth and participation in the stock market he has access to some very big 'levers'. He can dictate what a large portion of the workforce choose to pursue as 'productive economic output'. He is, by means of increasing his net worth, incentivised to make prudent decisions in this regard. High performing participants in the stock market gain more influence in it. This is an optimising feedback loop for the economy and is less fair (but more effective) than simply giving everyone an equal say in the matter.

Is this a problem? Maybe. But does it really make our society more unequal? I would argue 'not as much as you might think'.

ganonm··on Morocco abruptly drops clock change
Surely people would just start using some sort of utility that tells them 'people in X are usually awake between these hours'. It replaces an existing problem with a slightly different problem but the net gain is you remove all the annoying edge cases people currently have to deal with when converting between time zones. For example, no longer being confused about how long your flight lasts that traverses time zones.
ganonm··on Morocco abruptly drops clock change
Why can't we just get rid of time zones altogether and just use UTC exclusivsly? The amount of productivity lost to dealing with them is immeasurably high. I proposed this over dinner with some friends recently and they thought it was nuts, but within 20 minutes of discussion I think I had convinced most of them (or they just wanted me to shut up). Maybe once we colonise Mars and the meaning of a day becomes more vague, this will become the de facto way of communicating time.
ganonm··on How can I drink a bubble tea to ensure that I don’t finish the tea before bobas?
Pro tip: if you're ever drinking slush, drink from the top down (I.e. Always keep the straw at the surface of the slush). This largely avoids the problem of ending up with just a load of ice at the bottom.
ganonm··on Rethink Robotics shuts down
By 'tune in' he means calibrate an end effector to be mounted on the robot. This involves TCP calibration (tool center point) and specifying the centre of mass and moments of inertia. KUKA robots, for example, allow you to determine the TCP by manually posing the robot so that the tip of the end effector (tool) is at a fixed point. This is then repeated three more times from different poses (but the same tool point) so that the robot can solve for the 3 values that determine the tool's XYZ offset from the flange (mounting point at the end of the robot). The robot controller then uses this data when calculating inverse kinematics and supplying power to the axes.
ganonm··on Butterfly raises $250M for portable full-body ultrasound scanner
They probably use a bloom filter and populate it with a bunch of 'probably spurious' word pairs. The combination of 'Flower' and 'eggs' will evaluate as 'probably spurious' but the combination 'flower' and 'sugar' evaluates as 'not spurious'. This is probably a manually populated bloom filter of common spurious word pairs.

For reference, a bloom filter is an extremely space efficient, probabilistic data structure that acts a bit like a set and can answer the query 'does the bloom filter contain this entry'. The bloom filter will respond with either 'definitely not' or 'possibly/probably' depending on how it is tuned.

You could conceivably automatically populate this (still hardcoded) bloom filter by doing a brute force language corpus search for heavily correlated word pairs that have one or more of the two words having phonetically similar misspellings. E.g. 'sea' and 'breeze' would be heavily correlated. 'Sea' has a phonetically identical misspelling 'see'. You could then automatically add 'see + breeze' as a spurious pairing to the filter.

ganonm··on Debounce in Bash
The term debouncing is also used in an analogous manner for electromechanical switches and is probably the origin of the term. These switches literally 'bounce' off the contact during the first few milliseconds after the circuit is closed, rapidly opening and closing the circuit. Debouncing attempts to filter out these rapid, unwanted changes by e.g. adding a capacitor in parallel.
ganonm··on Trap Street
See also "Canary Traps"

https://en.wikipedia.org/wiki/Canary_trap

Apparently this is common practice in the movie industry - cast members are given slightly different versions of the script so that any leaks can be traced back to a unique individual.

ganonm··on Urine, Not Chlorine, Causes Red Eyes in Pools (2015)
Never been tested and generally speaking I rarely suffer from chest issues. I have no problem exerting myself in a well maintained pool (or whilst running or cycling), it was just a particular experience I had in a poorly maintained pool.
ganonm··on Urine, Not Chlorine, Causes Red Eyes in Pools (2015)
Thanks for this clarification, my knowledge of chemistry is quite poor. I remember the pool manager trying to tell me that 'if anything, the chlorine levels are low'. I suspect this was because any chlorine they added was very rapidly being turned into chloramine by-products.
ganonm··on Urine, Not Chlorine, Causes Red Eyes in Pools (2015)
I trained briefly in a health club/gym pool (not full length, had a sauna etc). I would usually find that after swimming in it for any length of time, inhaling fully wouldn't feel like it was providing me with the expected amount of oxygen - hard to describe accurately the feeling but it definitely wasn't just breathlessness from exerting myself. Didn't really hurt or anything. When I swam in a proper fitness pool however, there were no feelings like that.
ganonm··on Urine, Not Chlorine, Causes Red Eyes in Pools (2015)
The chlorinates created when the chlorine reacts with e.g. sweat and urine is what causes red eyes and breathing difficulties. From my experience, stay away from hotel/health club pools. These usually have saunas and jacuzzis which means people jump into the pool afterwards and contaminate it a lot... If you are doing swimming for fitness you will be inhaling a much larger volume of air, plus you will be inhaling air near the surface of the water where the chlorinates are most concentrated. Stick to public leisure centres where the pools are designated for fitness swimming. The people using these pools are generally a lot more conscientious about showering before entering the pool.
ganonm··on Timeline of the far future
I'd highly recommend taking a look at https://www.futuretimeline.net/21stcentury/2020.htm#2020-202...
ganonm··on Penti Chorded Keyboard
Yes, that's a very good point. The keys I'm using are Cherry MX Clears which have an actuation force of 55cN. From my own experience, it would require a lot more force to depress a piano key. So yeah, maybe wrist flexion is pretty much required when playing piano to avoid muscular fatigue in the fingers.
ganonm··on Penti Chorded Keyboard
The typing speed increase wasn't my main concern, it is just a side-effect that I felt would be easily measurable and that some people might care about. I also wanted to get an estimate for how long it would take me to become accustomed to the new keyboard, so measuring typing speed in a rigorous, empirical way seemed the best option. The main reason I did this was ergonomics.
ganonm··on Penti Chorded Keyboard
I've wondered the same thing but haven't come to a conclusion about it. I'm skeptical of any improvements the ortholinear layout would bring to be honest. If you are using a keyboard enough, the particular locations of any given key will be firmly in your muscle memory. However, perhaps it makes sense ergonomically for a split keyboard like this, since your hands are pretty much exactly perpendicular to the horizontal direction of the keys, so finger extension direction would indicate an ortholinear layout being ideal.
ganonm··on Penti Chorded Keyboard
Yes, I actually discuss this in the README for my Ergodox layout. I purposefully kept an approximately QWERTY layout in the Ergodox so a standard keyboard wouldn't become totally alien to me. I also use a standard keyboard at home, although I only average a few hours a week on this. I haven't had any issues yet.
ganonm··on Penti Chorded Keyboard
Yeah, perhaps that was too strong a statement to make without qualification. Using the linked speed test I'm consistently getting between 75-85 WPM. While typing code I have recorded speeds of up to 60WPM, this is actually pretty damn fast for writing code which generally contains a lot of special characters and obscure words.
ganonm··on Penti Chorded Keyboard
Interestingly, I also studied piano for many years (from age of 5 until 18 I guess). I agree, wrist flexion is important, and I definitely do flex my wrists (sometimes in a seemingly exaggerated manner) when playing piano, however, for typing, I can comfortably type anything I want, including special characters, without flexing my wrists. Not sure if this is a sign of a well designed layout or RSI waiting to happen
ganonm··on Penti Chorded Keyboard
I feel like computers are such an important part of our lives now that it's surprising so many people settle for the entrenched option of 'standard QWERTY computer keyboard'.

I realised a while ago that since I spend so much of my life interacting with a computer, I should really invest significant effort into improving, even marginally, the ergonomics and bandwidth of the IO channel between my brain and the computer I am interacting with. This realisation and the ensuing quest for a better option led me to adopt the Ergodox EZ keyboard. This has been the most significant improvement to my day-to-day interactions with computers since learning Vim. It did take several months to adjust and a significant amount of effort went into designing the optimal layout to suit my needs, but the results have been incredible.

- I never need to look at the keyboard

- My WPM rate is sufficient that I can type almost as fast as I can think

- The palms of my hands never move (zero wrist flexion)

My keyboard layout can be found here https://github.com/Ganon-M/ergodox-vim-ubuntu

If any of you out there are heavy Vim users and want to take your ergonomic experience to the next level, I suggest taking a look at the above layout.

ganonm··on Ask HN: Have you ever chosen Postgres over Mongo and regretted it?
Nice library - I agree with you, learning the syntax shouldn't be considered a downside of an otherwise novel feature, my concern is mainly around the appropriateness of the feature in the context of problems that already have well established relational solutions
ganonm··on Ask HN: Have you ever chosen Postgres over Mongo and regretted it?
My experience with JSONB is that you should think very carefully before choosing to use it as it can become a real footgun if used inappropriately.

An example of a (possibly) good use case would be e.g. user preferences/settings - there is often a lot of them and the relationship between them is often hierarchical. You could use e.g. a junction table that maps users to settings, but this can be unwieldy. A JSONB value can just be sent directly to client. It is possible to be reasonably certain that you won't want to do aggregate SQL operations on the entire table and thus just being able to do CRUD operations on single rows of the table avoids the pain of JSONB aggregate queries. For the record, I would probably still use a SQL solution in this case.

An example of a bad use case (which I saw in the wild) would be lumping entire user conversations (think Facebook comments) into a single JSONB value. This might naively seem like a time saver since you don't need a 'conversations' table, a 'conversation_messages' table nor the JOIN to aggregate the required data to reconstruct an entire conversation. However, as soon as you want to do _aggregate_ operations across several/all conversations it becomes a real hassle. Say for example you wanted to gather all messages that had been sent in the last hour - using a traditional SQL solution, this would be trivial and highly performant. With a JSONB solution you have to hope you have a JSONB index on the timestamp and then you also have to work out the correct JSONB syntax to do the query. Constructing non-trivial JSONB queries can get really gnarly - trust me, I've been there.

From my (somewhat) limited experience with JSONB I would now generally avoid it except for the cases where either the user wants to quite literally store JSON (and now we get some nice JSON validation for free) _or_ for the case where I am absolutely 100% sure I will never need to do any non-trivial aggregate operations on the JSONB and that the upfront implementation cost of a SQL solution would be stupendously high compared to JSONB. An example that comes to mind would be an Evernote style application where the user data is semi-structured and we don't generally speaking want to run aggregate operations on it (it's their private data).

ganonm··on Ask HN: Who is hiring? (July 2018)
Ai Build | London, UK | Backend/Frontend/Fullstack Software Engineers, Data Scientists| Full-time | ONSITE http://ai-build.com/technology.html

We are an early-stage startup developing large-scale, autonomous 3D printing technology to provide the factory of the future to our customers. We utilise industrial 6-axis robots combined with plastic extruders to print large scale structures and objects (often at a scale of meters). Our current focus is on development of the web platform and our proprietary toolpath algorithms.

Tech stack: Dropwizard (Java 8, Kotlin), PostgreSQL, React, Redux, NGINX, Docker, Terraform

We are hiring for several roles

- Frontend (required: 1+ years experience with React, CSS & HTML. Beneficial: experience with 3D programming e.g. ThreeJS, familiarity with REST APIs)

- Backend (required: 1+ years experience with a JVM server framework, REST, Strong grasp of computer science fundamentals. Beneficial: mathematical background/strong knowledge of data structures/algorithms)

- Data Science (required: 1+ years experience implementing modern machine learning techniques in a professional or academic capacity, familiarity with software engineering practices e.g. version control and application architecture. Beneficial: PhD in closely related area, prior experience working as a software engineer and/or a computer science degree)

If you are interested, please contact us at jobs@ai-build.com

Please do not contact us unless you are an individual applicant. We will not respond to recruiters, recruitment agencies or hiring platforms.

ganonm··on AMD Reveals Threadripper 2: Up to 32 Cores, 250W, X399 Refresh
Still running a 2500K here too, paired with a GTX 1070. Absolutely no qualitative issues with any games I play. Interestingly though I do notice its age when programming - builds take noticeably longer when compared to my work laptop (XPS 13 w/ i7-7700). Could be due to the higher core count I guess (not sure what level of parallelism my builds exploit beyond the parallelism offered by Make).
ganonm··on Ask HN: Are you working on interesting technical problems?
I've been very lucky in finding a job that has a good mix of typical 'trench digging' (read web app development) and really cutting edge algorithmic work. We are a 3D printing startup that use 6 axis robots + extruders to print large scale geometries. Some days I'm implementing CRUD REST APIs, today though I happen to be working on Octree based collision detection.

Finding jobs like this isn't easy and mostly requires luck - my last job was very different, it was just maintaining a plain old CRUD app. Not the most mentally stimulating work, but it's probably 90% of the work that gets done on a day to day basis by software engineers.

Try looking for people who are solving a problem that is technical in nature. Business problems use technology as a tool, technology problems require development of brand new tools or the use of existing tools in novel ways.

← PreviousPage 3 of 5Next →