Group Messaging: Huh?

February 24, 2012

Shit, I took 2-3 months to write this blog post. Since then I’ve done a handful of techy things worth blogging about.

Recently, I’ve seen surrounded by a swarm of messaging confusion, especially with the release of iOS 5. I’ve been so accustomed to traditional SMS, which costs nothing to network carriers, and has limitations expected of a 20-year-old technology. Sprint doesn’t offer tiered texting, and is free/required with a data plan (thus no need for text-over-data workarounds)

iOS5 introduced a new concept called iMessage. Apple knows whether or not the user on the other end is using an iOS device. If he/she is using an iOS device, the input field will show “iMessage” in a light shade. If not, it will show “Text Message” (or possibly other things I have not seen, as I cannot test this myself)

If the message is sent over iMessage, it is sent over data through Apple servers, bypassing the carrier. Most people pay for enough data to field this; these messages don’t take up much bandwidth anyways. However, it is arguable that one with an unlimited SMS/MMS plan may prefer to send messages through that channel instead of iMessage over a limited data plan. Generally this is not the case, because iMessage should not use enough data for you to even care.

I hate SMS. It’s limited to 160 characters, doesn’t support Unicode, takes up to 30 seconds for end-to-end transmission when working properly, and the carriers charge you for it when it costs them nothing (it’s carried inside a field of the packet that’s sent from your phone every so often anyhow.)

I also hate MMS. It requires you to be on 3G so if your smartphone is connected to WiFi, it usually falls back to 3G to receive the MMS, but I have seen cases where it doesn’t. And if you are in an area with good WiFi and no 3G, you’re SOL. I also use Google Voice full-time, which does not work with MMS (and does not return an error message if someone tries to send my GV number a MMS…)

I am a fan of third-party messaging apps like WhatsApp and KakaoTalk, for various reasons. These apps popularized the concept of device push messaging over data, long before Apple integrated it into their iOS. And that’s why iMessage is so popular.. it’s integrated into the OS. It’d be interesting if Google implemented something similar in Android, after all of the copying/stealing Apple has done.

iOS5 also introduced a concept called “Group Message”. This confused the shit out of me at first because of iMessage. At first I thought Group Message was just an iPhone/iMessage circlejerk. But I noticed that when this circlejerk included an Android phone (or, to be specific, a non-iOS5 phone) that some strange behavior happened.

The non-iOS5 phone received the messages as MMS. This made less sense to me. If an iPhone user sends a message to three other people – 2 iOS and 1 non-iOS, I thought 2 of those messages would be delivered over iMessage and the third over SMS. But that was not the case.. The last one was over MMS.

This is because MMS “extends” SMS capability by a bit. It is a completely different type of message, but it supports long messages, (obviously) media, and the recipient list is sent in the message. This is how phones recognize that a group conversation is happening: threading multiple MMS messages with the same group of recipients.

Now we have another problem. A phone can read that a MMS was sent to multiple recipients, but

  1. it usually doesn’t do anything to show the user that it happened.
  2. when a reply is composed, it may address it only to the original sender, via SMS, which breaks the chain.

The recipient data is in the MMS message, but dumbphones and many smartphones seem to ignore it. The native Messaging app for Android (as of 2.3, Gingerbread) ignores it. Handcent for Android recognizes it, but sends replies as SMS unless you attach a dummy image which would make it MMS/work “properly”.

My coworker looked into this issue for a while as he uses an Android phone and communicates with some iPhone users. For Verizon, there is an app called “Verizon Messages” which behaves properly with “Group MMS” threads when it sees them. I have yet to find solutions on other platforms, but I haven’t really searched.

Nitpicks: TweetCaster Pro for Android

November 2, 2011

I used the official Twitter for Android when I got my first Android device in February. A few months later, Amazon released TweetCaster Pro for free as its Free App Of The Day promotion.

I tried it, and liked having a “Jump to top” button (that is SOOO useful), and image previews. I use it very often, sometimes way more than others. Doing so, I found a few things that I’d like to see fixed.

Previews work.. but only in Timeline mode, or on someone’s profile page. If I stumble over the same tweet through Mentions or Thread, nothing will preview. Also, application handlers fail in a similar fashion. I use TweetCaster Pro to read TwitLonger links, as well as images from twitpic/yfrog/etc. It really cuts down on the time needed to access the desired content, by avoiding launching the browser and loading the bloat.

Similarly, a YouTube link will properly launch into the Android YouTube app, but not if I click the link through Mentions or Thread.

I’m not reproducing this behavior at the moment; this is all coming from my memory, so I might be slightly off, but the issue is definitely there.

There has been a rising frequency, over the past month or two, of connection errors while loading tweets or threads. I don’t know if this is a TweetCaster problem or Twitter API issue, but it has happened to me on various Wi-Fi, 3G, and 4G networks.

I’m a location whore, so I enjoy adding my current coordinates to my tweet (as long as it’s not exposing private information — generally the location of my home.) However, when I enable it with TweetCaster, it doesn’t tell me if it successfully obtained a position or not, so I have no idea if it got added, and I don’t know how long to wait. An even nicer feature would be to show me a preview of the detected location, to make sure I didn’t end up with something absurd from Wi-Fi geocaching.

I miss being able to open one tweet. Sometimes I want to show a tweet to a friend, but I have to show them a timeline of tweets and say “look at this one” or cover the others with my hand.

Someday there will be an API to see replies to the currently viewed tweet. AFAIK only the web twitter client (including m.twitter.com) supports this.

Overall, I love TweetCaster Pro, it has tons of features, support for a bunch of features that I don’t use, and options to customize things just the way you want it.

Edit: I like how a release came a few days after, which allowed seeing replies to a tweet.

Connecting a HDMI laptop/computer to a DVI monitor

September 17, 2011

Most of my “HDMI-DVI” adapters are female HDMI to male DVI. They’re intended to convert a DVI port on a PC to a HDMI port, allowing you to connect your HDMI monitor to “DVI” on the PC. However, what I wanted to do was a little bit backwards.

I wanted to connect a HDMI laptop/computer (common output, nowadays) to a monitor without HDMI, but with DVI. I knew that with a standard $1 male-male HDMI cable, I could connect the computer to the adapter. However, the other end of the adapter has pins for DVI-I dual link, but the monitor’s female end shows DVI-D dual link.

I looked at the pins on Wikipedia and deemed the side pins a bit unnecessary (“don’t care”), as they were for analog communication. I pulled the 4 square pins (C1-C5), but the plug still wouldn’t fit. I realized that the flat connector (C5) was a bit longer on the converter than the DVI cable I was using; I saw that it was analog as well, and pulled it out. and then it worked! I was able to hack my $2 HDMI-DVI adapter to work not as intended, given a few minutes of research and understanding. Of course, one could buy the correct converter from Monoprice, but shipping costs tend to be too much for one item, and sometimes you need a hack in the moment, instead of waiting a few days for shipping.

A year ago, I understood DVI-D vs DVI-I on video cards and how the DVI connector on video cards supported extra pins for analog input, and could be used with VGA monitors given a cheap, passive DVI-VGA converter found with every video card nowadays. Now I understand it just a bit more.

Why I can’t use WebOS

September 8, 2011

I’ve used it for 2 years since obtaining my Palm Pre. In general, there is not too much available on WebOS compared to Android, and development to fix that is very slow.

I moved to an Android phone 7 months ago after being fed up with the lack of Google Voice integration, and Sprint ironically released their integration with Google Voice a month later. I also recently obtained a TouchPad since it was $100, even though I did not need a tablet whatsoever (I’m a phone + netbook + desktop kinda guy; no tablets or laptops.)

My list was scrambled not too long ago, so it’s probably missing things, but without further ado..

TouchPad severe:

  • Maps – Bing…
  • No camera app WTF!
  • No GPS (TouchPad only), so no navigation

WebOS severe:

  • No real input method support
  • No widgets
  • No polished Twitter app; a few have existed here and there but no outstanding ones
  • No application handlers!
  • Email – replies are made with a weird font, makes me not want to use it altogether
  • The obvious – limited app selection. I’m sick of no Google Voice, no Google Reader, no VNC client, weak terminal/ssh clients, etc.

TouchPad mehs:

  • Kinda slow at stock 1.2GHz, fine with 1.5 UberKernel
  • YouTube is not native. They want you to just use the YouTube webpage, which isn’t exactly bad, but isn’t good at all. You try to do desktop-style mouseover to fullscreen or change volume, and it doesn’t work well on the TouchPad. Also, videos have trouble playing at higher resolutions.

WebOS mehs:

  • No last.fm scrobbler. Must use music player with integrated scrobbling

WebOS awesome:

  • Card view
  • Best developer community yet worst app selection
  • Homebrew FTW (also FTL, we live in an era where everything should just work)

Since it’s 2011, everyone expects their technology to just work, and for some reason they all think that you should never have to wait for anything. While this is a somewhat reasonable expectation, they shouldn’t be surprised when it doesn’t perform “like a Mac” or “like an iPad”… that is, a device that can’t really do anything, but does it (fairly) well.

Thunderbird 5 GUI slowdown

August 12, 2011

I recently upgraded Thunderbird from 3 to 5. The graphical interface has a bit of a redesign, but it is horribly slow and unusable. Sad, because speed is the reason that I choose Thunderbird.

After googling for a bit, I found people messing with gfx settings so I decided to try. A few combinations of things didn’t work, and I eventually found something that did work.

So here’s my (non-default) option settings:
layers.prefer-opengl=true
layers.acceleration.disabled=true
gfx.direct2d.disabled=true
I bet one of those isn’t necessary.

It’s fairly snappy again!

Multiboot FreeBSD

July 12, 2011

I have a FAT32 partition with my GRUB, stages, menu.lst, etc. and I have two installs of FreeBSD on their own primary partitions afterwards. Ideally, I would just chainload each partition, and the first boot sector on the partition would handle booting the operating system on that partition. But FreeBSD (and Solaris) are a bit different.

FreeBSD makes it simple enough. All you need to do is root to the first subpartition of the FreeBSD partition and call boot kernel /boot/loader.

However, GRUB needs to be able to read UFS2 in order to load /boot/loader from that UFS2 filesystem, otherwise partition type 0xa5 will be “unknown”. I updated GRUB on the FAT32 partition to support UFS2 stage1.5, among some other strange filesystem types.

I then reinstalled the FAT32 copy of GRUB to the MBR with the usual install (hd0,0)/boot/grub/stage1 (hd0) (hd0,0)/boot/grub/stage2 p (hd0,0)/boot/grub/menu.lst, and voila, the MBR/booted GRUB could read UFS2.

Here’s a sample of my finished menu.lst:
[root@saratoga16a ~]# cat /mnt/fat32/boot/grub/menu.lst
default 0
timeout 8
title FreeBSD 7.4 i386
    root (hd0,1a)
    kernel /boot/loader
title FreeBSD 7.4 amd64
    root (hd0,2a)
    kernel /boot/loader
title Windows
    root (hd0,0)
    makeactive
    chainloader +1
[root@saratoga16a ~]#

Resizing a VirtualBox disk image

July 6, 2011

I won’t go into huge details, but it was pretty straightforward, with some systems experience, and (surprisingly) I did not hit a bunch of errors on the way.

I made the mistake of making an 8GB (default?) fixed image size, and now I made it a 50GB variable image size (the guest OS thinks it has 50GB, but it only uses as much real space as it needs)

  1. Create a new disk under the SATA controller
  2. Boot into a live Linux, like GParted
  3. dd if=/dev/sda of=/dev/sdb (add bs to improve performance!)
  4. Open GParted and extend /dev/sdb to your desired size
  5. Mount your new partition, fix any /etc/fstab-related items as necessary
  6. poweroff, remove the old disk from the virtual SATA controller, power on

i2c

February 24, 2011

Black goes to pin 1
White goes to pin 3

I keep forgetting.

tty settings for serial trace

January 26, 2011

# stty < /dev/ttyUSB0
speed 115200 baud; line = 0;
min = 1; time = 5;
ignbrk -brkint -icrnl -imaxbel
-opost -onlcr
-isig -icanon -iexten -echo -echoe -echok -echoctl -echoke

To get these settings, run the following:
# stty 115200 -ignbrk -brkint -icrnl -imaxbel -opost -onlcr -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke time 5 min 1 < /dev/ttyUSB0

Replace /dev/ttyUSB0 with the device of choice. I only know that 115200 is the baud rate, and everything else is uncertain to me. They are simple concepts, but I haven’t bothered to figure them out, and I’ll bet that a lot of them are unnecessary.

RHEL/SLES default routes with multiple network interfaces (DHCP)

November 4, 2010

Most enterprise NICs nowadays come with 2 ports… including the one that my company makes. On our test systems, we use 1 port on the onboard/Intel NIC for the test system to stay connected to the world, while the other NIC may be on/off/unstable depending on the test.

We prefer DHCP by default for all IPs, and the onboard NIC to use eth[01] while our test/development NIC uses eth[23]. All DHCP transactions provide a gateway address.

However, different operating systems have different behavior when determining which route to set up as default, when there are multiple interfaces. RHEL tends to use the last activated interface. SLES seems to use the first one, BUT on our older set of chassis, the DHCP transaction for our onboard NIC (with the desired default route) doesn’t complete “in a timely manner” (40 seconds), gets backgrounded, and the network configurator uses the next “working interface” for its default gateway.

For RHEL, we simply specify GATEWAYDEV=eth0 in /etc/sysconfig/network and that solved our issues, in a simple manner, while letting us keep DHCP. No DEFROUTE= in each /etc/sysconfig/network-scripts/ifcfg-eth* file or anything.

Unfortunately, such a simple solution doesn’t apply to SLES. For SLES 10, I set WAIT_FOR_INTERFACES="60" and added the “slow” NIC to MANDATORY_INTERFACES, both in /etc/sysconfig/network/config. (I also set FIREWALL="no" for good measure, but that is likely irrelevant.) Enabling DEBUG in ./config and ./dhcp didn’t seem to help at all. For SLES 11, I do the same thing, though the style of entry in MANDATORY_INTERFACES is a bit different, and it doesn’t really … seem to work well.

At the end of the day, spanning tree on the switch was causing link negotiation to take like 30 seconds or something, which is why we saw the DHCPDISCOVER coming down the OS stack but not out the wire until 30+ seconds later. It really shouldn’t, and this is a hacked out solution, but meh…


Follow

Get every new post delivered to your Inbox.