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

Very nice job, got hooked immediately!

Some feedback/thoughts:

1. I don't think the current approach to difficulty is fun, its just feels limiting without any interaction or ways to turn it into an advantage. Some other ideas would be to have non-tetris pieces that are more difficult to place (but might be very good if you find agood placement), or temporary board obstacles that you can work around until they are gone/removed. Or pieces that do something else when placed like become obstacles until adjacent pieces are cleared. There are many ways to find a more fun difficulty approach :)

2. As others have pointed out it's frustrating to lose when you have "powers" left

3. The difficulty progression vs leaderboards are not clear to me. Am I only competing against players in the same difficulty? Can I choose a lower difficulty? (I would rather get the difficulty from competition than the fixed blocks on board)

4. Getting "holes" in normal tetris feels a lot less punishing than in your game. Here it almost feels unrecoverable at times. I don't have suggestion, and maybe it's not even a problem. Just wanted to mention it.

5. The powers feel a bit "meh". They are useful sure, but seem pretty similar in a way.


Hi litenboll!,

Your comments are very interesting and insightful.

1. Difficulty: You're right—making obstacles dynamic or even destructible is a powerful idea and could be a lot of fun. I’m definitely taking note of that.

2. Powers & Losing: This makes total sense. Other users have mentioned this as well, and it’s a very reasonable point. I’ll look for the best way to implement a reminder or alert.

3. Leaderboards & Competition: This is a great point, and I should make it clearer on my end. You only play one daily game, but your records are compared in two ways:

a. Global: Your score is automatically compared against the rest of the world.

b. Personalized Competition: You can choose specific competitors to follow. This is similar to followers on X; you follow whoever you want, and they are added to your personal board (called 'My competition today'). Your game is then automatically compared just with them.

Imagine you want to compete with your family. You can create a board just for them by adding their profiles using the 'Add competitors here' option. Your daily game will then show up specifically against theirs in 'My competition today.' I think this feature has huge potential, even if many people haven't discovered it yet.

4. Holes: Try using the 'One Cell' power; it's designed to solve exactly that problem! ;)

5. Powers: A power that 'clears' or 'cleans' parts of the board sounds very interesting...

Thank you again for your feedback, it was very useful!


Also enjoyed this, similar frustration at not being able to use powerups in a loss condition. Never got to the state where it felt like the "board fights back".

This comment above about difficulty made me wonder if there are more interesting things to do with the unclear-able blocks that would both let you ramp the difficulty and achieve more of your vision. A few off the cuff ideas:

* enemy blocks that are clearable if you make a row and a column through them * enemy blocks that require to be surrounded by n deep blocks to resolve * enemy blocks that automatically pop into single cell holes * enemy blocks that grow by infecting neighboring blocks over time or the more other rows you clear * enemy blocks that require multiple row clears to resolve

the thought is having a few types with each enemy block needing a different strategy to resolve would give you more levers on how to control difficulty and give you more variation to the strategy and more agency to defeat them. powerups is kinda a deus-ex-machina currently. you dont feel earned satisfaction when you clear an enemy block.


Thank you so much for your feedback; these are really interesting contributions!

The idea of giving blocked cells more functionality is excellent, especially being able to clear those 'enemy blocks' by crossing both a row and a column over them simultaneously. It's brilliant. I'm going to think more about it and see if it fits the core essence of the game.

I also like the idea of having different types of blocks with various functionalities. Very well thought out.

I wasn't familiar with the expression 'deus ex machina,' that's interesting! ;)


awesome glad you liked it. id love to try it out again if you implement any of them. idk what else to call the black squares so "enemy" felt right for the board fights back vibe.

another nice thing i thought of with enemy block types idea is that you don't need to look anywhere but the board if you get rid of powerups that you just have so your whole interface gets simpler. if you still needed powerups you could have them show up as normal pieces in the chain of pieces.

it def starts to veer into more of a classic tetris how far can you go vibe than maybe the puzzle thing you are going for, but maybe its actually two games. puzzle mode is as now but starts with a fixed set or fixed progression of enemys. you finish the puzzle when you defeat them all. winning then is time or rows cleared or minimum number of pieces even. infinite mode is more like the current. or classic tetris, how far can you go while new enemies spawn in of increasing number and difficulty. winning is how many enemies you clear + lines + time


I call the 'enemy blocks' 'blocked cells', but I actually like 'enemy blocks' better! :)

