Yakyak: Electron Chat Client for Google Hangouts
github.com
github.com
That caused so many arguments between me and a former girlfriend.
That's because it's not hangouts, it's gchat.
From the perspective of google, they should have done this 3 years ago. The chrome hangouts plugin is an atrocity. But at this point I've already fully abandoned google hangouts except for video chats at work. Too little, too late.
Chrome Plugins/Apps:
- Cmd-tab doesn't work properly with apps. It will bring up my browser window instead.
- My browser has to be open. Chrome has a large battery impact even when just sitting there. I often completely close Chrome when roaming. YakYak barely even registers
Pidgin/Adium:
- You don't see missed messages from when you weren't logged in. I used to get in lots of fights with my girlfriend because of missed messages.
- Can't paste images/screenshots from the clipboard. Maybe Pidgin supported this? Adium doesn't.
- History isn't shared between multiple computers (chat history on home PC isn't available on work PC)
YakYak solves all of those problems for me. I am thrilled YakYak exists. Huge thanks to the author.
Basically implements full hangouts into pidgin (connects to hangouts over "hangups" protocol rather than xmpp).
It still has some minor issues. from finch (ncurses pidgin) for example, it makes links that send people to a blank page with some hangouts.google.com/ proxy stuff going on that never gets followed. it also has weird issues with instantly marking some conversations as read. Otherwise I've been viewing it as an inplace upgrade for using xmpp on pidgin.
try Cmd-`
— ... ("have you been in the zoo?") — ... ("yes, I saw a yak!") — І як як? ("so how was the yak?") — Як як як. ("Like a yak")
Yes, the app is built using web technologies and uses Electron, but AFAIS it's a fully fledged client, not just a wrapper around a website. The interface is built right there with CoffeeScript and LESS, and there is a Hangouts JS library which they use.
I'm not a big fan of using HTML/JS/CSS for everything myself, but this project looks really complete and well built. If it was built with C++ and Qt someone would come and say "why didn't you use Gtk? or <framework X>?".
Keep up the good work.
Right. It's a chromium window wrapped around some HTML and JS, aka a website.
> AFAIS it's a fully fledged client, not just a wrapper around a website.
Nope, just a wrapper. True, it's a local webpage served on your desktop they wrote themselves, but it still has all the disadvantages that you incur when your client is just a web page in a browser.
> If it was built with C++ and Qt someone would come and say "why didn't you use Gtk?
Electron has enormous drawbacks which C++ and Qt do not have.
Nope, its still a fully fledged client, because being a capable client is not /that/ dependant on the UI rendering method, believe it or not.
> but it still has all the disadvantages that you incur when your client is just a web page in a browser.
No? Do you think electron exposes absolutely nothing? There is code being executed with access to the rest of your computer, this has the same access as any other language to the rest of your computer, I mean, hell even if you wanna do something weird, you could write some stuff in C (or use the pythonesque ctypes module), and then run that in turn, once again with access to the rest of your computer.
I could understand these complaints if this was an important critical thing, but its a chat client, its only job is to display text nicely with formatting, browsers are pretty good at that
This is something that continually amazes me. Many developers seem to think that "display text on a screen" is easy, it's not.
Browsers can handle multiple fonts, multiple sizes, and crazy positioning.
Browsers can handle tons of different encodings (including stuff like UTF8 which can be a real pain to safely and correctly parse).
Browsers can display just about every single glyph on the planet without a sweat.
Browsers can handle right-to-left text right alongside left-to-right text (even switching in the same sentence!).
Browsers have a simple way to apply multiple fallback fonts (just in case your font of choice doesn't have the unicode 'HEXAGRAM FOR DIFFICULTY AT THE BEGINNING', it can fallback to a font that does).
Browser can apply simple CSS transformations to rotate text (even in 3D!) in a pretty performant way.
Browsers handle all of this, without the developer needing to spend more than 5 minutes even thinking about it, and it does so looking great.
Yeah, other UI libraries can handle most of this just fine as well, but the browser is the one platform that i've been impressed at just how well it handles typography in general. I remember how much of a fight it was to write text that went vertical to label a graph in business basic...
That's part of the problem. Electron apps are unavoidably heavy - huge binaries and 250MB-300MB+ memory consumed regardless of the task at hand. A simple "hello world" in electron without an ounce of JS or CSS will exhibit these traits.
Chat is a very simple sort of application. We've been doing it for decades now and have had functionality that approaches that of hangouts that works perfectly on machines with tens and hundreds of times less power and resources available. There's barely an excuse for such a program to consume more than 50MB of RAM, let alone 300MB+.
Some may argue that "unused RAM is wasted RAM," but I'd argue that this statement holds true only if the RAM that would be used is needed for actual functionality. If it's baseline requirement for the program to run at all, something is wrong unless the program is monstrous in nature (think AutoCAD, Maya, etc).
If you want to say this is worse than X (where X is some theoretical desktop hangouts client) because it uses too much RAM, then do so, and we can compare and contrast what that RAM usage gets us in this case, and what the trade off is.
If you just want to make a case that the RAM usage is too much for any chat, and if that's the baseline requirement for hangouts on the desktop because there are no other clients without those same problems (?), then you can propose a different protocol which doesn't have those restrictions.
If you aren't willing to do any of that, then all you're really doing is telling people not to use a technology because it uses a lot of RAM, on principle, regardless of whether it would be useful to them. I don't think that's a good stance to take.
You're probably right, but it's also no good to sweep the shortcomings of a technology under the rug and forget about them. With Electron and similar web-wrapper technologies becoming more popular, these issues should be put out in the spotlight and consistently pointed out so that they might be addressed. Brushing them aside is a disservice to everyone, developers using Electron included.
All that's really just a long way of saying, maybe the developer decided that using this system accelerated their development enough that it was worth it. It's up to the users to choose to use the program, and if they find the drawbacks of the developer's choices to be not worth it, then they can choose something else (if it exists). If nothing else exists, then maybe the reason the capability exists at this point in the first place is because of those developer choices, in which case it's hard to fault them.
I tend to agree that Electron apps are heavy but it seems like there are ways to make it small like this one.
So 'a website', to you, is anything using HTML and JS? Because a local HTML+JS app removed what is, to me, the second biggest weakness of "the cloud", namely the dependence on an internet connection and some third party server.
OK, OK, this is a chat server so it won't work without a connection anyway but you get my point.
That doesn't matter. It still can act like a native application (because it is a native application). All code is sourced and run locally, and doesn't require you to interface with it though a separate program (as that's bundled right in with it). If that's not native, neither is an application written in Perl or Python (they run through an interpreter), or Java for that matter (it's run through the JVM).
Do you complain about Steam, GOG, or one of the other 1000 apps that use Qt or what ever GUI kit and then just use an embedded browser for 90% of the app?
Steam uses a web widget for the store, but the entirety of Steam isn't built in HTML/JS. It makes sense to do it that way.
If steam was entirely written in a web language you would never have the platform support that you currently have, the ability to download at the speeds that you currently have, etc.
It uses electron (http://electron.atom.io/) which uses nodejs+chromium.
BrowserWindow = require('electron').BrowserWindow
.
.
.
mainWindow = new BrowserWindow {
width: 730
height: 590
icon: path.join __dirname, 'icons', 'icon.png'
show: true
titleBarStyle: 'hidden-inset' if process.platform is 'darwin'
}
in https://github.com/yakyak/yakyak/blob/master/src/main.coffeeAlthough i do prefer to reuse the current running browser.
The problem with the Chrome App is that you still need to have Chrome running which on OS X means the Chrome dock icon, and any other downsides of having a running Chrome process (e.g. battery life impact).
Its multi-protocol and based on Electron. Not opensource from what I know.
I ended up making an electron gtk3 build script for the few apps I prefer to use that choose to go the electron route: https://github.com/nikolowry/electron-gtk3
Now, when we have libui-node [0], which is a Node.js wrapper around libui [1], developers, you have no excuses!
> It is in early stage of development
> OSX should work too, but it's not tested.
> Windows has yet to be configured in build scripts, but it will be supported in further releases.
> There are very few tests developed
> This is not yet battle-tested in a real app
All that from the official Readme [0] and you're saying there's no reason not to use it?
Electron uses gigabytes of RAM - it's the one reason I switched to weechat from Slack's "desktop" client!
Such "desktop" apps are a disgrace and they run way more efficiently in the browser compared to having multiple copies of browsers running in parallel.
Google's Android app has much better performance than Facebook's. (Particularly in terms of battery life. Not sure about iOS.)
IRC and XMPP are both a pain to set up. (I would love to be wrong about this. I'd run my own server if if you can find me dead-simple clients for enough platforms.)
SMS and MMS work well for phones but not for PCs.
AIM, MSN, and Yahoo, last I checked, work well for PCs but not phones. (Not sure if they still work well for PCs, pretty sure they haven't started working well for phones.)
Setting up a server is not terribly difficult though. I bet there are some simple container solutions.
With hangouts, if someone has a google account, there isn't much else to setup which makes things much easier for non-technical friends & family.
Hangouts has other benefits:
- All users support the same call/video features
- Using GCM means that battery life is better than with long polling, in my experience
- Integration with Google Voice means you can add phone users to your video call
- Sending images is built in
- Single chat history that's synchronized[1]
- Works on Linux, Windows, macOS, Android and IOS with the standard clients[2]
I've setup an XMPP server before and it wasn't that hard. I have friends/family using Hangouts and Signal messenger. Hangouts provides a pretty smooth experience and is my generally preferred way to initiate a video call with my family who runs a variety of platforms (Andriod, iOS, Windows, macOS, etc)
[1] Of course this is possible because of Google being the hub with is the grandparent's concern
[2] XMPP also has this but some chat solutions are not as widely available. Of course the web app will work anywhere you can run a modern browser. I'm thinking of the official Chrome extension and I don't know if it works in BSD or other OS's.
I'll set up the server, I'll put time and money into it, but it needs to be a one-step process to add each of my friends or it won't work.