HN user

gurgeous

2,133 karma

Hacker - many startups

Posts49
Comments98
View on HN
ansicolor.com 5mo ago

Show HN: AnsiColor, resilient ANSI color codes for your TUI

gurgeous
4pts0
github.com 1y ago

Show HN: TableTennis, a new rubygem for printing stylish tables in your terminal

gurgeous
5pts1
fireball.xyz 1y ago

Show HN: Everything you ever wanted to know about smoke detectors

gurgeous
4pts0
old.reddit.com 4y ago

Advent of Code in 2021

gurgeous
3pts0
iconmap.io 4y ago

We analyzed 425k favicons

gurgeous
550pts128
iconmap.io 4y ago

We Analyzed 425,909 Favicons

gurgeous
6pts3
www.constant.com 4y ago

Vultr Global Outage

gurgeous
2pts0
imgur.com 4y ago

Imgix Incident – Elevated Rendering

gurgeous
3pts0
github.com 5y ago

The State of Ruby Formatters

gurgeous
2pts0
medium.com 5y ago

My Million Dollar Domain Hobby

gurgeous
6pts1
imgur.com 6y ago

What is happening with imgix lately?

gurgeous
4pts0
freshchalk.com 6y ago

Covid-19 Is Killing Small Businesses in Seattle

gurgeous
3pts1
status.imgix.com 6y ago

Imgix Status – Elevated Rendering Errors

gurgeous
1pts1
freshchalk.com 6y ago

150k Website Teardown Part Three: WordPress

gurgeous
4pts3
freshchalk.com 6y ago

150k SMB Website Teardown Part Two: Website Builders, Speed and Google Rank

gurgeous
5pts3
freshchalk.com 7y ago

150k Small Business Website Teardown 2019

gurgeous
298pts59
www.youtube.com 8y ago

2018 O'Reilly AI Keynote, Thomas Reardon, CEO, CTRL-Labs

gurgeous
2pts0
batname.com 8y ago

Show HN: BatName, Redis and Bloom Filter = fun domain search

gurgeous
10pts8
blog.photoeditorsdk.com 9y ago

Deep Learning for Photo Editing

gurgeous
3pts0
www.dwellable.com 11y ago

Rails Rumble Gem Teardown

gurgeous
27pts4
www.dwellable.com 12y ago

2013 Rails Rumble Gem Teardown

gurgeous
22pts10
mobile.nytimes.com 12y ago

Harvard Business School Case Study: Gender Equity

gurgeous
3pts1
developer.apple.com 13y ago

Apple Dev Center outage

gurgeous
226pts137
www.kickstarter.com 13y ago

Poppy: Turn Your iPhone into a 3D Camera

gurgeous
5pts0
www.geekwire.com 13y ago

AMD finally gets AMD twitter handle

gurgeous
9pts0
news.ycombinator.com 13y ago

Ask HN: GitHub vs Bitbucket

gurgeous
14pts19
www.thefoolandhismoney.com 13y ago

The Fool and His Money released (it took 10 years)

gurgeous
1pts0
www.dwellable.com 13y ago

Rails Rumble Winners - Gem Teardown

gurgeous
74pts29
www.dwellable.com 13y ago

How We Doubled Our Android Install Rate in One Hour

gurgeous
105pts23
www.dwellable.com 13y ago

IOS Image Tricks

gurgeous
90pts22

Thanks for adding this. Excited about array/regex, also very interested in your experience using LLMs to stretch your abilities. There are many of us laboring quietly on various projects attempting the same. "Vibe coding" (and the backlash) doesn't really capture how we work.

I personally watched Scott spend years working on the project and obsessively iterating on the steel, the vibration pattern, the circuitry, the handle, and the form factor. Scott is a hacker, one of us for sure. I mean, the guy built a custom robot just to measure cutting efficiency...

The knife is amazing and exactly as shown in the video. Rand Fishkin has a nice short on LinkedIn trying out the knife too. I think he shows one his (sharp) kitchen knives slicing through a lemon, then the Ultrasonic. It's astounding.

Disclaimer: I am a (tiny) angel investor in Seattle Ultrasonics.

This is neat, thanks for posting. I am using memo_wise in my current project (TableTennis) in part because it allows memoization of module functions. This is a requirement for my library.

Anyway, I ended up with a hack like this, which works fine but didn't feel great.

   def some_method(arg)
     @_memo_wise[__method__].tap { _1.clear if _1.length > 100 }
     ...
   end
   memo_wise :some_method

