• 0 Posts
  • 21 Comments
Joined 2 years ago
cake
Cake day: August 7th, 2023

help-circle

  • They had different names like (1) if they were duplicates. But all my files were named something like “Artist - title.mp3”, and the Metadata tag for artist and title were generated based on the filename. I don’t know how they would look after being synced over to my phone from Spotify though, but it is probably how Spotify names the files that broke it on my phone.

    All the files were in the same folder on my pc too, for reference. So they have unique filenames, but two files could have the exact same artist and song title. I give that’s it’s an obscure edge case, but really frustrating.


  • Not sure if it fully fits, but one of my old HTC android phones has a bug where it would randomly fail any network request, by just never finishing it. No timeouts either.

    It never got fixed. Loading a page in the browser, got stuck, and would need a new refresh. Some apps like Baconreader would get stuck doing the same, any app could have it happen. But sometimes the stars align, Facebooks Messenger had (has? don’t see it anymore) the chat bubbles that showed over whatever else on the screen. And i clicked one of those, and they got stuck loading. And there was literally no way to close it. There was no timeouts, so i eventually had to hold the power button and reboot…

    Other notable mentions, Spotify on android did not handle duplicated files (since you could add your own music to it) with the same filename or at least artist - title metadata. It would always only play one of them. It was very interesting because Spotify on pc worked, so i could play the second track fine there, but if i told it to continue play through my phone then it would continue form the same timestamp on other track… Might be related to my phone being stupid, but there was a whole range of infuriating spotify issues. So i just moved to use poweramp and store and sync local music since i had a lot there to begin with .


  • I’m going to second the ffmpeg answers, they do the job but won’t be completely accurate to timestamps due to cutting at key frames. That’s how you persevere original quality though, and it’s fastest.

    If you need to reencode to fit a target size as well, there exists tools for that too. I made my own for cutting shadowplay recordings by selecting start and stop points in the video and encoding them to fit the discord 8MB limit back in the day. My version is not exactly user friendly to get going though, and not updated for the last 5 years or so. Should still work though.


  • The implicit return is perhaps the most dubious of them. I don’t mind it for simple functions, but they are not so good in anything large and with multiple return sites. Even more so when developers choose to implicitly return 4 chained method calls inside a closure with else cases.

    But the rest aren’t really sins, they are mostly new or different concepts or ways to do something. And if there is a sin, it’s largely because the language itself has a complexity larger than others.

    Taking my own examples here, lambdas are just fine, but the move semantics are cumbersome to deal with. But we need to do it some way, to indicate that a value is actually being moved into the closure. Maybe there are better ways and they make into the language in the future.

    Conditional values and let statements and such is a good consequence of Rusts design choice with returning Results or Option types. Just because it’s different doesn’t make it a sin. Just takes time to learn the right way. I think most come from an exception based language, and that has a differnet code flow than what Rust has.

    Lifetimes are hard though, and I feel a lot of the introduction is made excessively hard with the simple naming. It’s as of every programming tutorial used single letter variable names. Lifetimes isn’t something I’m that good with either, mostly because I haven’t had to use that complexity yet.


  • I can actually see where this is coming from, as I found Rust hard to read when I started out. I do really like Rust for reference, but I do agree Rust is hard to read for someone that has not learned it.

    For example:

    return statements that are implicit just because the semicolon isn’t there. Even better if they occur inside a if block or something like that. Very hard to understanding when you don’t know the syntax rules.

    Lambda functions, especially when using move semantics too. They are quite simple, but if you don’t know the meaning, it’s more arcane characters. Especially when this is used inside lots of chained methods, and maybe a multi-line function in the lambda.

    A lot for the if let x =… type of stataments are tough the first time around. Same for match statements.

    Defining types for use with function::<Type>() and such.

    Lifetimes, especially when they are all named a, b, c etc. It quickly gets messy, especially when combined with generics or explicitly defined types.

    Macros, though not entry level rust to begin with, they are really cumbersome to decode.

    None of these are sins of Rust, but for new people they are a hill to climb, and often hard to just “get” based on previous programming experience and reading the code. Rust can be really hard to approach because of these things. This happens in other languages too, but I do feel Rust has a particularly large amount of new concepts or ways to do something. And this is on top of learning lifetimes and borrow semantics.


  • It’s the round trips that kill you.

    Oracle drivers for .NET are fun. Have a user client application which uses quite a lot of data, but a few thousand rows are fetched some queries. It’s way too slow for any larger query, turns out for the batch query kind of work we do, the default FetchSize for Oracle is just a performance killer. Just throw it to 128 MB and it doesn’t really hurt at all.

    Worst thing i’ve seen though, apart from the 150 line long dynamic sql stored in our database, was probably a page in our program that loaded about 150 rows from the database. Normally we do create a new connection for each query, but it’s fine since Oracle has a connection pool. Whatever millisecond is trumped by the round trip. But imagine a UI so badly written, it did 4 separate database queries for EACH row it loaded into the UI list. Useless things like fetching a new ID for this row in case it is changed, reading some data for the row i think, and more. Thing took a solid minute to load. There was so many bad patterns in that page that even during the PR for improving the speed it was just dealing with a mess because you couldn’t just rewrite the entire thing, so they had to make it work within the constraints. Horrible thing to work with.




  • Code normally works fine after you write it and then hopefully at least test by hand. The new guy 5 years later, which do not fully grasp the extent of his actions, and the guy reviewing the code also not being too familiar with it, will not make sure everything does as intended.

    Tests are correctness guarantees, and requires the code and/or the test to change to pass. They also explain how something should behave to people that don’t know. I work in a area where there are so many businesses rules that there is no one person that knows all of it, and capturing the rules as tests is a great way to make sure that rules remains true after someone else comes to change the code.


  • In modern games, I think it’s fairly common to have a common 3d skeletons share names. So you can make animations like the one above apply to any character even if they have differences. It doesn’t mean that dog extends human, but it may mean that a dog model shares a lot of common “bones”, that are used for movement, with a human model.

    So when a human animation is applied to the dog, you can see it warp to start position of the animation, move, and then then stop at the end position as a standing human, before warping back to idle animation (when it turns back into the dog shape)

    Related, weapons in Destiny also share the same components across weapon types, and bugs have caused one weapon type to be used for another weapon, making funny things happen. Like how a hand canon (pistol) stretches like a bow because it’s model got used in place of the bow model at the start of this clip:

    https://www.youtube.com/watch?v=0YZa9vv5U0M




  • None of those issues for my main IDE, though Rider on some occasions do get stuck marking some spelling errors after they are fixed.

    It has stuttered a few times, but pretty rare. But it does have a bug where it think it is building a project, but isn’t. And requires a restart to fix… Easy to trigger if you try building a project while it’s loading the project…

    Visual Stuido with Resharper is the one where things would randomly stop working though. Especially hotkeys would sometimes stop working until I restarted it. Slow and stutter too.




  • It probably makes sense if the program they came from is a badcase, but at least ours don’t go over board. It’s always a “you are probably doing something wrong, but we will allow it if you want to” or a “please confirm you want to do this thing that may have huge consequences”. With what they were learning, they were not touching anything related to the latter. So they probably were doing something wrong.




  • The following isn’t any professional advice or anything, I am writing HTML manually for my hobby blog code. I don’t have much experience with HTML outside occasionally reading it.

    I write a bit by hand, to layout my blog page, which is using HTMX. Generally I use RustRover since that actually gives details for attributes and such along with autocomplete. And apparently yesterday it asked if I wanted to enable HTMX support, which was even more intriguing. The main articles are however converted from markdown to HTML.

    I do want a better way to design with preview of my page but I think it’s a long shot to find something that does HTMX at the same time. Especially since that often means having segregated pieces of HTML mixed into one document at page loading.