Regarding changing the game dynamics by having power-ups appear as just another piece in the game, I think that would overcomplicate the gameplay and alter the flow of the game too much. I don't really see it as an option right now. I prefer the infinite game mode.

Thanks again!


Thanks for the answers! I just want to point out that I don't think a reminder to use powers is enough. Right now you can lose on the next piece after using a power since it resolves it before you get the chance, which feels unfair. I think you should have the option to use a power as a last option always. It's technically one of your available moves, so it shouldn't matter that the piece you are on doesn't fit, in my opinion.

I think your opinion makes a lot of sense, although I believe the alternative I have in the game now also makes sense. It's all a matter of perspective.

Right now, I think that the way the game over is forced even with pending power-ups is a way to push the player to organize themselves better and compete with a more strategic approach.

In other words, the player has to decide between the dilemma of using the power-ups before feeling cornered or using them when they're in dire straits.

I play by using them a step before feeling cornered, and that way I avoid reaching game over with pending abilities. Either way, it's an interesting debate, and I really appreciate your point of view.


I can buy that argument, basically what you are saying is that the intention is that you need to keep yourself "two bad pieces" ahead all the time. It caters to a more hardcore audience, which is totally fine :)

Thanks for the discussion, I think you have a very good and open mindset. Good luck!


Yes, you understood the idea perfectly! Thank you for your interest!

Great idea, simple and effective. Tiny bit of feedback: seems like some listings use "unit count" for the number of balls, look at the most expensive listing for an example. Annoyingly the second most expensive balls have the number of dozens in the unit count instead.

Yeah. I'm trying to figure out how to combat these inconsistencies. Right now, I have some manual overrides, but not sure it's sustainable to keep manually overriding inconsistent listings.

Any thoughts? Should I default to what's in the product title instead of the unit count? Not sure the best way to combat this.


Maybe you could build a heuristic around shipping weight? A single golf ball weighs about 45 to 50 g, so divide the shipping weight by, say, 50 g to account for boxing and so on and you get a rough estimate of the balls in the package.

O wow, that's an interesting approach. That would've never crossed my mind without posting this on HN. Appreciate the suggestion.

I’m not the person you replied to but I took a look at the data and this is an interesting one. You found a really cool data set and this will be fun.

Consider the top four most expensive golf balls on your current list:

TaylorMade 2021 TP5x (3+1 Box) 4DZ Golf Ball Pack, White — uses 4DZ in title, 48.0 in unit count in product specs.

Bridgestone Golf Tour B RXS Quadfecta - nothing in the title, unit count in product specs is 4.0. This one shows 4 dozen in a different spot than other balls.

TaylorMade Golf 2024 TP5 Golf Balls 3+1 Box Four Dozen — Four dozen in the title, unit count in product specs is 1.0 but it has 4.0 dozen in the same div as the Bridgestone balls.

Srixon Z Star Yellow Golf Balls - Buy 2 DZ Get 1 DZ Free — Title shows buy 2 DZ get 1 free. That’s represented as 2+1 or 3+1 in other data. In product specs it shows a unit count of 1.0.

— In that extremely limited sample, the product weight is a pretty good metric to show that the unit count is flawed though that only works in comparison to others. I wonder if you could do a multi pass approach, where you sort data first and then do a unit count versus weight check to find outliers and then start rocking through the titles? You’ll still end up digging through a lot of edge cases and that won’t be much fun but a multi pass would at least give you some insight into those weird edge cases.


I appreciate you taking a look. This product weight approach has me intrigued and something I'll look into.

I'm thinking I could just start with any listing where unit count = 1 and take a pass at those first. I haven't looked yet, but I'm guessing single unit counts are almost always inconsistent with the actual number of golf balls.


The funny thing is, if your method becomes the dominant way of price discovery, a bad actor will simply try to circumvent the system to get their product ordered first, and you’ll be embattled in a Cold War.

See also: toilet paper sheet count comparisons.


what I've done for a similar script in the past:

    answer_initial = llm(prompt=prompt, site=site) # JSON with answer and any stuff needed to do heuristic checks.
    heuristic_results = heuristics(answer_final) # rule based.
    answer_final = llm(prompt-prompt, site=site, answer=answer_initial)
    mark_for_review = ... # basically just a bunch of hard-coded stuff I add flag possible failures for review.

You can use an extremely small/cheap model for something like this -- granite 4.0 micro works fine for me, 3.3 8b did as well, both run on my macbook. YMMV / try different models and see how it goes.

