An awesome list about Java platform Micro edition(J2ME). Documentation, academic papers, tutorials, communities, IDEs, SDKs, emulators, apps, video games. J2ME is a Java specification designed for old keypad phones and PDAs. MIDP, which is built upon CLDC, is used to create Midlets, which have `.jad` or `.jar` extension, and run on platforms like old keypad phones, Symbian and PDAs. MIDP is supported till Java ME SDK 3.4.
yanslookup|3 months ago
I was a pretty poor CS student, in hindsight I'm surprised I got it to work.
embedding-shape|3 months ago
zahlman|3 months ago
Pardon?
mooreds|3 months ago
I used j2me in the early 2000s to make a mobile app where people could find home data. My first startup experience. Learned a lot but didn't earn a lot.
Wrote a paper about MIDP here: https://www.mooreds.com/midp/midp.html . No idea if it is still relevant 20 years on.
catstor|3 months ago
Thanks for the paper as well. It explains concepts very clearly with a real-life problem statement. Added it to Awesome J2ME.
zahlman|3 months ago
I can still remember setting up palette swapping (inspired by retro consoles, but still a common contemporary idea e.g. on GBA) by loading the byte data of PNG resources into an array and locating and replacing the PLTE chunk before handing it off to the MIDP image loader. Always wondered if anyone else had picked up the trick. I can also remember people suggesting on Nokia in particular to just store raw bitmaps (since they'd be compressed in the JAR anyway) with their API and that this was saving tons of space for some people... later I found out that one of these reports came from someone who had started out with individual image files for 12x12 tiles that had a full 256-entry PLTE (i.e., more colour entries than pixels).
I also remember a device-specific bug where doing something like `x[y+1]`, where `y` was a static byte set to -1, would produce an `IndexOutOfBoundsError` claiming the index used was -256. I assume this was some threading issue in the Java implementation, where the value would be loaded into a register and then the sign-extension would somehow affect the register after the increment. I only ever reproduced it with static class members, I think (but it did also happen with shorts).
d9k|3 months ago
foofoo12|3 months ago
jeffbee|3 months ago
micheljansen|3 months ago
catstor|3 months ago
[deleted]
fidotron|3 months ago
J2ME gets a lot of stick, but modern mobile has actually recreated almost all the same problems. The big one for apps was the out of the box UI components were awful and utterly inconsistent between manufacturers. Several of the above companies tackled this (think conceptually like Flutter), but the market wasn't ready largely because data plans were expensive.
For games though, honestly, J2ME was dreadful, but in non-obvious ways: the control interfaces were hopeless, and sound was basically a non starter. People would be willing to forgive a lot more had the controls and sound been decent. Then the graphics stuff was just inconsistent enough that too much time ended up focused on portability and not enough on if the game was actually as fun as it should be. A consequence of that is most of the best J2ME games were ports from other systems or shameless reskins of other things.
But there is something to be said about taking a tube/metro/bus and seeing people playing stuff you did and enjoying it, especially given back then it was impossible to know who the players really were since things were sold through the carriers.
mooreds|3 months ago
Hard to overstate how expensive data was! This was also before widespread wifi.
If you want a look at the way the world worked in 2005, check this out: https://www.consumer-action.org/news/articles/2005_interstat...
Topics included:
- calling cards
- voip
- collect calls!
- international rates
stuff4ben|3 months ago
easyThrowaway|3 months ago
tauntz|3 months ago
devsda|3 months ago
The java ecosystem of those days had similar terms like the servlet (still surviving), applet & midlet. Is there a significance of the suffix "let" or somebody thought let's add "let" to everything.
kryptiskt|3 months ago
8mobile|3 months ago
Thanks Otto
catstor|3 months ago
[deleted]
flykespice|3 months ago
One I noticed is j2me games often don't play music on the background and just resorts to sporadic sounds, any reason for that?
catstor|3 months ago
[deleted]
Randomno|3 months ago
indigo945|3 months ago
What's really cool about that emulator is the way its sound emulation works. Instead of emulating the Gameboy's synthesizer synchronously and outputting a PCM waveform to a buffer, which is probably impossible on J2ME due to hardware and platform constraints, it uses the phone's own MIDI (or square wave) synthesizer to play whatever the GameBoy synthesizer should be playing. This gives the video game music a very idiosyncratic sound when played back in MeBoy.
anthk|3 months ago
andrepd|3 months ago
And of course a limited port of Worms Armageddon that has to be one of the games I sunk the most time on, seeing as I played several matches a day with my friends for an entire school year! Ahh I even scribbled a "campaign mode" on my math notebook during class instead of paying attention!
kitd|3 months ago
mghackerlady|3 months ago
anthk|3 months ago
andrepd|3 months ago
tacker2000|3 months ago
Tested of course on the latest SonyEricsson of the time!
Maybe i can dig that out again and run it somewhere.
captn3m0|3 months ago
froh42|3 months ago
catstor|3 months ago
Awesome Symbian!
https://github.com/hstsethi/awesome-symbian
While WAP was pretty good too, but I doubt there are enough resources on it to create a seperate list. Same goes for Blackberry, Palm OS and others.
anthk|3 months ago
lormayna|3 months ago
Raed667|3 months ago
juancn|3 months ago
It was fun to build small apps and felt like magic at the time.
anthk|3 months ago
Also, you can head to gopher://magical.fish, gopher://hngopher.com and gopher://sdf.org to get 'modern' services and news.
catstor|3 months ago
zerr|3 months ago
fidotron|3 months ago
It was all about selling into carriers associated with that, and that was a recipe for pain. I don't believe anyone made a killing in J2ME directly (Gameloft gave the impression of making most money, not entirely undeservedly), and many absolutely struggled, but it did provide the crucible for a lot of what came later.
One of the more curious incidents that stayed with me related to the game "Fatal Force" which had a 64kb build that was incredibly tight. We were mystified to discover a Chinese pirate was distributing a Chinese build of the game, still within 64kb limits. He had decompiled it, reverse engineered it, added more compression so he could fit in localized assets, and released it. The last I heard on the subject there was an effort to pay him for it.
The other was when a game of a game show was advertised in Germany, during the game show, it would generate such a traffic spike that the servers selling the game got knocked out, leading to requiring outsourcing that function to a more scalable competitor, a lesson that was not forgotten for the next company.
baumschubser|3 months ago
invalidname|3 months ago
catstor|3 months ago
ptx|3 months ago
k4rnaj1k|3 months ago