Hacker News new | past | comments | ask | show | jobs | submit login
Slack client for Commodore 64 (1amstudios.com)
299 points by oherrala on Nov 29, 2016 | hide | past | favorite | 89 comments



Come on guys...

C64 all of the things!

Some of the comments here are ridiculously negative or taking away from the fact that Jeff has done something cool here.

Good stuff, Jeff! Keep on doing stuff like this and don't listen to the hate/negative comments.


Thanks! It's just a fun project, so of course there are lots of ways to improve it!

I found writing 6502 assembly code is strangely comfortable once you get over the initial face-palm moments ;)


What a fun project! Back in the day I wrote a full VT100/VT220 emulator in .asm for the C64 using bitmapped graphics for an 80 column screen.


How would you recommend getting further acquainted with 6502 Assembly? After reading 'Easy 6502' (https://skilldrick.github.io/easy6502/), I'm not sure where to go after that. Awesome project, btw!



I connect to Slack from my favourite IRC client (Irssi) after getting fed up with the memory that the official client used. It's not as retro-cool as this C64 port but it fits my command line orientated workflow better than the Electron app did and allows me to build my own client-side plugins in Perl.


Use 'Glass TTY VT220' font (at 20 point) in your terminal app and your retro-cool game will increase two levels.


I really am sick to death of applications built ontop of Electron Shell et al, what an utter waste.


Yep I put a ticket in for something simialr(grows to about 2GB every 2 days or so), and was told it's expected behaviour!!


Everyone says scrolling back through history is a feature, but it grinds to a halt before you can scroll back very far anyway.


Historic messages don't need to be cached in RAM if it's several pages above the proverbial fold.

However I'm not convinced it's just historic messages that's eating up the memeory. IRC clients aren't this bad even with thumbnail support like Slack. Whuchever way you look at Slack, it's needlessly wasteful.


And I thought that my 700MB was bad.


My slack hovers at only around 920 real mem and 1.6GB total.


Wow, you really need to be in less slack teams...


That memory footprint is inexcusable even if he were literally on one thousand Slack teams. Functionally, Slack is more or less a shiny wrapper on IRC, and you can run dozens of IRC channels in a few megabytes, if that.


That's no excuse for 17GB of memory usage...


C'mon. Implement PPP between the C64 and a Pi, and then do the rest on the C64 itself.


> I connected the Userport to a Raspberry Pi with a artisanal, locally sourced, homemade cable with the UserPort connector on one end

The writing in the blog post is nearly as awesome as the project itself.


FWIW you probably don't need a USB serial port, or a RS232 converter at all; you could just pick the TTL serial signals off the commodore port and plug them into the TTL serial port on the Raspberry Pi 23- or 40-pin expansion slot (pins 8, 9, and 10 are TX, ground, and RX.). Remove the tty on /dev/ttyAMA0 from the init config and you can use /dev/ttyAMA0 as your built-in Pi serial port.


The DC voltage supply on the Commodore side looks like 5V, and at a guess, the TTL probably runs at that voltage too. The Pi won't be happy with more than 3.3V on its UART pins, so the USB adapter also fills the purpose of a voltage adapter.


Right. I thought it might be 5v tolerant on the RX pin but maybe not.. easy enough to just use a resistor and a diode to the 3.3v supply to level shift there, and the 3.3v TX should be fine for a 5v logic input.


Thanks, yeah, I will try this - I followed a design for a c64-pc cable without considering that the Pi probably had serial port pins.


Awesome. It'e even native... not a hybrid web app built in Electron.


I think that's brilliant. Well done, Jeff! Sure, it's probably not useful. Neither is the painting on my wall, but I'm glad someone made it!


See also: twitch.tv chat running on a SNES, injected via an ACE exploit in pokemon red.

http://arstechnica.com/gaming/2015/01/pokemon-plays-twitch-h...


Does it have to be used with a Raspberry Pi? If you have a Wifi Modem for C64, would the Slack client still work?


You would need to replace the rs232 code with code to talk to the Wifi modem. You would need to deal with websocket handling and JSON parsing.

Doable, for sure, but would be significant work (depending on the richness of the API provided by wifi modem)


Virtual hi5! Vic-20 and C64 were my first intros to computers


I've always loved reading about weird C64 hacks, but this is the first one that has me seriously considering digging the old 64 out of the basement.


How am I going to display emojis on my Commodore 64?


Well, the C64 screen resolution is 320 x 200, so you should be able to do some awesome full screen emoji :)


Standard sprite size on the C64 in high res mode is 8x8, and you can't use more than two colours within that space, should be serviceable.


C64 sprites are 24x21 pixels in 1-bit monocolor (foreground color + transparent), or wide-pixel 12x21 2-bit multicolor (3 colors + transparent).


