Before the iPhone, I worked on a few games for what were called "feature phones"
twitter.com
twitter.com
With that I created a daemon in Symbian that would query the cell id and open up a socket server to give it to the J2ME app.
With that we developed an app to request a taxi service, but none of the taxi companies wanted it. Some of the complaints were:
1. GPRS data plans were too expensive for end users 2. No one would put an expensive Sony Ericsson touch phone on a windshield, the windshield would be broken by thieves to steal it. 3. Looking at a screen on the windshield while driving was never going to be approved by authorities.
#1 was true all the way till ~10 years ago when 3G became popular.
#2 is still true is most 'urban' areas. People just take their phones with them when they get out of their cars.
#3 is interesting - I think some regions had tried to ban mounting phones on the dashboard, but at this point, they must have given up
Btw. in the 90' I used to detach each-single-time that I parked the car the front panel of the car's radio to then carry it with me (leaving the storage box in front of the passenger seat open, to show that I didn't just put it in there) to discourage people from breaking into the car to extract the radio (front panel & main car radio were individually coded to only work together, that's at least what I believed).
What a silly thing to do, hehe, but to be fair the price of a fancy radio at that time was similar to today's phones ("Pioneer" and "Sony" were high on my list - some models had quite complex display animations/colors/equalizers/etc & sound modes).
I still remember when my dad had bought an aftermarket tape-deck-only radio, a Sony I believe, well into the era of the ubiquitous CD player (he just wanted a working tape deck). Someone broke into the car at some point and stole it and I can only assume they were very disappointed after looking closer.
The precursor, HSCSD, was ridiculously expensive because you paid by the minute.
If my memory is correct, there was also dial-up on mobile/GSM (well, I used something before I had a phone that supported HSCSD), which was interesting, but quite useless at the time.
Also, #3 makes little sense seeing as there were already cars with built-in satnav, and you had to look down, which is worse than a phone on the windshield.
Yeah, it was called CSD. HSCSD was high-speed CSD.
The technology has come so far, it's pretty incredible.
The solution to that seems so obvious: make the phone speak to the driver instead. Was turn-by-turn navigation not feasible back then? Or what else am I missing?
Most likely this app was not navigation. Remember, feature phone, probably had less than a couple hundred MB of memory for the entire device. I assume the app would just give the taxi driver address details and what not.
In the major urban areas I've lived, every cab drive would start with "take this street to that street" or "head towards major landmark."
Even in cities with decent grids you couldn't trust a cabbie to take the fastest route.
How did Cabbies know where to show up when called?
Or did they not? I only ever took Taxis from places I could flag them down pre-Uber.
People also could tell the "main" roads, which would be known.
On a side note: my usual experience with taxis (not uber) is that they first ask the question to figure out if you know the town or not and then they know very well what is the longest route. Also even when asked for estimate of price it would always be the top.
Big reason why uber is so popular: you wont get a ling ride through whole town and you can rate the driver.
> Even in cities with decent grids you couldn't trust a cabbie to take the fastest route.
I heard these stories and would direct cabs the same way, until I realized that the cab drivers were right and I was wrong, and that the depictions of them as shady thieves who would purposely take you out of your way, or were horribly incompetent, were urban myths.
And I was being disrespectful to the drivers, to presume that and treat them that way. I don't treat other service industry people that way. And if you think about it, cab drives make more from a flag drop than a longer trip - as one cab driver said, 'people say these things to me - do you know how much I make for an extra few blocks? 50 cents? And what is my take of that?'
I learned to trust and respect the cab driver, who after all were human beings, and drove around all day long, and like most people was honest and considerate.
In what city? London cab drivers famously were (are?) required to pass a memorization test, but in American cities I've had many cab drivers who didn't know their way around. They've been generally better than Lyft/Uber drivers.
Some cities are setup so that with most addresses you can pinpoint almost exactly where it is in the city. Seattle’s a good example of this.
Also if you think of most taxi trips they will either be to a major location (hotel, airport, restaurant) or to a place personally known by the rider (house, work).
The world is a different place today.
The first retro-fittable GPS was in 1997, the Alpine CVA-1005 [1], which weighed >3kg and had a display of 26cm across; it connects for nav to a CDROM drive containing base unit [2]; here's the wiring diagram [3].
[0] https://spectrum.ieee.org/consumer-electronics/gadgets/the-c... [1] https://ndrive.com/brief-history-gps-car-navigation/ a good review of early GPS [2] https://www.ebay.co.uk/itm/Alpine-NVA-N751A-Navigation-Syste... [3] https://elektrotanya.com/alpine_cva-1005_wiring_diagram.pdf/...
The last Garmin my dad had, maybe 5 years ago was decidedly chunky compared with phones at the time (but you need a reasonable sized screen and the use case meant it didn't need to be thinner, so perhaps not a fair comparison).
1-800-TELL-ME launched in 1999/2000. You told it your address and the destination address, and it read you the directions one at a time. E.g. after you made the first turn, you'd ask for the next one and it'd tell you. It did not need any GPS this way, it's like talking to someone sitting next to you reading the map for you.
Microsoft bought Tellme in 2007 for $800 million.
And why?
Using the interactive phone calls to train their speech recognition systems, so that they could eventually use what they learned to develop things like Google Assistant, Cortana, Windows Voice Recognition, etc.
Tellme was taking 2 billion calls a year when they were acquired. They had all the training data Microsoft could want to compete with Google in that area.
They also had a backseat DVD player with (shudder) analog video input. The quality was atrocious!
Not so much "lets all talk about this in realtime!" I admit, but there seems to be a subset of people who use Twitter/Reddit like that when watching politics or sports.
The best thing to come out of the project was the "advertising" video featuring YT casually answering every question correctly. Which is a thing you can do when you've watched the same episode 15 times to record second-level timing!
It always confused me why Jeopardy never pushed anything official.
Why not just make the entire app native in Symbian if you require it anyway? Or did the Symbian SDK suck even more than I remember?
I pivoted to J2ME with about a week to go in the project and managed to get an MVP working in time, after 3 months of wrestling with Symbian.
Also it did not help that the SDK was rebooted like 4 times.
Initially based on Metrowerks, coupled with a mix of Perl and batch files, rebooted twice into Eclipse based IDEs, and finally the QtCreator initial effort before the burning platforms memo happened.
Still, it was still much more friendly than dealing with NDK issues on Android.
That dual-key QWERTY is my favourite input, ever. I’d love something like that on iPhones soft keyboard lol
The map data was all stored on an MMC card so it didn't need any GPRS data. I used both a Nokia 6600 and then a 6680 with the same software. https://www.pocketgpsworld.com/route66-mobile-britain.php
Only the bluetooth GPS receiver had to be kept in the windscreen, and both parts were small enough I could easily could take out of the car when leaving it.
I suppose it was slightly bleeding-edge stuff for it's time but it worked pretty well considering the capabilities of the device and was much cheaper than a dedicated GPS unit with no ongoing costs.
Unrelated obviously, but as someone who was surprisingly poor for an owner of such a phone in those days (it was on my mum's phone contract and we had to fight and haggle to get it), satnav software piracy was rampant back in the day.
I think there's still a Bluetooth GPS receiver somewhere in my old room at my folks place...
Started wayyy back in 2007, and was a cofounder of a startup that made popular J2ME games available for free to people by wrapping it in our proprietary ad serving software. We launched more or less the same time that AbMob did, invented more or less the same stack (ad delivery to mobile phones), but we focussed on the product (games) whereas they focussed on the platform (ad delivery). A few years later AdMob was acquired for mega $$$ by Google, whereas we just kind of limped along and died a slow, natural death! Many years later I discovered that my cofounder just let our 4 letter domain expire (www.hovr.com) and I think it's up for sale now :(
Also remember developing games on the BREW platform by Qualcomm, circa 2005. Whereas I was in India which mostly had GSM J2ME phones, BREW was much more popular on North American CDMA handsets. I, along with a friend, developed one of the first real-time multiplayer games called Blingster Battle, which was on top of Verizon's charts for a brief period of time! Truly groundbreaking stuff at that time..
The most amazing bit, though, was when we made some BREW apps around 2013. By then iOS and Android had firmly taken over the smartphone market, and all the cool kids were downloading apps/games on them. However there was a very significant portion of the market - primarily composed of the elderly - who were still hanging on to their old CDMA feature phones and were still interested in buying new apps. We made a couple of quiz types games, that actually generated a couple of thousand dollars in revenue every month till last year, until Qualcomm finally pulled the plug on BREW!
Impressive - how did you manage to run real-time multiplayer on that technology?
Each phone had different implementation quirks, such as variable audio delay when playing a file, audio/image formats that were faster/slower, odd button events (some used press, some used ondown, some had no ondown, etc). A lot of our work was learning all of these quirks and implementing them into the automated porting platform.
Then the iPhone came out and started to build momentum.
I still have my old flip phone, the one with the least quirks, with some of our games on it.
Anyway, even including those cases it is still very far from J2ME days.
- Camera is hit and miss, even after the renewed API
- Apps randomly killed on the background
- Intents that don't launch as expected
- NDK debugging that cannot attach to the server running on the device
- Unstable GPGPU drivers
- Keyboard handling
- Perfectly working code that needs to be rewritten just because
Yeah so much better than J2ME.
Aren't they rewriting this thing in Rust?
> - Camera is hit and miss, even after the renewed API
Give it time. CameraX is already vastly better than what we had before.
> - Apps randomly killed on the background
Up to OEMs.
> - Intents that don't launch as expected
?
> - NDK debugging that cannot attach to the server running on the device
Welp.
> - Keyboard handling
Fixed.
> - Perfectly working code that needs to be rewritten just because
?
- It does not matter if the blame is on Google or OEMs, it is still fragmented
One needs to support the home team after all.
Well, my point in the end is that even with all the issues that you pointed (some are true, some we didn't hit because we don't use those features), we still see more issues on iOS even when they're a smaller portion of our user base.
Heck, even if we got the most problematic Android phones for us (Asus budget phones comes to my mind), it is still has less issues than iOS.
> - Perfectly working code that needs to be rewritten just because
This issue is much more frequently on iOS than Android, since iOS deprecates features much faster and there is no compatibility layer between versions.
There's a lot of tuning needed to avoid desense issues when your device supports 3+ wireless protocols - that's why your PC motherboard comes with an external antenna for Bluetooth and your iPhone doesn't.
https://pamartinezandres.com/running-android-tests-on-cloud-...
I honestly miss these times - it sparked so much creativity when one needed to achieve something in such a limited environment.
As someone from the c64/apple][/atari generation... it was constantly amazing to see how much people could push a single device. Lots of creativity, as you say. But... we seemed to hit a wall with the whole j2me-era of "just get creative to work around things!" mindset. Because, IIRC, there were dozens of different devices that all didn't work the same way - you'd have to get really creative to get things to work in 128k, but then do it again and again and again for each target device.
There were millions of C64 units in people's hand in, say, 1986. And similar for Apple ][ units. You could be assured of a decent audience/sales/users if you ported to that platform, even if there was a lot of 'creativity' to deal with. The j2me device world always seemed a lot more fragmented to me (but maybe it wasn't?). But just saying "this runs on a java device" was different from distribution - allowing 'regular' people to get something in to a centralized store/distribution point seemed another big win for the iPhone world.
EDIT: fwiw, this made me spend a few minutes in youtube looking at old c64 and apple and Atari demos. what people ended up doing with those devices - years after they were mainstream - is still crazy to me.
The craziest ever, to me, is the following in 256... bytes. Bytes (including the music ofc, which is the whole point).
Memories by Hellmood https://youtu.be/Imquk_3oFf4
Oh it sure was! There were device specific workarounds and hacks all over the codebase.
The problem with cross-platform development in a nutshell. Still to this day writing an Android/iOS app using PCL code is a headache
We actually worked with the BREW platform, so we only had 50 phones instead of the 300 java ones. Lol, too funny
> Unlike most emulator projects, Kemulator turned out to be closed source abandonware
It is amazing that in the past two decades most emulators transitioned from closed source closely guarded secrets to open sourced and often under a popular license.
The preservation is unparalleled.
P.S.: Some googling suggests that it played "backups" just fine.
My parents wouldn't let me buy M-rated games, so the easiest way for me to play MGS was on my Dreamcast with a copy of Bleemcast that I found used at Gamestop for four dollars with a pirated copy of the game.
Like still being able to watch that old VHS movie on BluRay HD, or listening to Swing records from 1920 in 2021.
I recently paid five dollars for redream Dreamcast emulator. Totally worth it. There's a free version that doesn't run hi Res and that's fine.
It seems they got the business model right this time.
Checkout the following links:
https://docs.google.com/spreadsheets/d/1Si3PMUJGR9KrpE5lngSk...
Chess.com is for profit, so they have to maintain some profit margin and lock features behind paywalls to incentivize people to pay. The free experience is worse than Lichess.
I've been curious whether Switch libraries will follow you to whatever the next Nintendo console is. They haven't done that in the past, but online purchases might be so common now that they can no longer get away with not doing it.
https://play.google.com/store/apps/details?id=com.dsemu.dras...
Over one million downloads, price £4.99
;)
My point still stands though for emulators on PC where I believe software piracy remains popular.
They even paid the developer several thousand dollars so that they would improve the debugger function.
This was all unofficial, of course - Nintendo had no idea and would not have been happy if they found out.
Then you're stuck: the community member could certainly fork the project with their new feature, or maintain a patchset and forward-port to each new version of the original software, but both of those things are a ton of work.
Meanwhile, users are the ones who lose out; someone decided to build the feature and give it away for free, but users have to jump through hoops to use it.
As someone who has done a lot of open source work over the past ~20 years, I don't think anyone is entitled to find a business model in there. Sure, if you can find a way to work on your project full time but still support yourself, that's great. But often the ways people do so make for some (IMO) bad trade offs and perverse incentives.
I like the dual-licensing approach, where commercial users need to pay, but that's not workable for all projects.
See VirtualBox, and to some extent Chrome. For VirtualBox, I'm sure that the Extension Pack could be covered with an open-source effort by the community, and in the case of Chrome, their refusal to accept *BSD patches.
Accepting 'portability patch' isn't free..
It doesnt benefit from the massive scale revenue, but if it's paid for your time...
IIRC, for a while cemu (a Wii U emulator) had builds with support for Breath of the Wild gated behind Patreon early access as well.
BOTW would still play just worse, then they'd release the next version on patreon and make the last one free.
Now it just runs well.
Happy that they got rid of it, but there was quite a bit of community pushback needed.
Reminds me of a technical document of Doom 3 BFG edition.
https://fabiensanglard.net/doom3_documentation/DOOM-3-BFG-Te...
In 2004, it was a best practice to keep data on memory. in 2012, CPU and GPU performance was increased a lot but memory performance wasn't increased much so calculating the necessary data on demand is faster than keeping it on memory and retrieving it.
You have to aggressively benchmark even across CPU generations to remain confident that your optimization has optimized anything.
We didn’t have experience in games, so our thesis was to make the dumb phones ‘start.’ We actually have quite a few ‘firsts’ (to our knowledge) and ended up with several of our own apps in the Best Sellers list on Verizon.
We were responsible for the first BREw certified app to use the camera (for bar code reading) via a consulting gig.
We launched a Guitar Tuner that was actually quite high quality despite the cheap hardware. It quickly became a best seller and shocked the Verizon rep when people would buy it for $25.
We also launched a Do Not Disturb app that was fantastic. We tried to port that to the iPhone in 2010 but Apple wouldn’t allow it.
I am convinced we were also the very first people to honestly lose and recover a phone using tower based location services while testing a new app we called Secure Phone. Verizon wouldn’t launch that app though because they were concerned about privacy. 2 years later that was a moot point.
Another fun fact about that, Sam Altman launched Loopt during that time. I asked him how the heck he got Verizon to approve it... ‘board member’ was his answer. Smart money for the win.
Not a bad run for a small group of indie developers with no backing. Great memories.
Worms, Zombie Infection, Sims, loads of Fishlab games, a silly GTA clone... Massive nostalgia hit
I expected it just to be the nostalgia, but actually those games hold up pretty well especially considering the limitations of the platform! Certainly they are a breath of fresh air compared to the microtransaction/ads/spin-the-wheel/spyware - ridden games for mobile platforms today.
Our “phones” are now more powerful than gaming PCs from not that long ago, and could easily play plenty of proper PC and console games from a few generations back, and yet the mobile gaming industry is basically just a lucky dip buried in a landfill.
I dream of returning to a free category that is actually free, or with a reasonable amount of advertising.
Apple, which so much “focus” on quality they still won’t reject absolute user-hostile junk.
A few years forward, no zeebo game can be played on non-original hardware that is no longer manufactured for about a decade. These games will become unplayable and unsalvageable too. Although not spectacular, losing part of history is always a dent on culture preservation.
Basically the same happens with the BREW software that won't run anywhere else and brew devices that simply became unusable because they require signatures.
Locked down platforms should be regulated or laws should exist to force companies to open specifications after some time and release signatures.
To be clear as well, the flag he added doesn't explicitly disable GC, it disables asking for GC explicitly, e.g. it makes "System.gc()" a no-op. The JVM will still garbage collect when it's heuristics decide it should.
Will you get better performance? Or will it end up using a large amount of memory and then having a long GC pause that causes your game to drop a frame every now and then?
Now, even the biggest breakthrough indie game with a 5 person dev team wouldn't become a household name. These days it's the studios themselves that get most of the credit. Which may only be fair: When there's 100+ people on a project, it's such a group effort that singling out a handful doesn't really represent the achievement.
Dwarf Fortress comes to mind, and I know it’s made by Tarn and his brother, but I don’t know their last name…but I guess it’s not exactly modern.
Similarly, Kyzrati/Josh Ge, of Cogmind & REXpaint fame, and pender/Brian Walker.
To the point above about “who does the representing,” even though I happen to know their names, I think of them by their monikers, pender and Kyzrati, not their real-world names.
(then of course Notch went off the deep end and most communities rapidly began distancing themselves from him...)
In the 90's and early 00's, many big names practically were studio, the brand.
There are still small indie groups that make breakout or successful games that hit mainstream awareness (Untitled Goose Game anyone?), but it seems like many prefer to use a company branded twitter than make their own name(s) public or just let the game stand on its own.
Carmack on the other hand is completely unavoidable if you even casually tune in to gaming news. I've never player a Doom game, but I know who Carmack is. In contrast, I've played 200+ hours of Factorio, and had no idea what the names of the developers were.
I'm not saying it's impossible, just that it takes much more than a breakout hit from indie devs to thrust them to Carmack levels of fame.
Part of it is likely due to technology changes. A big part of Carmack's fame initially stemmed not only from having a wildly popular game, but having done things with hardware that were practically magical at the time. The use of Binary Space Partitioning-- a not very well known technique for rendering that had, to my knowledge, never been used in videogames before was used by Carmack because he could not only program, he rises above the level of programmer to computer scientist. Many people study computer science in college or bootcamps, but most simply become programmers.
Compare that to today's game dev ecosystem: Even indies are typically using a variety of middleware and off-the shelf software to build there game. There is both less room and less need for the type of hackery of the Carmack era (which wasn't unique just to Carmack). These days if you want your game to do something more computationally intensive, you just do it, and up the minimum reqs from a gtx 950 to a gtx 960.
I think this is why the closes thing to the level of celebrity of a single dev we've had in a while is Notch w/ Minecraft. He didn't get there by pushing the boundaries of hardware to make something previously not possible, he simply put in long years of iterative design that results in a unique breakthrough hit that appealed to hugely different audiences. If we're looking for future celebrity devs, that's the sort I would expect, and they seem much more rare.
He's said some truly awful things. It's too bad people are downvoting you - this is part of the story of gamedev. Carmack would never say these kinds of things. Persson did. One is a famous and well-known and loved developer, the other is relegated to parroting talking points of alt-right/Nazi discussion boards and does not associate much with the rest of society.
Notch could have been more famous and well-loved than Carmack even, but his personality and hatred of minorities stopped that from happening.
Minecraft is incredibly popular and very well made; but in no ways is it revolutionary or game-changing for the industry in the way Wolf3D or DOOM was.
There is essentially the game industry before and after DOOM.
Quake, similarly; changed the game; and, in fact - the engines for Quake/II and DOOM/II would go on to be the engine behind a quite massive quantity of games in the 90’s.
And then there’s Carmack’s massive contribution to FOSS by allowing us inside the code to learn how the craziness was constructed...
Honestly, there are only a handful of people in the world who even had the chance to make that kind of impact.
Had Minecraft come from a major studio, even hitting it just as big, I don't think we associate it nearly as much with particular devs, and I can't think of another indie hitting it like that in the last decade. But if big names do still emerge, I think it will be from small breakthrough indie teams.
People like danidev: https://www.youtube.com/channel/UCIabPXjvT5BVTxRDPCBBOOQ
It is an interesting trend that players can now become more famous for playing a game than the people that create the game. However I think that's only possible with the advent of user-created content: Minecraft gameplay on YouTube ~2012-2013 was a big driver in Minecraft's popularity and catalyst for mote activity like that. I think gaming culture would have reached this point without Minecraft, but as it stands right now it was the foundation of the massive gaming channels and streaming.
Streaming and gaming personalities both pre-date Minecraft but for sure it’s had a massive cultural impact. Particularly in terms of the growth of an audience through all the kids participating.
It certainly serves the studios' interests to reduce their talents' market power. If customers recognized individual devs and wanted games made by them, those devs could demand more money and more influence.
With today's game studios though, they aren't the platform owner, so a game dev with a personal brand branching off to do their own thing is still a net loss for them. I wonder if they have rules in place about that sort of thing. I could even take the appearance of something benign & reasonable: "No one talks to the press, everything to the press comes out of PR & marketing"
If that's the case, there may very well be a dozen Carmacks in the big dev studios that made something seemingly impossible happen, and without whom their games would simply have died, or been flops.
Then again with that level of fame, failures hit the individual quite a bit harder than the dev teams as well. Look at someone like Warren Spector, Richard Garriot, or Dennis Dyack. I might read each of their examples as situations where their singular influence on their games and rise to fame ultimately lead to their failures & blame as well. It created a lot of pressure (somewhat self-imposed to be sure) to do something bigger & better each iteration that they eventually couldn't keep up. A situation made worse along the way by financial backers giving them too much money to develop, meaning the devs didn't have to think as critically about what to include and what to prune from games. It lead to games that were a mess of shiny features or broken promises lacking a solid core. Fame cuts both ways.
The reason turned out to be that the game runs a memory cleaning command to avoid bugs arising from lack of space. Since modern computers have 10000x more memory to clean up, these commands now take way more time to complete, and thus slow the whole game down.
Look up JavaCard which apparently is a thing that still exists. It uses the Java language without a GC - that programming environment is truly miserable to work with.
The understated insane part of this is that emulating a 100mhz ARM CPU with 128kb of RAM apparently takes gigabytes of RAM to accomplish. What on earth is that emulator doing?
The thing I don't understand is that the application presumably isn't using any more or less memory than it did when it ran on a 1/10,000x computer. You're not scanning the whole RAM for memory to clean up, just the allocated memory. And on a game that was designed to use 128kB, that's presumably not very much.
Is a reference to both the many enthralling presentations Carmack has given and to https://www.youtube.com/watch?v=X68Mm_kYRjc
Congrats on doing something intrinsically valuable. Using the accelerometer like that so early was slick!
I got an email once from a woman that thanked me profusely for our Do Not Disturb app that kept an abusive boyfriend from harassing her. That felt good.
What an awesome "beginner's mind" perspective. It's too easy to write off a potential solution as difficult or impossible - but why not adopt this attitude, and at least try?
It's very inspiring to read about a problem and having the solution explained as matter-of-factly as here.
You forgot the part where dude in question is a programming Jesus.
After that Android's deceptively straightforward tethering feature was almost saddening...
Ha - you should've seen early iPhone tethering. Back in those days, net neutrality wasn't a legal right yet (at least here in the Netherlands), so the carriers would push a profile to your phone that disabled tethering. The solution, of course, was to jailbreak your phone and install a tweak that turned it back on.
You must live in the future!
Ah yes, the infamous 'zero rating'... this is currently the only hole in the net neutrality regulation. However, apart from that, net neutrality is indeed a legal right in the EU.
https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX%3A...
https://berec.europa.eu/eng/document_register/subject_matter...
Even though I never did get a Sharp Zaurus in the end, I migrated directly from Palm TX Neoo FreeRunner and to Nokia N900 and the rest is history. And I'm running Sailfis OS on my Xperia X now. :)
I realize that your comment was likely made in jest, but it still bugs me.
Given all that he has accomplished and the influence his work has had on multiple generations of computer and gaming nerds, I don't see the celebrity status as terribly unwarranted.
That may be the current reality of the situation, but it doesn't mean we have to keep it that way.
I'm not saying he doesn't deserve his status, I'm just saying let's not get too fanatical about it.
We're just acknowledging that he is an exceptional contributor to our industry, and that his work has inspired a TON of people.
To have someone of that stature contribute to your project is exciting! There's nothing strange or creepy about that, and if people want to celebrate that in their own way like printing a Git commit or something, whatever!
Imagine being an indie film director and having Kathryn Bigelow show up on set one day to give you some notes and feedback on your film. You might frame that piece of paper.
Imagine being a local chef in a restaurant and having Julia Sedefdjian stop by for a meal and compliment your food. You might get a photo to keep on the wall in your kitchen..
Nothing wrong with any of that, I think you are characterizing things to an unwarranted extreme here.
a) Bypassing their own code review processes.
b) Creating a contributors list, just so they can put Carmack at the top of it (what about all the other contributors?!)
IMHO this crosses a line. Not in a big way, but one worthy of comment.
Carmack, while not Cardi B or whoever, is famous enough that I'd bet he has at least a few extreme worshipers and extreme haters.
That said, if Carmack contributed to one of my projects, yeah, I'd be sure to let people know that. :-)
I don't think the comment was fanatical at all, it was a lighthearted joke.
While I agree it was likely lighthearted, that does not exempt it from criticism.
Purely in terms of a programmer. Things he's created.
Everyone should be able to have heroes. You don't need to necessarily elevate them to the level of Gods, but John is very readily a video game real life hero.
(if it did happen for real the most I would do is print out the commit hash with his name next to it :D, because he is one of the people I look up to in CS, others being Knuth and Tarjan among others, I would do the same for them, but then again I don't think they are active open source contributors)
Nonetheless, Carmack is still one of the most impactful programmer of the modern era.
What a coincidence !!! Anyways has anyone still using feature phone, i would love to hear your experience
I have a great Alcatel dumb phone with dual sims and NO OTHER FEATURES. :D That's exactly what you want from a dumb phone. It works just fine on any mobile network today in Sweden. It cost the equivalent of 24 USD.
http://fabiensanglard.net/fd_proxy/doom3/pdfs/johnc-plan_200...
I wonder if there's any 'defense' against this kind of thing.
I was always upset as a massive FF7 fan that there was a canonical game only released for certain (one?) feature phones tied to a Japanese telecom, and despite my best efforts I was unable to obtain a phone with a copy of all episodes downloaded (though I did find some translated transcripts that I could read for the story).
Very happy that it will now be included as a part of Ever Crisis.
I'd compare "Java as solution to everything" to the more recent "web scale" and "NoSQL" crazes, but with the backing of a PR firm instead of Internet echo chambers.
Of course times moved on an companies switched to native apps. I ended up leaving for an accounting startup.
- Never GC via using object pools. This code is nastier than C++ because Java is not intended to be used this way.
- GC whenever needed randomly. The game will just pause occasionally. Very annoying as a player.
- Write the actual game in C++. Make a few JNI calls here and there. On feature phones I only remember this being possible for some vendor apps.
- Write your game in C++ and transpile it to Java using some fancy framework that dances around never using GC.
So I think writing a game while profiling allocation rates and paying a bit of attention to not spam new everywhere, one should get decent performance without any framedrops. At most, optimize the hot loops with primitives, arrays.
Even in modern times, for the longest time Android Java apps had laggy scrolling due to GC hitches that the refcounting iOS Obj-C apps avoided.
Refcounting is good for some simple programs where ownership is not trivial, and the language doesn’t support a GC/or when memory is constrained, etc. But it is not an accident that high level languages with GC doesn’t choose refcounting, and having the cost of destruction at the given thread is just one point, afaik circular references are similarly not an easily solved problem. And basically with every single “solution” to these problems you are moving towards a full-blown GC.
It works fine, it’s just not done that often. (Specifically contended refcount changing isn’t done, which is why having fast uncontended atomic helps.) Transferring between threads happens and just works.
ObjC has explicit weak pointers and ways to move destructors to another thread and it all works. Though you could use C# or JavaScript in your app, many people do.
Actually, PHP and Python do use refcounting internally, I think PHP only GCs on exits from functions…
https://github.com/ixy-languages/ixy-languages
https://blog.metaobject.com/2020/11/m1-memory-and-performanc...
Also C# can do everything that Objective-C is capable of, provided one actually knows how to use the language.
CPython uses a mix of refcounting with a cycle collector tracing GC, other Python implementations use tracing GCs.
The language does not specify GC semantics and counting on them is a recipe to break code when moving across implementations.
They never released android or ios version and probably the company is closed now. one of the best mobile hames I have ever played!
My favorite was the Pirates of the Caribbean: At World's End game which came out as a tie in to the movie, back when every major film had tie in games.
I played titles like Assassin's Creed, and found them way mir entertaining than current smartphone titles.
This way of phrasing it, makes that term look ancient, which is a hilarious way of making me feel old.
Maybe I should try again with the GC off.
On windows I'd expect the default allocator to be a black box, but I might be wrong.
For garbage collection I strongly recommend this book (on top of the source code of your gc if available!) https://gchandbook.org/
It's trivial to replace malloc/free with my_malloc/my_free - and integrating libraries that replace malloc/free as-is without renaming also tends to be straightforward. In C++, you can overload new/delete to use my_* with little hassle, or placement new to instantiate classes on previously allocated memory directly.
Meanwhile, C# and Java provide absolutely no means of creating instances of their classes via anything other than their built-in GCs. You can't just distribute a .exe or .jar with a replaced GC - instead, you need to create/distribute/install an entirely new runtime, and even that doesn't really provide any sane means of having multiple GCs living side by side. This is all theoretically technically possible, but orders of magnitude more work.
You can provide your own GC on .NET via the COM API.
https://github.com/Potapy4/dotnet-coreclr/blob/master/Docume...
Just like Java since version 10, https://medium.com/@unmeshvjoshi/writing-your-own-garbage-co...
And yet so little code uses them that to eschew the builtin GC is to eschew basically the entire .NET framework. Even basic foreach loops go through IEnumerable interfaces - theoretically boxing even structs. They also come with different semantics - sometimes terrfiyingly subtly differences when combined with properties.
> and support for native heap management
IDisposable and friends are awkward fill-ins for proper RAII tools for native heaps.
That said, these options can be incrementally deployed in your existing codebase without resorting to another language, so they're more accessible options
> [links]
Hooking/replacing the GC seems more straightforward these days, than when I last looked into it though! Although, coreclr APIs won't help with Unity, or Mono. OpenJDK is at least used by modern Android these days, so perhaps there's a way to use it's GC customization options...?
https://devblogs.microsoft.com/aspnet/grpc-performance-impro...
Others are doomed never to move away from new.
The UCRT is at least "source available" on Windows, up to a point, and distributed with the Windows SDK. The release heap codepath is a bit boring:
malloc: C:\Program Files (x86)\Windows Kits\10\Source\10.0.19041.0\ucrt\heap\malloc.cpp
_malloc_base: C:\Program Files (x86)\Windows Kits\10\Source\10.0.19041.0\ucrt\heap\malloc_base.cpp
HeapAlloc: (kernel32.dll alias for ntdll.dll!RtlAllocateHeap() on my machine)
The debug codepath is a bit more interesting: malloc: C:\Program Files (x86)\Windows Kits\10\Source\10.0.19041.0\ucrt\heap\malloc.cpp
_malloc_dbg: C:\Program Files (x86)\Windows Kits\10\Source\10.0.19041.0\ucrt\heap\debug_heap.cpp
heap_alloc_dbg: C:\Program Files (x86)\Windows Kits\10\Source\10.0.19041.0\ucrt\heap\debug_heap.cpp
heap_alloc_dbg_internal: C:\Program Files (x86)\Windows Kits\10\Source\10.0.19041.0\ucrt\heap\debug_heap.cpp
HeapAlloc
HeapAlloc itself is a bit more of a black box (AFAIK), and contains a lot of the fun details about the actual process of heap allocation - although there's a bunch of hooks, debug functions, documentation, articles, alternative implementations (ReactOS), etc.Did Carmack work on the iPhone? Or should I parse this differently?
> Before the iPhone existed, I worked on a few games for what were called "feature phones": Doom RPG 1&2, Orcs&Elves 1&2, and Wolfenstein RPG. Qualcomm's native-code BREW platform had better versions, but I haven't seen any emulators and archives for it, so they may be lost at this point. The J2ME (java mobile) versions are still floating around, and can be emulated.
> My son wanted to get O&E2 running, so we set out on a little adventure. Kemulator ran the game, but audio was glitchy and it hung after you died in game. Well, we are programmers, we should be able to fix it. Unlike most emulator projects, Kemulator turned out to be closed source abandonware, so we moved over to freej2me, which is a live github project.
> The hang didn't happen, but audio was even worse. Missing sound effects was a simple bug fix -- MIDI sounds weren't seeking to the start on replays. We will submit a patch. Still, everything was glitchy with audio underruns. We noticed that the emulator was taking an absurd amount of CPU, despite the game being built for <100 MHz mobile CPUs.
> We spent a frustrating afternoon exploring java profiling tools, but finally, Flight Recorder and JDK Mission Control pointed out the root cause: explicitly invoked garbage collection. A vague memory of having to call system.GC() every frame to avoid problems on some mobile phones bubbled up. We couldn't change the source on the game, but the jvm has a handy option -XX:+DisableExplicitGC that fixed everything right up.
> This is an interesting case where an operation is >10x slower on a modern computer.
> A GC sweep on a phone with 128k of heap is a very different thing than a desktop with a multi-GB heap.
> Some old writing about the early cell phone work: https://web.archive.org/web/20060502175605/http://www.armadi...
I have opted out and blocked their bot on Twitter which apparently currently suffices to prevent their scraping. I'm more than happy to point anyone who asks to a text file. God, I miss blogs.
Sorry about the rant.
But I’d rather him use Twitter than the centralized broken mess that is medium.
On Twitter Carmack posts a paragraph as it comes to him. Could do the whole thing at once. Could take days to complete the thread or longer. It could be as long as he wants. One tweet or one thousand. No real expectations of edits. No one would be surprised if it's only a three paragraph thought whereas going to read an essay that might feel a little brief. Nobody expects really profound or serious insight, just the thoughts on top of his head.
Readers also have the same low barrier to entry. No need to go to a separate page or app. Look at the first or first n paragraphs. Scroll by anytime.
The user experience for something like this may not be perfect on Twitter, but I think Twitter has a lot to recommend itself as the appropriate tool for sharing thoughts like this.
My only complaint is when the thread is long, Twitter will start not showing it all at once. You have to click the last tweet to see anything after it.
But again, threadreaderapp itself also has trouble to feed all the parts of a super long thread.
edit: in case anyone is interested, here's the code for the bookmarklet to turn the current tweet into a threadapp thread. This is not very deeply tested but it worked with the current tweet above so YMMV:
javascript:(function(){window.location.href = 'https://threadreaderapp.com/thread/' + window.location.pathname.split('/').pop(); })();And yes, it's absolutely horrible that there are all those buttons and a repeated profile pic intruded at random points in the text, like in the middle of a damn word.
I get that you need to tweet to get views and nobody reads blogs any more but this "Twitter thread" concept is a UX horror.
Still embarrassing for a tech company of twitter's size. Displaying a tweet to a logged out user should be the single simplest job their service has, but it's usually broken.
Twitter's thread/reply API has been changed a lot. It definitely works better now.
I will also be honest, Talon basically isn't really updated any more.
I remembered the last time I used it, it has a bug that it will always re-save/re-compress the image when you download, which is very easy to fix, but the author didn't do anything about it. I just checked, the bug is still there..
https://github.com/klinker-apps/talon-for-twitter-android/is... and https://github.com/klinker-apps/talon-for-twitter-android/is...
Twitter is a private company but it has also become a public space for political discourse.
The need for profits and open free speech are butting heads.
That said, I would buy that ignoring and any fix for it is deliberate.
I'm a heavy user of Twitter. They have the most ridiculous bugs all the time
Let me list a few I can remind in recent two years:
1. A serious bug that makes the private lists' name, member count, and description visible to everyone for half a way
2. ANOTHER private list exposure bug after a year
3. Lots of their features are semi- or totally broken, the most obvious example being Moments. Some minor ones are like "twitter anniversary" etc.
4. Media files being totally lost/404, especially for some older tweets
5. UI: "Checked" mark for adding people to lists being invisible for at least a week
5.1. UI: some UI elements suddenly become black for a few weeks regardless what theme you use
6. Outage: Like function broken for almost a day
7. Outage: Timeline broken (no update) for half day
8. This probably isn't a bug but a "shadow block" feature, but I can't follow some accounts (and their following/follower count doesn't show) if my IP is in certain region.
9. Huge feature disparity between web and app, or iOS and Android
And needless to say, their support is beyond unhelpful, and they don't really have a proper place to report technical issues/bugs of their service.
I basically wont read Twitter threads because of it, perhaps I am better off for it.
Dunno why Twitter seems to have completely deprioritized the issue though. They change the error message every once in a while but nothing else.
It's pretty amusing to me that this modern, high-res, multi-megabyte page has worse usability than when we could just "finger" Carmack's .plan from a terminal 20 years ago.
Maybe we should try to bring finger back. We could pretend that it uses the blockchain to drive adoption.
When it does load, chances are that it only shows one tweet from a thread followed by half a dozen unrelated tweets that twitter thinks I might want to read instead.
He has enough material to gain a good following.