HNHacker News
TopNewBestAskShowJobs

msluyter

4,603 karma · joined March 5, 2008

Software Archaeologist. Lives in Orlando, FL. Unfortunately.
submissionscomments
msluyter··on Planning and estimating large-scale software projects
Yeah I've always felt like the missing part of the loop (in the context of pointing stories) is looking at point estimates and then tracking how accurate they were, _by developer_. E.g., I throw 2 points, but it turns out the story takes something along the lines of 13 points, then my estimation was pretty low and my personal "estimation multiplier" is increased. Subsequently, actual point estimations could take the estimation multiplier into effect.

Of course, this is mostly a toy idea that's fun to think about, but seems pretty untenable given that it requires keeping track of time, which most developers hate. That, and there'd no doubt be incentive to game the system by padding estimates or other shenanigans.

msluyter··on The Imaginarium of a Solarpunk Architect
Apparently "solarpunk" is now the zietgiest. Here's another interesting one:

https://noahpinion.substack.com/p/drawing-pictures-of-cities

msluyter··on The Cultural Implications of Silence Around the World (2020)
I've also had the problem of being overly quiet at times, in meetings typically. Unfortunately it gives the impression of being unengaged, when in reality I may just be thinking deeply about something. My solution, analogous to yours, is to ask questions -- which IMHO may be quite valuable at times!
msluyter··on RFC for 700 HTTP Status Codes (2012)
Really enjoyed "718 - I am not a teapot", a clever nod to "418 - I'm a teapot":

https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/418

msluyter··on It's probably time to stop recommending Clean Code (2020)
Aligns with my current meta-principle, which is that good code is malleable (easily modified, which includes deletion). A lot of design principles simply describe this principle from different angles. Readable code is easy to modify because you can understand it. Terse code is more easily modified because there’s less of it (unless you’ve sacrificed readability for terseness). SRP limits the scope of changes and thus enhances modifiability. Code with tests is easier to modify because you can refactor with less fear. Immutability makes code easier to modify because you don’t have to worry about state changes affecting disparate parts of the program.

Etc... etc...

(Not saying that this is the only quality of good code or that you won’t have to trade some of the above for performance or whatnot at times).

msluyter··on Ask HN: Does anyone else find the AWS Lambda developer experience frustrating?
Not a full solution, but when I was doing this I really got to love the awslogs utility:

https://github.com/jorgebastida/awslogs

It allows you to stream Cloudwatch logs from the command line, so you can grep them, save them to files, etc... (The web based Cloudwatch interface is terrible.)

Another suggestion is to try to modularize the core business logic in your lambda such that you separate the lambda-centric stuff from the rest of it. Obviously, though, if "the rest of it" is hitting other AWS services, you're going to hit the same testing roadblock.

Or you can try mocking, which may or may not provide much value for you. There's a python library for that, (moto), but it's not 100% up to date wrt AWS services/interfaces, last I had checked. Might be worth a try though.

https://github.com/spulec/moto

msluyter··on Foundations of Databases (1995)
To wit: I made it through a master's in CS without a database class.

This reminds me of the famous Rob Pike quote:

"Data dominates. If you've chosen the right data structures and organized things well, the algorithms will almost always be self-evident. Data structures, not algorithms, are central to programming."

I've often found that if I'm coding something and the code starts looking increasingly gnarly, that rethinking the data structures / data model will clean up the code.

msluyter··on Ask HN: How to Speak Confidently?
I learned a ton and didn't even make it through the first 10 speeches[1]. Some off the top of my head:

* Organization -- learning how to center a speech around a topic with 2-3 supporting points.

* Brevity -- the 3 min time limit is hard to adhere to, and it takes practice. Which leads to...

* Practice -- practicing giving speeches, speaking extemporaneously, standing in front of others... all incredibly valuable.

* Handling criticism -- criticism is built into the process. After you give a speech, someone else follows up with a critique. Which may seem incredibly frightening at first, but normalizing it and making it part of the process in this manner is incredibly powerful and confidence/resilience boosting. (Plus, in my experience, people are quite positive and uplifting in their critiques.)

Beyond any specific insights or ideas that I learned, I think it's the overall process that's the magic. It builds confidence that extends beyond formal public speaking and impacts your everyday interactions as well.

[1] I wish I had stuck with it longer. I moved and never found a new group to join. This thread reminds me that I should look for one again!

msluyter··on Adjustable, low-impact keeb
My somewhat countervailing anecdote:

I've had various forms of RSI off and on for many years. For about the last 5 years it's been under control since I started doing the following: I use a Kenisis Freestyle 2, spread apart, rest my elbows splayed out wide on my arm rests, and rest my wrists on the wrist pads. (Seat height adjusted lowish such that wrists are straight.) Basically, I'm not activating any muscles to keep my hands/wrists/arms in the air.

If I try to adopt a more conventional posture[1], with my elbows by my side and forearms/wrists floating in the air, the muscles in my shoulders & upper arms will become highly inflamed, and wrist pain will typically follow.