You could make a list of all the metadata and pass it through a LLM to determine the quantity. You’ll need some sanity checking but if you prompt it with some examples it will do well. (Done something very similar myself.)

I think what people usually mean is "scary" or "it's easy to mess up". Git is very easy to use until you mess up, then it can become complicated, and certain actions may have devastating consequences.

Two examples from recent memory:

Someone merged the develop branch into their branch, then changed their mind and reverted the merge commit specifically (i.e. reversing all the incoming changes), then somehow merged all of this into the develop branch, undoing weeks of work without noticing. I had to go in and revert the revert to undo the mistake. Yes they messed up, but these things happen with enough people and time.

Another very interesting issue that happened to a less technical person on the team was that their git UI somehow opened the terminal in the wrong folder. They then tried to run some command which made git suggest to run 'git init', creating another git repo in that wrong location. Fast forward some days and we had an issue where people had to clean their repos, so I was in a call with the person helping them run the clean command. The UI opened the wrong location again, I helped them put in the command and it started cleaning. The problem was that this git repo was essentially at the top level on their disk, and since was a fresh repo every single file was considered a new file so it tried to delete EVERYTHING on their disk. This was of course mostly my fault for not running git status before the clean command, but this potential scenario was definitely not on my mind.


I mean. How can it be scary when you have git reflog.


The reflog doesn't capture everything. jj's oplog does.

An example of something that the reflog isn't going to capture is a git reset --hard losing your unstaged changes, whereas the equivalent flow and commands in jj would allow you to get those contents back.


The thing to keep in mind is that Git doesn't version the file system, it versions the index. This is because a file system guy like Torvalds knows that the file system is a shared resource and no program should think it can control its state. Therefore a Git repository doesn't consists out of all the files below a directory, it consists out of everything in the index.

Git does version everything that is in the repository and all these states occur in the reflog.


> The thing to keep in mind is that Git doesn't version the file system, it versions the index.

Yes. I think that this difference is what introduces a lot of friction, both in the model, and how people use it. The divergence between the files that exist on disk inside your working copy and what's actually tracked means lots of opportunities for friction that go away once you decide that it should. That doesn't mean things are perfect, for example, by default jj only snapshots the filesystem when you run a `jj` command, so you can still lose changes from in between those, you need to enable Watchman to get truly full logging here.

> all these states occur in the reflog.

Well, let's go back to the documentation for reflog:

> Reference logs, or "reflogs", record when the tips of branches and other references were updated in the local repository.

It only tracks changes to refs. That is, the states that refs have been in. So, one big example is detatched HEADs: any changes you make to those, which still are contents of the repository, are not tracked in the reflog.

Even for refs, there's differences: the reflog says "ref was in state x and changed to state y" without any more details. jj's oplog keeps track of not only the state change, but the reason why: "rebased commit <sha> with these args: jj rebase -r <sha> -d trunk"

The reflog only tracks individual refs. Say we rebase multiple commits. The reflog still just says "the head of this branch was in state x and changed to state y" but the oplog says "a rebase happened, it affected all of these commits refs in these ways," that is, it's just inherently more rich in what it tracks, and does it across all relative commits, not only the refs.

This doesn't mean the reflog is bad! It's just a very specific thing. Git could have an operation log too, it's just a different feature.


> So, one big example is detatched HEADs: any changes you make to those, which still are contents of the repository, are not tracked in the reflog.

    $ git checkout HEAD
    $ git commit --allow-empty -m "_"
    $ git checkout master
    $ git reflog
    a91 (HEAD -> master, origin/master, origin/HEAD) HEAD@{0}: checkout: moving from b94 to master
    b94 HEAD@{1}: commit: _
    28d (origin/feature, feature) HEAD@{2}: checkout: moving from feature to @
> Even for refs, there's differences: the reflog says "ref was in state x and changed to state y" without any more details. jj's oplog keeps track of not only the state change, but the reason why: "rebased commit <sha> with these args: jj rebase -r <sha> -d trunk"