Character size, not sprite size. Sprites are bigger, but you can (officially) only have 8 on screen at once. Clever scanline-timing tricks can increase that to a few dozen before flickering sets in, but still not enough for general use emoji.

Redefined characters would work, but they're limited to a total of 256 characters at a time, including the usual letters/numbers/punctuation. Still, 150 or so of the most popular emoji would go a long way!


Sprites are 24x21, characters are 8x8 :)


Write into the character image data starting at $D000.


This is an awesome showcase for how all kinds of technology can be adapted and connected in new, unforeseen ways. Very inspiring, cool DIY project!


Does the C64 have TCP/IP capabilities?


The original version? Not even close. (:

TCP/IP was a thing when the C64 came out, but it was one of many competing networking standards, and it wasn't even the favorite to win.


Fascinating - what was favored to win at the time?


IPX and NetBIOS (which MSFT called NetBUI) were introduced after the C64 came out.

I would say DECnet phase IV or IBM's SNA were the biggest contenders, along with X.25.


IPX is a modification of the Xerox Network Systems (XNS). XNS is c. 1977 whereas the Commodore 64 was released in 1982. In the early 1980s, networking was such a young technology there was little commercial value in following standards. Even when you based your product on pre-existing technology (like Novell did), you changed it in incompatible ways.

I think if Commodore had wanted to do a LAN, they probably would have built something proprietary similar to Acorn's Econet, which also ran on 6502 systems.

But, I think the primary focus of Commodore was on the home market, and most people would only buy one microcomputer, and if they had two sharing floppies was sufficient as a LAN. Acorn by contrast was more focused on the education market, where the value of networking was much more obvious, and schools were willing to pay for it.


whatever happened to IPX


If I recall correctly, IPX and NetBUI? were the ones you saw most often back then


ipx maybe?



http://mos6581.com/pictures/commodore-64/fsf.jpg

It works surprisingly well, I've got it setup at the office.


No, but there is RR-Net, http://wiki.icomp.de/wiki/RR-Net/, Turbo Chameleon+, http://www.vesalia.de/e_chameleon.htm, and 64NIC+: http://www.go4retro.com/products/64nic/.

Thanks to the forethought of the Commodore's engineers who envisioned the Commodore64 as the center of the smart-connected home, or sound studio, or industrial controller, lots of ultramodern hardware has been designed for it. Hardware that wasn't even science fiction when the C=64 came out. And all because C=64 is infinitely programmable, with his user and expansion ports. Unbelievably versatile computer, even by today's standards.


It has (pretty bad) RS232 routines in ROM, which bit-bang across some of its GPIOs (of which there are 10 or so on the User Port).

Other than that, it has its serial peripheral bus, used mostly for printers & disk drives. There were also device sharing & custom networking hubs which sit on that bus.

The ROMs supported a notion of general byte streams and could do simple redirection. It had that stream support for tape, keyboard, screen, RS232, and "device on the serial bus" built-in. Obviously, newer 3rd party hardware can support Wifi/Ethernet in various forms, and software can drive IP over existing links (like SLIP over RS232 adapters).

Oh, it also had a few hardware serial shift lines intended for the serial peripheral bus, but those never got used for that purpose (until the C128) and mostly sit unused.


As a C64 owner/user from back in the day...this is fucking awesome. Kudos to the creator.


Eagerly waiting for the Microsoft Teams port..

Because this company here tries very hard to find ways to rely on every Microsoft product in existence and deprecated the (then 3 weeks old) Slack server as soon as Microsoft Teams was announced.


Why not just use the raspberry pi's UART and the C64's com port?


I think you'd still need a level shifter to go between the C64's 5V logic and the Pi's 3.3V logic.


For anyone who wants to try this 75lvc245.


Complete with Gateway "2000" monitor


This is great


I love it!


The silly thing is that the Raspberry Pi that is used to implement this, is actually a far more powerful computer than the C64 to begin with.


If the point was th be sensible, this project wouldn't exist in the first place.


Haha, you are right, of course! Obviously its just a fun project, I had an un-used RaspPi lying around and started hacking around getting it to talk to the C64 and then this project just sort of happened :)


I think the title is misleading. It's really a Slack client for the Raspberry Pi that you control using a C64.


You're right in that the RasPi does the outbound connectivity and exposes a rpc stream that the C64 can interact with more easily than JSON, but thats all. The interactivity is driven by the C64, and honestly 99% of the effort went into the C64 6502 assembly code, not the NodeJS proxy.


Still, it's extremely cool to see Slack being usable from a C64.