That said, one thing I do that's in accord with your advice is that to reach the top/bottom rows, I push/pull my arms forward/back a bit. My elbow pads have a bit of give to make that pretty easy. So I keep my fingers curved nicely and minimize finger motion and especially extension at all costs.

I'm also a pianist, and understand where you're coming from, but if I adopt a pianist's posture at the computer, I'll be in pain within minutes. It's possible that no ergonomic setup is right for everybody. My recommendation to anyone with RSI is to listen to the (often conflicting) advice, but keep experimenting in order to find what's right for you.

[1] For example: http://ergonomictrends.com/wp-content/uploads/2019/02/proper...

msluyter··on Write libraries instead of services, where possible
Curious what people's experiences are wrt library development within an enterprise. I've been at organizations where basically everything was done via services and there was very little library usage, and I always thought that was suboptimal. Now I'm at a place where we utilize lots of libraries and they seem to pose pretty significant costs of their own.

A typical example is if we need to do something that the library doesn't support, we're faced with an unpleasant choice of updating the library itself or doing some sort of workaround/hack. The former shouldn't be that difficult, but in cases where a library was written by a different team, updating can be painful if you don't have someone with experience with the library/domain on your team, or if you have to jump through approval hoops.

I suppose this is more an ownership/organizational problem and applies to services as well, but somehow dealing with library dependencies feels more onerous.

msluyter··on The Pretty JSON Revolution
In theory, order shouldn't matter, right? But I recall seeing this trick for adding comments to json:

  { 
    "foo": "this is a comment about foo",
    "foo": "actual value of foo that overwrites the comment"
  }
The trick is that the second value value of foo overwrites the first. But, clearly, sorting would would wreak havoc here (if the value was used in the sort key). ;)
msluyter··on Highest rates of teen bullying are between friends and friends-of-friends: study
I've often thought this -- age stratification to our current degree is a relatively new (20th century?) phenomenon, and seems under-studied. I think the awareness came to my mind when I went to a number of mixed polka/swing dances back in like 1999 put on by the local Czech center. It was a rare mix of seniors doing traditional polka side by side with college students (who were brought in by the swing dancing) along with other adults, their kids, 5 year olds running around, etc... And then we'd do goofy dances like the Hokey Pokey or the Chicken Dance. (This was via the eclectic and fun band, "Brave Combo.") The entire mix felt weirdly... healthy.

One reason we chose a private girl's school for our daughter is that, along with traditional (horizontal) grades, it has "sister groups," which are vertical slices of girls from varying grade levels. These meet and socialize throughout the year.

msluyter··on Migrating to SQLAlchemy 2.0
Example: a team I was on was using SQLAlchemy and we had a couple of services, one that did read only queries, and another that did writes and occasionally DDL (rebuilding the table on the fly, (which is unwise but that's a topic for another post.)) Because we didn't understand SQLAlchemy's default semantics, the read side would effectively open a transaction and leave it open, meaning that subsequent DDL statements would block, then causing the entire table to lock. (I think our solution was to use `autocommit=True`, which iirc is now deprecated.)

That said, I really like SQLAlchemy.

msluyter··on From First Principles: Why Scala?
After a number of years with Python, I started a position working in Scala about 6 months ago. I really wanted to learn something new, and become acquainted with functional programming concepts.

I agree with most of the above. A couple of additional thoughts:

* sbt -- I still have a lot of coming up to speed to do here, but the manual is like 500 pages and it's somewhat overwhelming. There are tons of little oddities, like why can't I run `sbt --version` and instead have to do `sbt sbtVersion`?

* The functional side is fascinating -- I'm still studying the cats library. I can almost describe a Monad! It's a pretty big mountain, though, and there are times where I have doubts whether the benefits will be worth it. Would love to hear some re-assurance! ;)

* The ecosystem for microservices seems pretty closely tied to akka & lagom. These are quite complex in their own right and we've been having trouble with the latter in particular. Curious to learn about alternatives. ZIO?

* Re: DSLs. Also not a huge fan of DSLs. One refreshing thing about python is that often configuration can just be in Python itself (as in Django, for example). See also:

[1] https://erikbern.com/2018/08/30/i-dont-want-to-learn-your-ga...

[2] https://github.com/cf020031308/cf020031308.github.io/blob/ma...

[3] https://twitter.com/antonycourtney/status/589238574429515777

msluyter··on Frankie Manning's dancing skills made him famous twice (2016)
Was very much into it from like 1999-2008. Taught lindy classes locally for a number of years. Frankie, and notably Dawn Hampton as well, were huge inspirations. Until knee problems forced me to quit, lindyhop/dancing was probably the most joyful activity I've experienced.
msluyter··on Chinese Demography
Tangential: Noah Smith is one of the more rewarding people to follow on Twitter. He often posts long, thoughtful threads. I've learned a lot from them.
msluyter··on Wordpress market share keeps growing
Given the 600k+ installations of the "Disable Gutenberg" plugin[1], this is not an uncommon opinion. It sounds like this would be a good option for you.

[1] https://wordpress.org/plugins/disable-gutenberg/

msluyter··on Controversial Programming Opinions (2012)
"The only reason to have Unit tests is to make sure that code that already works doesn’t break."

I used to think this -- now I believe they have another almost as important purpose as a sort of "check your work" step. Not necessary for every "unit," but useful when a given class/method has high (irreducible) complexity.

msluyter··on Ask HN: Jack-of-all-trades of HN, how do you approach job search?
If you have years or decades of experience you should have a large network of colleagues to get leads and jobs from.

Clearly I've failed here. I've kept in touch with a few folks from previous jobs via LinkedIn or whatnot, but as a network, I'd describe it as "thin and weakly connected." Part of that is due to being an introvert and generally terrible at maintaining long term human connections. And part of it is a certain indifference I've had in the past to actively managing my career, which in an of itself is a result of how generally easy it's been to find work. Curious if I'm alone in this?

msluyter··on What ORMs Have Taught Me: Just Learn SQL (2014)
YMMV, but consider that if you think a single solution is the right solution in all cases, you're most likely wrong.

This is sort of the meta-principle that I apply to all of software development: no principle or methodology (DRY, YAGNI, SOLID, TDD, etc...) applies 100% of the time (except for this principle. ;))

msluyter··on Ask HN: What did you purchase that measurably improved your quality of life?
Seconded. A while ago we had a bit of a windfall in the form of a Lowe’s gift card and so we splurged on a Dyson. It felt extravagant at the time but now we use it daily and it’s been well worth the investment.
msluyter··on Show HN: I built a Rotten Tomatoes-style platform for durable products
This was the first question that occurred to me.

Just a couple of days ago I needed to buy another iphone USB-lightning cable. If you want to get a sense of just how broken Amazon reviews are, try searching for one of these. It's a nightmare minefield of 4.7+ rated products that have these highly dubious 5 star ratings, but with a telltale sizeable chunk of recent 1 star reviews.[1] So I ended up having to also check various meta-review sites or other product review sites just to to buy a stupid cable. For certain product categories, reviews have become mostly noise.

[1] I tend to discount really effusive, highly detailed 5 star reviews for basically mundane products. "This ethernet cable was both highly attractive and yet lighter than others I've bought in the past. I plugged it in and it immediately started working! I was amazed!"

msluyter··on I built a lay-down desk
In college I had some back problems, so I improvised (an incredibly unwise) lay-down desk by putting my monitor face down on two chairs and just lying with my face underneath it. This was a heavy CRT, not a modern LCD monitor. (Did I mention this being incredibly unwise...?)
msluyter··on The Art of Debating for Software Developers
I go into arguments with the goal of generating a diff of the logic trees in the participant's brains. In the best case, you find your assumptions are the same but that your reasoning differs -- these are often tractable. In the worst case, you find that you have irreconcilable fundamental assumptions. But even in such cases, the act of unveiling your assumptions allows you to gracefully "agree to disagree."
msluyter··on How to turn off Android TV's homescreen ads, 'staff picks'
FWIW, we have an LG smart TV and I've never seen ads on it because our standard use case is a) turning it on and b) immediately pressing the built in Prime/Netflix button. I barely even know what the home screen looks like.
msluyter··on We quit our jobs to build a cabin
I had the same thought -- I wonder if there's a name for this genre?
msluyter··on Teachers are ready to quit rather than put their lives at risk
IIRC, states are mandated against running deficits, and their budgets are set 1-2 years in advance (eg, Texas, whose legislature sets the budget every 2 years), which limits their maneuverability in this regard. Also, states don't have the equivalent resources and bargaining power of the federal government.
msluyter··on Ask HN: How to avoid over-engineering software design for future use cases?
One heuristic I've adopted: when faced with a design decision, I ask the question "what's the simplest possible way to do this (that meets the requirements)?" So, do you need a fully event driven Kafka based system, or would a cron job running a python script be sufficient?

The followup is, if we have to change/replace said system, how difficult would that be? If scaling the simplest solution would be difficult/painful, then one can start look to higher complexity solutions. The idea isn't necessarily to always choose the simplest solution, but having it in mind can be helpful. It crystalizes one of the endpoints of the simple/complex spectrum and helps weigh the pros/cons of various approaches.

As a side note, it's sort of amusing that a lot of design focused interview questions are around things like "design a twitter/instagram like system that'll scale to billions of requests per day." I've never had to do anything like that IRL, but no interviewer has ever asked me to design, say, an invoicing system that gets called rarely. So perhaps one of the reasons the arc of software engineering bends towards complexity is that we're continuously rewarding a "build massive scalable systems" mindset?

msluyter··on Guide to Python Debugging
re: 3, for me another killer feature is syntactically aware selection (alt-up/alt-down). Whatever symbol you're on, alt-up will select increasingly large scopes: symbol -> expression(s) -> statement(s) -> method/function(s) -> class -> file. I feel pretty crippled without it.
msluyter··on Python Developers Survey 2019 Results
Also, check out FastAPI, which is quite nice. Fully async with a lot of other nice features:

https://fastapi.tiangolo.com/

← PreviousPage 4 of 33Next →