This got some attention in r/ruby so I figured I'd post it here too..

TableTennis is a new gem for printing stylish tables in your terminal. We've used ad-hoc versions of this in our data projects for years, and I decided to bite the bullet and release it as a proper gem.

- auto-theme to pick light or dark based on your terminal background - auto-layout to fit your terminal window - auto-format floats and dates - auto-color numeric columns - titles, row numbers, zebra stripes...

By far the hardest part is detecting the terminal background color so we can pick light vs dark theme for the table. This requires putting the console into raw mode and sending some magic queries. These queries are widely supported but not universal. There are some great libraries for doing this in Go & Rust, but as far as I know nothing like it exists for Ruby. Check out the long comment at the bottom of this helper if you are curious:

https://github.com/gurgeous/table_tennis/blob/main/lib/table...

As always, feedback, feature requests and contributions are welcome.

Hi Jeff, thanks for creating mise! I am gearing up to migrate from asdf, very excited to check it out. Not totally sure we can adopt mise for tasks (we use just) but willing to give it a whirl. Putting run commands into toml sounds like it might be challenging, I wonder if there's syntactic sugar that would help.

Actually, it was package.json scripts that pushed me toward just! I wanted that stuff in non-node projects (python/ruby/~), I wanted more complicated scripts, I wanted more logging output, I wanted comments... For whatever reason every project seems to have 10-20 little commands (often interdependent) and just makes that a breeze.

Question - mise is also incorporating a command runner. Anyone tried it yet? We love just, of course. Always curious about new tools.

We love just and are using it in all projects now. So great. Our typical justfile has around ~20 rules. Here is an example rule (and helper) to illustrate how we use it in ci:

  export PATH := justfile_directory() + "/node_modules/.bin:" + env_var('PATH')

  ci:
    @just banner yarn install
    yarn install
    @just banner tsc
    tsc --noEmit
    @just banner lint
    eslint src
    prettier --check src
    @just banner vitest
    vitest --run
    @just banner done!
  
  banner *ARGS:
    @printf '\e[42;37;1m[%s] %-72s \e[m\n' "$(date +%H:%M:%S)" "{{ARGS}}"
This example is a bit contrived, more typically we would have a rule like "just lint" and you might call it from "just ci".

One of the best features is that just always runs from the project root directory. Little things like that add up after you've spent years wrestling with bash scripts.

Seconded - I love just & Justfile. Such an upgrade after trying to force things into package.json scripts. Chaining commands, optional CLI arguments, comments, simple variables, etc. Very simple and a breath of fresh air.

Hey, great start. I spend half my day in CSVs and I am definitely your target audience. Most of the time I use bat, visidata or tabview. In many ways tabview is the best, though recently the project has been abandoned.

tv looks excellent. Fun name. I think if you added a couple of features it would ascend to my toolbox:

(1) scrolling (horizontal and vertical)

(2) better command line parsing. Running "tv" without stdin or arguments should produce an error/help. Running "tv xyz.csv" should read that file.

Good luck!

I have worked on this problem many times, at many companies. I am working on it again, actually. Usually some combination of scoring and persisting results in CSVs for human review.

(edit: I am at a desktop now and I can say a bit more)

Here is the process in a nutshell:

1. Create a fast hashing algorithm to find rows that might be dups. It needs to be fast because you have lots of rows. This is where SimHash, MinHash, etc. come into play. I've had good luck using simhash(name) and persisting it. Unfortunately you need to measure the hamming distance between simhashes to calculate a similarity score. This can be slow depending on your approach.

2. Create a slower scoring algorithm that measures the similarity between two rows. Think about a weighted average of diffs, where you pick the weights based on your intuition about the fields. In your case you have handy discrete fields, so this won't be too hard. The hardest field is name. Start with something simple and improve it over time. Blank fields can be scored as 0.5, meaning "unknown". Hashing photos can help here too.

3. Use (1) to find things that might be dups, then score them with (2). Dump your potential dups to a CSV for human review. As another poster indicated, I've found human review to be essential. It's easy for a human to see that "Super Mario 2" and "Super Mario 3" are very different.

4. Parse your CSV to resolve the dups as you see fit.

Have fun!

Depends how much randomness you need. I usually just use a rand alpha of length 6-8. You can also use dictionary words (see gfycat).

Sample Ruby code:

  8.times.map { (('a'..'z').to_a + (0..9).to_a).sample }.join
It's less collision resistant than UUID, of course.