Should have just stuck with IRC :(


Except many companies (presumably including Jeff Harris') use Slack. This allows him to Slack on his machine and not create some new mandate at his work or with his clients just to message people.

I think this is fabulous ingenuity, useful fun, and the eccentricity doesn't rock any boats along the way.


Slack IS IRC... just with new clothes on. :)


Not even close. Slack regularly screws up text, harfs on things, and does generally not-IRC things. Overall Slack's interface is terrible and does not seem to have been tested by anyone who has regularly used chat interfaces in the past.


And it's a close-walled garden, not anything like what the internet elders envisaged. IRC is a protocol. Slack is a product. AFAIK, you can't spin up your own slack service and run your own private slack (happy to be corrected)


You're right. We were looking for an internal chat solution for our company. Currently we use IRC, but it would be nice to have an offline mechanism so we don't need to run IRC bouncers or CLI clients on our servers to receive messages when we're not in the office. We considered Slack, but decided it was too risky to host our internal communications on someone else's service. I'm waiting for the day Slack has a huge data breach.

We're currently considering adding some sort of backscroll support to IRC (maybe automatically setting up proxies for users), or installing Rocket Chat or HipChat on a local server.


Mattermost might fit the bill. I haven't used it, personally.

https://www.mattermost.org/features/


For those who haven't tried it, here's a video of how Eclipse Foundation uses Mattermost as an open source, self-hosted Slack-alternative: https://www.youtube.com/watch?v=dfeNFJnCfcg

While there's not yet C64 support, Mattermost connects to IRC, Slack, Gitter, Discord, Telegram and HipChat using Matterbridge (https://github.com/42wim/matterbridge).

In terms of features, the Mattermost community has added quite a few that aren't available in Slack--markdown support, multi-team accounts, threaded messaging, etc.: https://www.mattermost.org/what-slack-might-learn-from-its-o...

Mattermost deploys as a single Linux binary with MySQL or Postgres and you control everything.


One issue we had with Mattermost is that some authentication modules (e.g. OAuth) are not part of the free core. Rocket Chat does not have this issue, though the mobile app is a bit less polished.


Hi, we agree, and that's why we are about to launch brand new native apps for iOS and Android. Let me know if you'd like to join the beta testers.


Yes, with pleasure!


I haven't setup a matrix.org server (yet), but it's looking like a good next gen IRC with good bridges into IRC and other chat services.


Slack is a program created 13 years into the 21st century that does not understand either hyperlinks or WYSIWYG.

It's boggling.


The web doesn't handle WYSIWYG formatting.


Of course it does, if a programmer bothers to take the time to add it.

Slack is a glorified instant message service, and instant message clients have been handling WYSIWYG for a couple of decades now.


So you think it's fine for me to type out a nicely formatted wall of text on a desktop that mobile users have to scroll to read?


I'm thinking of the handful of formatting that Slack already supports, but only via weird markup. Text entry apps have been using Ctrl-I for italics for at least 25 years. I shouldn't have to remember whether this retrograde webapp expects me to wrap italicized text in underscores, asterisks, or slashes.

This kind of thing can also be annoying in sites like Hacker News--e.g. when I try to use an actual asterisk a couple of times and the damn thing italicizes a big random chunk of my post instead--but HN at least has the excuse of a consciously minimal interface. Slack coats itself in slick, modern UI but makes you type emphasis like it was Usenet. It shoves giant obtrusive thumbnails into the chat every time someone posts a URL, but doesn't let you make an actual hyperlink. It's minimal where it should be complex, and complex where it should be minimal.


[flagged]


my question was serious, i don't see why i should get down vote for this. i'm actually curious to understand what's the reason to build this. it may be fun, but once it's built you trow it away. it's like baking a cake and don't eat it.


as the author of this project, let me explain...

Ahem....

Well there is no good reason. I guess I was curious to see if something that I use every day, like Slack, could be interacted with through the C64. Figuring out a wire format for a list of channels, then parsing that out into channel names + ids and rendering a scrolling list of channels in 6502 assembly is challenging. Its frustrating. It was fun!

More generally, creating something 'just because' is so rewarding.

Learning, practicing and honing my chosen craft doing something creative is enjoyable. There is always something new to learn and half a dozen projects in my head I want to work on if only I could find the time. Why do some people spend hours painting, carving, or making model ships? Same reason I made this :)

Hope that helps!


Yep, that's fine i got your point and I can understand it.


You don't have to eat the cake to sharpen your baking skills.


this :)


If you are a programmer and you are serious in asking this question I'd suggest reevaluating your career.

I've hired many developers over the years and seeing a project like this would make me hire you in an instant!


that's for sure, i mean, project is cool, no dubt and this shows that the man has willinges to learn and to things just for the sake of learning something.


Well, most of the work is done on the Raspberry Pi.


To echo others, the start of a great hack.




Consider applying for YC's W25 batch! Applications are open till Nov 12.

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

Search: