[-] ICastFist@programming.dev 4 points 1 day ago

Is that the pizzacake girl in the crystal ball?

[-] ICastFist@programming.dev 2 points 1 day ago

If it's dangerous for the hand, it's extra dangerous for other, squishier parts

[-] ICastFist@programming.dev 5 points 1 day ago

How I feel knowing that, just by virtue of having a STEM bachelors and a bunch of cloud certs, I am way ahead of my competition in getting laid off and denied jobs for being "overqualified"

FTFY

[-] ICastFist@programming.dev 1 points 1 day ago

The v2 launcher will supposedly open up 5x faster on average upon cold boots, while restoring it from the system tray will be 6.5x faster on average. That's a huge improvement, but keep in mind that Epic got these numbers from a ridiculous test bench comprised of a 32-core AMD Threadripper, an RTX A6000, and 128GB of RAM. Not exactly consumer-grade hardware, especially during these times.

So, we can expect, at best, 1.2x faster reponse. I bet it will still be a piece of shit unreal app that's little more than yet another electron

[-] ICastFist@programming.dev 1 points 1 day ago

So, just like Pokemon Go?

[-] ICastFist@programming.dev 1 points 1 day ago

I loved the Mass Effect 3 fan explanation of the ending, tying together why Shepard saw the kid while fleeing Earth in the beginning, then again at the Catalyst while heavily wounded. Of the 3 choices, the red (destroying all the mass relays and the reapers) was the only one where he stopped limping to stand up again.

In Deus Ex Human Revolution, it's pretty easy to forget the opening cutscene by the time you're doing shit in China and get told to go to a clinic to fix your implants, in order to stop glitching. Said cutscene shows a bunch of shadowy figures planning how to control everyone with implants.

[-] ICastFist@programming.dev 1 points 1 day ago

N is a Z sideways. Check-fucking-mate, Noroark

[-] ICastFist@programming.dev 3 points 1 day ago

The team demands more tea, Sebastian! Chop chop!

[-] ICastFist@programming.dev 3 points 1 day ago

Getting down and dirty on the investigation

[-] ICastFist@programming.dev 13 points 1 day ago

This one is focused on emulated games, so it's more of "emulation as a service"

[-] ICastFist@programming.dev 2 points 1 day ago

Regarding the "click and play" nature, not every game will load in under 10 seconds, especially as they're planning for Dreamcast and PSP next. It works for most platforms, but not as well for CD/DVD based ones

The store for indie ROMs is interesting.

Garou: Mark of the Wolves shocked me. I was testing the Neo Geo core and ended up playing it for way longer than I meant to. The sprites are massive, the animation’s great, it still looks good now. The thing that surprised me most was the sound, actual voices and an announcer, not the bleepy chip stuff you’d expect from that era. The Neo Geo came out in 1990 and you could buy one for your living room, I just didn’t expect it to sound that good.

The hardware was old, but G:MW is from 1999 and not too different from what King of Fighters 94 offered in terms of graphics and sound, 5 years prior. Also, only rich kids could buy the Neo Geo, it was expensive as hell, the huge cartridges too.

[-] ICastFist@programming.dev 8 points 1 day ago

It's kinda funny how an outsider's perspective of 'murica and its mythmaking make all those lies blatantly obvious. I guess being on the receiving end of imperialism tends to do that to people.

46
Rated E for Everyone (programming.dev)
37
Ah, 1980s Brazil (programming.dev)

"And you? Where's your little mark?"

Not sure if this should be tagged NSFW

95

Elements of Ultima VII were inspired by game developer Origin Systems' conflicts with competitor (and later owner) Electronic Arts. Origin Systems' corporate slogan was "We Create Worlds", while the main antagonist of the story – the Guardian – is presented as a "Destroyer of Worlds". The three evil "Generators" created by the Guardian in the game take the physical shapes of the contemporary Electronic Arts logo: a cube, a sphere, and a tetrahedron. Elizabeth and Abraham, two apparently benevolent characters who later turn out to be murderers, have the initials "E" and "A".[10] Electronic Arts would acquire Origin later that same year, on September 25, 1992.

EA, destroyer of worlds since 1992

36

I know that direct p2p filesharing programs have been mostly superceded by torrents and even ddl, but sometimes I feel like "trying my luck" with stuff I didn't search for directly (behind a VM, because i'm not that adventurous)

25

This is a follow up to my previous post here - https://programming.dev/post/46041021 - For those that want a tldr: I'm making a php site for myself writing nearly everything by hand. The only external library I'm using is Parsedown.