> The reflog only tracks individual refs. Say we rebase multiple commits. The reflog still just says "the head of this branch was in state x and changed to state y" but the oplog says "a rebase happened, it affected all of these commits refs in these ways," that is, it's just inherently more rich in what it tracks, and does it across all relative commits, not only the refs.

    68e HEAD@{15}: rebase (finish): returning to refs/heads/feature
    68e HEAD@{16}: rebase (pick): message #6
    7ff HEAD@{17}: rebase (pick): message #5
    797 HEAD@{18}: rebase (pick): message #4
    776 HEAD@{19}: rebase (pick): message #3
    c7d HEAD@{20}: rebase (pick): message #2
    f10 HEAD@{21}: rebase (pick): message #1
    c0d HEAD@{22}: rebase (start): checkout @~6

    a7c HEAD@{100}: rebase (reword): message ...
    3b1 HEAD@{229}: rebase (reset): '3b1' message ...
    4a4 HEAD@{270}: rebase (continue): message ...


Oh yeah I forgot HEAD Is a ref, whoops. Duh! (My git is getting rusty at this point...)

jj still ends up keeping information in here that the reflog doesnt, but you're right that these aren't the strongest points.


One little benefit of the op log is that you can use a single `jj undo` to undo all the rebased branches/bookmarks in one go. If you have rebased many branches with `git rebase --update-refs`, you need to reset each of the branches separately AFAIK.


      --update-refs, --no-update-refs
           Automatically force-update any branches that point to commits that
           are being rebased. Any branches that are checked out in a worktree
           are not updated in this way.

           If the configuration variable rebase.updateRefs is set, then this
           option can be used to override and disable this setting.


Are you saying that that text implies that the you can undo the rebase with a single command or that all the reflogs get updated atomically? Or how is it related to the comment you replied to?


Oops. No the text implies that I can't read and answered to a claim which you didn't state, namely that --update-refs can only update specific refs. (This was given by another comment.)

Yes, this is something, that JJ provides and Git does not.


Which, the stuff you said earlier is in the reflog?

I think Git will just gain a oplog. You just need to append a commit hash to a list before each command and implement undo as remove item and checkout. The hardest thing will be race conditions, but Git already knows how to be a database.


That makes sense


That article has no real arguments for the bias. And if you are trying to make a point, at least to to cite a somewhat neutral source, Elliott Abrams is very pro-Israel.

You could also argue that for such as small country Israel has managed disproportionate amounts of suffering and should be treated thereafter. I'm so sick of people taking the Israeli side as if they are some innocent nation being harassed by Hamas. They are ruthlessly killing Palestinians and the world is mostly acting as if this is a proper response to a single incident killing just a fraction of people. What Hamas did on the 7th of October 2023 was terrible, what Israel has done since then is way way way way worse, not even comparable. And going back in history it looks the same. AI and HRW is taking a stance against these terrible crimes, while the rest of the world is cheering on.


> What Hamas did on the 7th of October 2023 was terrible, what Israel has done since then is way way way way worse, not even comparable.

Legally, Israel would have had the right to wipe Palestine off the map as a response to this factual declaration of war until Hamas declares surrender.


According to what law exactly?


Source?


They are replying to talking points of the dairy industry.


Same story for me at a game studio bought by Microsoft. It was simply not worth the hassle. As an employee I still had to sit through the same customer support as anyone else, talking to some person at an Indian call center with a bad line. After some failed attempts I just gave up and lived with my misspelled address.


My spouse is principal architect for a platform made by a large cloud vendor.

It takes an Act of Congress, a Papal Conclave who produces white smoke on the first vote, Divine Intervention, and Interdiction by a Vice President, all offered in triplicate upon the altar of subpar IT support organizations, to get a ticket closed -with- a resolution in less than a year. If it’s not something they already have a script for it’s almost certainly impossible as far as IT support is concerned.

The company makes billions of dollars a year, employs tens of thousands of people, and they still can’t craft a competent and empowered IT support organization. Even if just for their own developers and technical experts.


Yeah, this has always bothered me. I don't really know what the issue is. One possibility is that IT is a "cost center" and so by making it cost as little as possible, you are doing a good job of running the company.

I look at it more like a "productivity multiplier", where spending money wisely can make other departments more cost efficient beyond the cost you put into IT. I guess they don't teach that in business school, or everyone is already as productive as they can possibly be. Somehow I doubt it, though.


I hate standups, but I also hate no standups since most people are unable to grab people and sync when needed. Currently my team has two morning meetings, first the forced full team one which is 100% useless since it's just status reporting and most people do not care what most people do. Then after that we have a sync between devs (we are 6 devs in my team). That's where useful things happen, we allow it to be a bit more than a standup, so we discuss issues, solutions etc and make sure backend/frontend is aligned etc. Anybody is free to leave if the topic doesn't concern them and this meeting usually runs 15-20min max, compared to the big standup that can run for 40min+ (yeah...).

A tech sync that is more than a standup, to allow for discussions, is the most useful way I know to align devs and make sure we are building things in a good way. It's something I usually advocate for, not because it's ideal, but because people are bad at syncing/discussing spontaneously thoughout the day.


First thought when reading the title was that it will look very fragile and clumsy when walking (even real birds do) and that was confirmed by the first video. What's the purpose of actually mimicing bird legs and feet? Why not use something more simple like wheels on a board that has a spring for example? I expected the article to justify why, but to me it seems like the big thing was the jumping itself, which does not require complex bird anatomy necessarily. There's probably a good reason that I missed, but this feels like a too direct translation of the bird feature, unless the purpose is specifically to make it look and move like a real bird.


> the big thing was the jumping itself, which does not require complex bird anatomy necessarily

No, this is exactly the opposite. The jumping requires exactly this specific anatomy for so many reasons. It stores energy in the joints, it has a specific balance, the jumping works at multiple angles, etc, etc. You can’t do better than that for this specific purpose.


Wheels need a reasonably flat surface to be efficient. Walking is more efficient than flying for short distances..


> reasonably flat

comparing to wheel size. one can use bigger light wheels. that would make landing on short runways possible. besides, wheeling is much easier than walking. two wheels balancing and rolling around is not a problem today. but.. without legs it's just an common airplane, nothing to talk about. the best of both? put small motorized wheels instead of flat platforms for feet.


2 more things that can break/go wrong/stop working resulting in mission failure.


1 working wheel is enough for balancing. they can be as simple as just a motor in rubber. it's more likely tail or wing will fail than both motors

BTW, here is how it works from Boston Dynamics, it can jump:

https://www.youtube.com/watch?v=LHJKGgwpWY8



Avoiding cheap surveillance technologies seems like a big deal. Although I assume once the government works out what you can do with it, it’ll become illegal pretty quickly. I assume this research will attract DOD grant funding pretty quickly. Students have to eat somehow.


Spy drones than mimic birds.


Makes you wonder what will come first:

- energy-efficient, long-lasting, mechanically optimized robotic "birds"

- good-enough understanding of the avian brain connectome & operation, such that all you need is a bunch of fine wires stuck in it, and a small CPU sending commands (local and remote operation, etc.)


It’s going to get interesting when the conspiracy theory becomes reality. Imagine the future historians browsing the Reddit archives going like, ”they knew!!“


What conspiracy? CIA had spy pigeons among other animals half a century ago, which is public info by now.[1]

They are very proud of it too.

> While many of the animal programs studied by CIA were never deployed operationally—or failed for a variety of technical, logistical, or behavioral reasons—collectively they demonstrate the incredible innovation and creative thinking that has come to characterize everything that our Directorate of Science and Technology does.

[1] https://www.cia.gov/stories/story/natural-spies-animals-in-e...


Every good conspiracy theory starts with a truth, I guess.

I had no idea about the CIA thing. I just always assumed the "birds aren't real" meme to be a way of showing how ridiculous the police state is going to become in the next decade or so as surveillance gets more and more weaponized against the people it was supposed to protect.


I always took "birds aren't real" to be an absurdist take on paranoia



Military contractors have been producing teaser videos on the subject for maybe fifteen years now.


More likely that sensible mainstream journalists will laugh at people under Govt surveillance because they sound like the reddit conspiracy nuts from their youth...



It’s like the ultimate bio-inspired stealth tech.


Maybe there’s a niche application we’re not considering where bird-like movement is crucial?


I agree that making an absolute statement like that is not great. But surely, if you understand the concept, you also know that it's way too common for extroverts having zero understanding that some people need to be alone to recharge. They'll call you boring when you don't want to go out after being at the office for 8 hours already, for example. "Come on, it will be so much fun! What will you do when you get home? Play games lol? Come on get out in the world and meet some people!!" It's also very common for extroverts to assume that just because you need to recharge by not being with people that introverts don't like being with people in the first place.

Social energy for me is a bit like physical energy. I love working out, but then I get tired and need to rest. In this analogy the extroverts somehow gets more energy while working out. That part is very hard for me to understand.

The pandemic was a total eye opener for me. I always thought that (ever since I started working) I didn't like to go to after works, nor parties in the weekend. What I realized was that I really love those things, but that my social battery drains completely at the office so I needed the evenings and most of the weekend to keep running. Hybrid work has complete changed my ability to socialize outside work.


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

Search: