Hacker Newsnew | past | comments | ask | show | jobs | submit | TrianguloY's commentslogin

As a forced mac user at work (always used windows or Linux) the number of modifier keys is really confusing. On pc you use control almost for anything, alt for very special cases (when usually control is already taken) and the windows/meta key for os-related things. On mac a lot of shortcuts use command, but some use control, and there are a bunch that use option without a real reason why, my memory really suffers from this.

The only common thing between the two is that the fn key is only used for the special modifiers under F1-F12.

I was given a magic keyboard, and my plan was to replace it with a standard one, but then I found about the keys mapping from Karabiner, and the fn key is exactly at the control position...so I started remapping.

Now, I can do almost everything with fn+key. Fn+c=command+c, fn+s=control+s and so on.


As someone who identifies with the text, a very introverted guy that almost never starts a conversation but it's able to maintain it once they other person starts it, and as someone who has never dated any girl (and failed to do so) I'll just say: almost every random person that talks with me...is a man.

It doesn't seems...fair...and, again, says a lot about society.


    says a lot about society
What does it say?


That women feel pressured to be introverted and/or man feel pressured to be extroverted. Being the opposite is a handicap.

Although, the good part, is that the personality doesn't seems to be genetic and doesn't come from your parents either, otherwise we would be extinct (literally).

Unfortunately, this situation makes me think about genre issues in an different way, not only sort of understanding why they happen, but surprised that it's not more common. I've met very horrid persons, that have achieve what I haven't, just because women doesn't seem to try to see past them. Is like they gave up...


That society is clearly sick and unwell.


Not sure how you get that impression because a guy who's never been on a date doesn't initiate conversation with women?


random people wont really talk to you because they have no way to evaluate who you are. it is nothing about you, but a reflection on society. the stranger is now a danger to women. this is what they taught in school too, and internet show them that all stranger use aggressive mean pick up artist tactics~

before 1990s there was very little international travel, small town everyone know each other, speak english. very little drugs and tattoos etc. stranger on the street most likely grew up less than a few hundred miles away. very little gun violence between strangers. most importantly no stupid pick up artist culture.

most blue collar people were only friends with blue collar people (not even drink wine), rich people only hang out with rich people (beer is for the plebs, only wine for us), and class was obvious by your clothes. they judge whether to talk to you by haircut , makeup., etc. remember this time many people dont even know what an ivy league school is. no internet.

now we have open society without judgement or visible hierarchies, it is not possible for a stranger to judge you so they they will totally avoid you. now you must install apps. these are merely a computer algorithm for women to judge men (salary, height, SATs, postcode, wealth) and filter

the best way is to join local community groups and form friendships over time. but now even these are being used aggressively to findd women, like running clubs and climbing clubs, so people will be very apprehensive of you. you must choose an interest which you genuinely enjoy but requires enough specific effort it doesnt end up full of normoids.


I've joined local groups for anime and videogames, but they are mostly anime. Videogames and programming seems to be almost exclusively masculine (the stereotypes are there for a reason) but the few girls there doesn't seem much different.

Maybe I've had bad luck, maybe I need to search more, but still...the situation seems to be similar everywhere.


try group that are tied to your geography rather than international subculture

eg videogaming subculture was good during 00s LAN era because it was local. you would be seeing people from your town and surrounds. now gaming is just online random anons

pottery classes, painting, hiking trails, wine bars, farmers markets .


I was in a similar situation in 2021, and my requirements were small size, no notch and headphone jack. I didn't like Samsung (the android from Samsung is fundamentally different from the other androids) and wanted to avoid xiaomi and other similar brands due to the ads bloatware.

The size requirement was basically impossible, but I switched it to a width requirement instead, and I found the Sony Xperia 10 III.

Pros: One of the smallest widths, no notch, jack, and a minor modified android (no stock, but pretty close).