After a good time working on my site, I'm happy to announce that I've officially shared it with my friends^[I won't share it here as the site is tied to a different online persona of mine]! The site isn't really "ready" yet, but it's very usable and readable, so that's good!

As for code quality? Well... It's kinda awful. Instead of this:

class User {
  $login = new String();
  $email = new String();
  ...
}

I'm using named arrays (hashes)^[Kinda funny how associative arrays have soe many different names in other languages: hash, dictionary, map] everywhere:

class User {
  $columns = array( 'login' => '',
  'email' => '',
  ...
}

"But WHY???", you might be asking. Well, to facilitate the creation of the database from zero! Here's an example of my trick:

abstract class Common {
 /**
  a bunch of different, generic select and update functions
*/
}
class Users extends Common{
$cols = array('uid'=> 'primary key auto_increment',
    'vc1_login'=> 'unique not null',
    'vc1_display_name'=> '',
    'vc2_password'=> 'not null',
    'dat_created_at'=> 'not null',
    'bol_enabled'=> 'default 1',
    ...
}

With this, the $key part of the hash doubles as the column name and their default/new values are always the details needed for the creation of their respective columns. I also treat the ::class as part of the table name. With a few functions, I can easily recreate the database from zero, something which I've tested a few times now and can confirm that it works great! Also, with key pairs, making generic SQL functions becomes very easy with foreach() loops of the $cols hash. Example:

abstract class Common {
public function selectColumns($columns, $table = '', $where='1', $orderby = '') {
        $conn = connectDb(); //static function outside class
        if ($table == '') {$table = $this::class;}
        $coll = '';
        foreach ($columns as $cols) {
            $coll .= $cols.', ';
        }
        $coll = substr($coll,0,-2);
        $stmt = $conn->prepare("SELECT ".$coll." FROM `T_".$table."` WHERE ".$where." ".$orderby.";");
        $stmt->execute();
        return $stmt->fetchAll(PDO::FETCH_ASSOC); 
//Fetch_Assoc is used so I'm forced to always use the $key in the returned array
    }

// This function will attempt to update all non-empty pairs of a given object
public function updateColsUid(){
        $conn = conectaBanco();
        $sql = "UPDATE `T_".$this::class."` SET ";
        $keys = array('uid' => $this->cols['uid']);
        foreach ($this->cols as $key => $value) {
            if (($value != '') and ($key != 'uid')) {
                $sql .= " `". $key. "` = :" . $key . " ,";
                $keys[$key] = $value;
            }
        }
        $sql = substr($sql,0,-1);
        $sql .= " WHERE `uid` = :uid;";
        $stmt = $conn->prepare($sql);
        $stmt->execute($keys);
        return $stmt->rowCount();
    }

The biggest problem with this is that if I ever remove, add or rename any of these $keys, it'll be a fucking chore to update code that references it. I'll look into using proper variables for each column in the future, especially as a database creation is something you usually only do once. On the plus side, this is the most portable php site I've ever did (1 out of 1, but whatever)

Anyway, current functionality includes creating an account, modifying some aspects^[I want to note that there was a bunch of validation that I initially didn't think of doing, but luckily had a couple of "Wait, what if..." moments. One of those was to properly escape a user's username and display name, otherwise, when echo'ing it, <b>Bob</b> would show as Bob. While the fields probably wouldn't be enough to fit anything malicious (fitting something malicious inside a varchar100 would be a real feat, ngl), it's better to close this potential hole.] of it (profile description, display name (which is html escaped, so no funny business here), signature), logging in, letting the admin make new posts, letting anyone logged in comment on existing posts, comment moderation.

I also keep track of every page visitors are going to, saving these to the database (user agent, IP, page visited) - this will be the table that will fill up faster than any other, but might also allow me to catch eventual bots that ignore robots.txt - supposing I can figure them out.

Initially, I was planning on having each post select from a list of existing categories (category N -> N posts), but after some thought, decided against that and came up with a working alternative. Posts now have a single column where categories are manually written in, separated by commas. I later retrieve them with select distinct, explode() the string into an array and finally remove duplicates with array_unique(), making it easy for visitors, and for me, to get all the unique and valid categories.

One thing I'm doing that I'm not sure whether it's good, neutral or bad design/architecture, is using the same site that has the form to also validate/insert data, as in: instead of having newpost.php and validate_and_insert_post.php files doing separate jobs, my newpost.php is the page has the form and also receives the form in order to validate and insert into the database.

The whole thing's currently sitting at 220kb, unzipped, counting the leftover files that I'm no longer using. The fact that I can deploy this literally anywhere with a working php 8+ server without typing any terminal commands makes me very happy.

89
62
How to ask for a raise (programming.dev)
24
"A good word" (programming.dev)
219
"A good word" (programming.dev)
28

cross-posted from: https://programming.dev/post/47341163

Remember Win Elvis-n-Space? Or Lemmings Paintball? Or even Odyssey Legend of Nemesis?

Found this little gem of a site recently. Unfortunately, it hasn't been updated in a while (last blog post is from Sep 2025)

78

Remember Win Elvis-n-Space? Or Lemmings Paintball? Or even Odyssey Legend of Nemesis?

Found this little gem of a site recently. Unfortunately, it hasn't been updated in a while (last blog post is from Sep 2025)

56

Don't invite the math nerds here, they'll count the actual time since

view more: ‹ prev next ›

ICastFist

joined 3 years ago