Sunday, October 28, 2007

PartyChat is growing up

PartyChat has thus far used Google Talk accounts for its bots, since that was easiest from a maintenance perspective (no separate Jabber server to run). However, we are now running into rate-limiting issues with GoogleTalk, so the time has come for us to run our own Jabber server. We've now bought the partych.at domain, and have set up these bots:

partychat@partych.at
partychat0@partych.at
partychat1@partych.at
partychat2@partych.at
partychat3@partych.at
partychat4@partych.at
partychat5@partych.at
partychat6@partych.at
partychat7@partych.at
partychat8@partych.at
partychat9@partych.at


You can use any of these bots with our regular instructions. Eventually there will be a migration plan from the @gmail.com bots, hopefully in as transparent as way as possible.

And if you were curious just what usage level we're up that rate limiting is being triggered, here are some stats:

Total party chats: 846
Party chats active in the past week: 247
Average subscribers per chat: 2.39
Most subscribers in a chat: 35

Total subscribers: 2020
Subscribers active in the past week: 741

Sunday, October 07, 2007

Today's issues...

As a lot of you are probably seeing, PartyChat has been very flakey today. I'm still trying to figure out what's happening, so if any of you are smack experts, I could appreciate the help.

The previously running process starts reporting:
[java] Found invalid presence mode
Upon restarting, it outputs:
[java] Trouble connecting to Google Talk
and on a few occasions:
[java] Trouble connecting to Google Talk
[java] java.net.SocketException: Broken pipe
[java] at java.net.SocketOutputStream.socketWrite0(Native Method)
[java] at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
[java] at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
[java] at sun.nio.cs.StreamEncoder$CharsetSE.writeBytes(StreamEncoder.java:336)
[java] at sun.nio.cs.StreamEncoder$CharsetSE.implFlushBuffer(StreamEncoder.java:404)
[java] at sun.nio.cs.StreamEncoder$CharsetSE.implFlush(StreamEncoder.java:408)
[java] at sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:152)
[java] at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:213)
[java] at java.io.BufferedWriter.flush(BufferedWriter.java:236)
[java] at org.jivesoftware.smack.PacketWriter.writePackets(PacketWriter.java:274)
[java] at org.jivesoftware.smack.PacketWriter.access$000(PacketWriter.java:40)
[java] at org.jivesoftware.smack.PacketWriter$1.run(PacketWriter.java:87)
[java] java.net.SocketException: Connection reset
[java] at java.net.SocketInputStream.read(SocketInputStream.java:168)
[java] at sun.nio.cs.StreamDecoder$CharsetSD.readBytes(StreamDecoder.java:411)
[java] at sun.nio.cs.StreamDecoder$CharsetSD.implRead(StreamDecoder.java:453)
[java] at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:183)
[java] at java.io.InputStreamReader.read(InputStreamReader.java:167)
[java] at java.io.BufferedReader.fill(BufferedReader.java:136)
[java] at java.io.BufferedReader.read1(BufferedReader.java:187)
[java] at java.io.BufferedReader.read(BufferedReader.java:261)
[java] at org.xmlpull.mxp1.MXParser.fillBuf(MXParser.java:2971)
[java] at org.xmlpull.mxp1.MXParser.more(MXParser.java:3025)
[java] at org.xmlpull.mxp1.MXParser.nextImpl(MXParser.java:1144)
[java] at org.xmlpull.mxp1.MXParser.next(MXParser.java:1093)
[java] at org.jivesoftware.smack.PacketReader.parsePackets(PacketReader.java:368)
[java] at org.jivesoftware.smack.PacketReader.access$000(PacketReader.java:44)
[java] at org.jivesoftware.smack.PacketReader$1.run(PacketReader.java:76)
or
[java] java.net.SocketException: Socket closed
[java] at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:99)
[java] at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
[java] at sun.nio.cs.StreamEncoder$CharsetSE.writeBytes(StreamEncoder.java:336)
[java] at sun.nio.cs.StreamEncoder$CharsetSE.implFlushBuffer(StreamEncoder.java:404)
[java] at sun.nio.cs.StreamEncoder$CharsetSE.implFlush(StreamEncoder.java:408)
[java] at sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:152)
[java] at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:213)
[java] at java.io.BufferedWriter.flush(BufferedWriter.java:236)
[java] at org.jivesoftware.smack.PacketWriter.writePackets(PacketWriter.java:274)
[java] at org.jivesoftware.smack.PacketWriter.access$000(PacketWriter.java:40)
[java] at org.jivesoftware.smack.PacketWriter$1.run(PacketWriter.java:87)
[java] javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
[java] at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:739)
[java] at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1025)
[java] at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1038)
[java] at org.jivesoftware.smack.XMPPConnection.proceedTLSReceived(XMPPConnection.java:1127)
[java] at org.jivesoftware.smack.PacketReader.parsePackets(PacketReader.java:313)
[java] at org.jivesoftware.smack.PacketReader.access$000(PacketReader.java:44)
[java] at org.jivesoftware.smack.PacketReader$1.run(PacketReader.java:76)
[java] Caused by: java.io.EOFException: SSL peer shut down incorrectly
[java] at com.sun.net.ssl.internal.ssl.InputRecord.read(InputRecord.java:321)
[java] at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:720)
[java] ... 6 more
[java] java.net.SocketException: Connection closed by remote host
[java] at com.sun.net.ssl.internal.ssl.SSLSocketImpl.checkWrite(SSLSocketImpl.java:1168)
[java] at com.sun.net.ssl.internal.ssl.AppOutputStream.write(AppOutputStream.java:43)
[java] at sun.nio.cs.StreamEncoder$CharsetSE.writeBytes(StreamEncoder.java:336)
[java] at sun.nio.cs.StreamEncoder$CharsetSE.implFlushBuffer(StreamEncoder.java:404)
[java] at sun.nio.cs.StreamEncoder$CharsetSE.implFlush(StreamEncoder.java:408)
[java] at sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:152)
[java] at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:213)
[java] at java.io.BufferedWriter.flush(BufferedWriter.java:236)
[java] at org.jivesoftware.smack.PacketWriter.writePackets(PacketWriter.java:274)
[java] at org.jivesoftware.smack.PacketWriter.access$000(PacketWriter.java:40)
[java] at org.jivesoftware.smack.PacketWriter$1.run(PacketWriter.java:87)
[java] java.io.EOFException: no more data available - expected end tag to close start tag from line 1, parser stopped on END_TAG seen ...... @1:342
[java] at org.xmlpull.mxp1.MXParser.fillBuf(MXParser.java:3014)
[java] at org.xmlpull.mxp1.MXParser.more(MXParser.java:3025)
[java] at org.xmlpull.mxp1.MXParser.nextImpl(MXParser.java:1144)
[java] at org.xmlpull.mxp1.MXParser.next(MXParser.java:1093)
[java] at org.jivesoftware.smack.PacketReader.parsePackets(PacketReader.java:368)
[java] at org.jivesoftware.smack.PacketReader.access$000(PacketReader.java:44)
[java] at org.jivesoftware.smack.PacketReader$1.run(PacketReader.java:76)
While getting these errors, I was able to log partychat@ in to Google Talk via GMail Chat. Running PartyChat on other machines has a little more success, but not really -- half the accounts still die, but a few are able to connect.

Before I chalk this up to some sort of weird rate-limiting issue, I'm hoping someone can give me a more plausible explanation of what be happening. Any ideas?

Thursday, October 04, 2007

Using PartyChat, with pictures

Add partychat#@gmail.com as a contact (where '#' is any number from 0 to 9):





To start a new party chat, think of a partychat name and password and send them in a message:
/make mycoolgroup secretpassword



To invite your friends, give them the name and password.

To join an existing party chat, send this message:
/join mycoolgroup secretpassword



To leave a party chat (not that you'll ever want to), send this:
/leave



Generally you never want to /leave a partychat... that way you can continue receiving messages even after you've closed the window or logged out!