Cons: too tall (but at least the small width makes it a easier to use with one hand), medium-bad camera (for some reason, although I don't care) and some preinstalled apps (like Facebook, but you can remove/disable them with adb).

Overall I'm pretty happy with it, and I'm considering another Xperia as a replacement if this one starts to fail (more than 4 years now, but still fine)


I like this analogy, and in fact in have used it for a totally different reason: why I don't like AI.

Imagine someone going to a local gym and using an exosqueleton to do the exercises without effort. Able to lift more? Yes. Run faster? Sure. Exercising and enjoying the gym? ... No, and probably not.

I like writing code, even if it's boilerplate. It's fun for me, and I want to keep doing it. Using AI to do that part for me is just...not fun.

Someone going to the gym isn't trying to lift more or run faster, but instead improving and enjoying. Not using AI for coding has the same outcome for me.


We've all been raised in a world where we got to practice the 'art' of programming, and get paid extraordinarily well to do so, because the output of that art was useful for businesses to make more money.

If a programmer with an exoskeleton can produce more output that makes more money for the business, they will continue to be paid well. Those who refuse the exoskeleton because they are in it for the pure art will most likely trend towards earning the types of living that artists and musicians do today. The truly extraordinary will be able to create things that the machines can't and will be in high demand, the other 99% will be pursing an art no one is interested in paying top dollar for.


You’re forgetting that the “art” part of it is writing sound, scalable, performant code that can adapt and stand the test of time. That’s certainly more valuable in the long run than banging out some dogshit spaghetti code that “gets the job done” but will lead to all kinds of issues in the future.


> the “art” part of it is writing sound, scalable, performant code that can adapt and stand the test of time.

Sure, and it's possible to use LLM tools to aid in writing such code.


> I like writing code, even if it's boilerplate. It's fun for me, and I want to keep doing it. Using AI to do that part for me is just...not fun.

Good news for you is that you can continue to do what you are doing. Nobody is going to stop you.

There are people who like programming in assembly. And they still get to do that.

If you are thinking that in the future employers may not want you to do that, then yes, that is a concern. But, if the AI based dev tool hype dies out, as many here suspect it will, then the employers will see the light and come crawling back.


You can continue to do that for your personal projects. Nobody forces you to like AI. You may not have the choice at your job though, and you can't take Claude Code et al. from me. I've been programming for 30 years, and I still have fun with it, even with AI.


I'm still using Lightning launcher, will continue to use it as long as I'm able to


Isn't this called "Boy Scout Rule"?

I learned this when a coworker mentioned this to me. Turns out I was doing it without knowing it was a thing! Of course I continue doing it, but it's good to have a short and clear name to give others (specially those that only seem to follow concepts if they have a flashy name)


The ‘Boy Scout Rule’ and Kent Beck’s idea to “First make the change easy, then make the easy change” are probably the two most important bits of advice I received in my career.

I attribute most of my success to following those rules.

And maybe I’m just applying my own biases, but all the best developers I’ve worked with seem to follow those rules as well.


Based on this comment (https://news.ycombinator.com/item?id=46352389), I think I understood the missing first paragraph:

If you have the expression 1+2*3 you have three elements with two operands. You need to choose a rule to pick one of them first.

In mathematics, the rule is "*/ then +-" and then from left to right. This means that usually first you do 2*3, then 1+.

But what if you do want to make 1+2 first?

There is another alternative, parenthesis. Those mean "do the thing inside first" so (1+2)*3 changes the precedence and now you do 1+2 first, then *3

The post is asking: with parenthesis you can increase the precedence of operations. What if you could decrease it?

Let's use «» as another operand (the blog uses parenthesis, but that makes it really confusing) this operand means "do the thing inside last". So the expression 1+«2*3» means "do 1+ first, then 2*3.

The issue is...this doesn't make sense, what the blog is really saying is to reduce the precedence of operators. Think the expression 1+2«*»3 or 1+2(*)3 and now the rule is "the parenthesized operators have one precedence less" so 1+2(*)3=(1+2)*3


If we actually (as the title seems to imply) invert the parentheses, then for your example we get 1+2)*(3 .

Now all you need are the opening and closing parentheses at the start and end, and we're back to normal.


Thank you. I thought I was going crazy reading the article which doesn’t connect open and close parenthesis :: higher and lower precedence :: indent and outdent :: +1 and -1 and just flip it around to get the opposing polarity.

A real Wesley Crusher moment.


Yeah, that seems a much more robust formulation of the whole thing. Flip all parens and enclose the whole string in more parens.


that results in

    (1+2)*(3)  
which is (as GP notes), equivalent to "normal", ie what we do today:

    (1+2)*3  
Right?


This seems to be the best guess so far. But then I am wondering, how is

    a (*) b + c
Parsed then? The precedence of '* is bumped down, but does that mean it has now strictly lower precedence of '+', or the same? In the first case the operation is parsed as

    a * (b + c)
In the second case, the "left to right" rule takes over and we get

    (a * b) + c
And what happens when there are more than 2 priority groups Taking C has an example, we have that '' has higher precedence than '+' which has higher precedence than '<<' [1]. So

    a + b * c << d
Means

    (a + (b * c)) << d
Now I could use the "decrease precedence" operator you proposed (possibly proposed by the author?) and write

    a + b (*) c << d
Which then bumps down the precedence of '
' to... One level lower? Which means the same level of '+', or a level lower, i.e. a new precedence level between '+' and '<<'? Or maybe this operator should end up at the bottom of the precedence rank, i.e. lower than ','?

The more I think about this, the less sense it makes...

[1] https://en.cppreference.com/w/c/language/operator_precedence...


I don't think that's even well-defined if you have arbitrary infix operators with arbitrary precedence and arbitrary associativity (think Haskell). If $, & and @ are operators in that order of precedence, all right-associatve. Using your notation, what is:

  a & << b $ c >> @ d
If $ is reduced below & but above @ then it's the same as:

  ((a & b) $ c) @ d
If it's reduced below both & and @ then it becomes:

  (a & b) $ (c @ d)
I think conceptualizing parentheses as "increase priority" is fundamentally not the correct abstraction, it's school brain in a way. They are a way to specify an arbitrary tree of expressions, and in that sense they're complete.


Clearly we need left-associative and right-associative inverse parentheses.

a & )b $ c) @ d would mean ((a & b) $ c) @ d.

a & (b $ c( @ d would mean a & (b $ (c @ d)).

Combining both, a & )b $ c( @ d would mean (a & b) $ (c @ d).

;)


Thanks, this makes more sense, the blog post was written in a really confusing way.


Thanks indeed. Using a simple left-to-right evaluation is the most logical solution. You can reorder expressions to use less parentheses and make them easier to read. E.g.: Smalltalk :-). But this requires everyone un-learning their primary school maths of e.g. multiply-before-add, so it's not popular. Having hand-picked operator precedences complicates things further when you allow operator overloading and user defined operators. E.g. Swift has special keywords to specify precedence for these. Ick...


APL uses a simple right to left order of evaluation :)


Thanks, writing it as 1+2(*)3 made it click for me.

Reminds me of the '$' operator in Haskell - it lowers the precedence of function application, basically being an opening parenthesis that's implicitly closed at the end of the line.


well I'll be that guy... If you're going to disturb the normal way of righting expressions, RPN or prefix notation (AKA Polish Notation) could be a better option. Both don't need parenthesis because they don't need precedence/priority rules - which are obviously a disadvantage of the infix notation.

The HP 48 famously took the bet of going against the mainstream notation. I wonder to what extent this is one of those "accidents of history".

RPN moreover simplifies parsing, as shown by the Forth language.

Prefix notation, as used by for instance Lisp, doesn't actually need parenthesis either; Lisp uses them because it allows extensions over basic operators and more generally "variadic" operators and functions (e.g. (+ 1 2 3 4)). Without this "fancy" feature, prefix notation is unambiguous as well: / + 1 2 3. [1]

On a side note, Smalltalk is one of the few languages that said "duck it", and require explicit parenthesis instead - which is IMO, not an insane approach when you see that for languages with 17 levels of priority like C, you end up putting parenthesis anyway as soon as the expression is not trivial "just to be sure" (e.g. because it mixes boolean operators, arithmetic operators and relational operators as in a & 0xF < b + 1).

[1] https://en.wikipedia.org/wiki/Polish_notation


The HP 48 followed a couple of decades of HP calculators using RPN (hardly famous, just an evolution). HP’s first calculator used RPN.

I recommend https://www.hpmuseum.org/ for more details.


> There is another alternative, parenthesis.

Gerald Jay "Jerry" Sussman from Scheme and SICP fame (and others) would tell you there's also the prefix notation (but ofc only infix makes TFA valid: prefix or postfix makes it mostly moot). "3 x 4 x 7 x 19" only looks natural to us because we've been taught that notation as toddlers (well, ok, as young kids).

But "x 3 4 7 19" is just as valid (Minksy and having to understand someting in five different ways or you don't understand it etc.).

P.S: also your comment stinks of AI to me.


I personally use Google forms for a very similar feature. You don't even need to display the google form itself, you can create your own and then perform a fetch.

I even have it connected to a google sheet and google scripts, to send me emails for entries matching some patterns.

Heavily depends on Google, yes, but for something free that honestly I won't care if stops working (like a prototype) I'm ok with it.


This.

I like icons (and colors, but those are still mostly missing) to quickly find a frequent action. If the menu is always the same you can learn the position, but with dynamic entries it's way more difficult.


I'm not sure I follow.

If I write actions/setup-python@v1, I'm expecting the action to run with the v1 tag of that repository. If I rerun it, I expect it to run with the v1 tag of that repository...which I'm aware may not be the same if the tag was updated.

If I instead use actions/setup-python@27b31702a0e7fc50959f5ad993c78deac1bdfc29 then I'm expecting the action to run with that specific commit. And if I run it again it will run with the same commit.

So, whether you choose the tag or the commit depends on whether you trust the repository or not, and if you want automatic updates. The option is there...isn't it?


You specifying the top level hash doesn't do anything to pin transitive dependencies, and as the article points out, transitive dependencies - especially dependencies common to a lot of actions - would be the juciest target for a supply chain attack.


Ah, I see it now. Thanks!


> which I'm aware may not be the same if the tag was updated.

That's the mistake that breaks the following. People don't usually expect that it's an arbitrary modifiable reference, but instead that it's the same version they've picked when they created the file (ie a tag is just a human friendly name for a commit)


Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: