Significant LibreScribe Progress Made

As you may have noticed, I took a break from working on LibreScribe for a while, and the project looked as though it was abandoned. Well, it isn’t, and I’ve got tons of good news! Since the last time I wrote an update about LibreScribe, in late May, I made several incredibly significant changes. Some of these may not seem that exciting, but they are absolutely crucial in order to further develop the program. Some of these new features (such as retrieving and changing the name of the device) didn’t exist in libSmartpen at all, so implementing them required me to capture packets sent over USB and do a bit of reverse engineering. At first, I used the trial version of USBTrace, but I quickly realized that it wasn’t the tool for the job when I got notifications that I used more than my 256K data limit just by opening LiveScribe Desktop. To make it even less appealing, it costs $195 USD for a single license! That’s ridiculous! So of course, I did a bit of searching, and I found busdog, which does the same job (although using unsigned filter drivers that require modifying windows settings and rebooting several times) for free! Although getting it setup was significantly more frustrating than getting USBTrace working, it was well worth not paying $195, and it does everything I need it to, albeit without as nice of an interface. Anyways, here’s a list of significant changes I made:

  • LibreScribe no longer crashes when retrieving the list of applications installed on the device. This was incredibly frustrating when I was trying to develop it. It also filters out the LiveScribe Connect and System files, so that they are not listed if they are present on the device.
  • Instead of displaying a hard-coded list of notebooks, LibreScribe now retrieves the names of all of the notebooks actually in use on the device.
  • When a device is not present on the system, or LibreScribe can’t find it, the page tree now shows a “No Smartpen Detected” item, along with an brand new icon that indicates that no device is connected instead of the regular pen icon.
  • I added context menu event handlers to the page tree, so now when you right click or press the menu button, LibreScribe can display a menu of options relevant to the item you clicked. More work on this still needs to be done, but if you click the root element (the smartpen itself, or the placeholder when one isn’t connected), you will now see a new menu allowing you to rename the device, refresh the connection, or display information about the device.
  • When the device is unplugged or plugged in, the page tree and the applications/audio lists will now automatically refresh themselves.
  • LibreScribe now retrieves the name of the smartpen from the device, rather than defaulting to “My LiveScribe Smartpen”. It can also set the name of the pen, but this feature is still a little bit buggy (it won’t brick your device, so it’s safe to test). Interesting discovery: In the LiveScribe desktop software, you can set the name of the pen to anything up to 50 characters. This does not mean that the device doesn’t allow more than that, it’s just a ‘soft’ limit in the LiveScribe desktop software. There probably is an actual limit, but I was able to set the device name to almost a paragraph of text, including every symbol you can type on a standard US keyboard, and retrieving it from the pen worked perfectly. The pen stored the entire thing, and returned it when I checked the name, although it did not display the entire string when I turned the device on, just the first part of it. The string of text I tested was “~`!@#$%^&*()-_+={}[]:;”‘<>?/,.\ Testing the maximum name length for a LiveScribe Smartpen… I wonder if I could fit a paragraph in here…? You have got to be kidding me… I typed this much and it STILL works? That’s incredible. There’s virtually no limit to how long the smartpen’s name is. I can’t believe I can set and receive values this long! I’m speechless…“. Needless to say, you can store almost anything in the name of the Smartpen. I wonder how the LiveScribe desktop software would react if it tried to retrieve this string.
  • I added a dialog box to rename the device, as well as another dialog box to confirm the new name.
  • LiveScribe no longer crashes when removing or connecting a smartpen while the program is running.
  • I merged in the inline functions written by Luis Pedro Coelho on his fork of LibreScribe, which are a better implementation of device type checking than I had
  • Tons of new debugging output was added. You can see this output on the console. This makes figuring out what went wrong in a crash so much easier.

Remember, LibreScribe is still alpha quality and should not be used in a production environment. If you have any issues or suggestions, feel free to file a bug report. Or, if you’re skilled enough, I’d appreciate it if you fixed the bug yourself, and submitted a patch. Ah, the benefits of open source coding! This is only just the beginning. Expect tons of new enhancements and bug fixes over the next several months.

Justice Department Files Lawsuit to Block Takeover of T-Mobile

In case you didn’t hear, AT&T is in the process of attempting to acquire T-Mobile for $39 billion. Not only would this make AT&T the nation’s largest wireless carrier (controlling 43.3% of the wireless market), but it would also mean that more than 75% of the nation’s wireless customers would be on AT&T and Verizon Wireless. What this means is that the third largest carrier, Sprint, which I’m a customer of, would have less than a fourth of the nation’s wireless customers. This deal is extremely anti-competitive, and anti-consumer. With less carriers, and less choice, this would allow cellular providers to increase prices, decrease choices in phones, and reduce innovation. Just yesterday, the Justice Department filed a lawsuit to block the proposed deal. I strongly believe that there would be no benefits to consumers from this acquisition. All AT&T is doing is eliminating a major competitor. If you’re on T-Mobile, you probably realize that you have access to some of the cheapest prices available in the wireless industry, as well as decent coverage. If AT&T acquires T-Mobile, it’s fairly obvious that they will change the pricing scheme to match that of their own, allowing them to force consumers into paying a lot more for their wireless service. Service charges are already high as it is, with more carriers charging more money for lesser or equal amounts of features and unlimited data service disappearing in favor of a tiered pricing model, we simply can’t afford to lose a huge competitor to the major cellular carriers. I believe that everyone who owns a cellular phone in America will be, in some way, hurt by this deal. As consumers, we simply cannot allow AT&T to acquire T-Mobile. The only possible outcome is less competition, less choice in wireless devices, higher prices, and less jobs in the wireless industry.

via No Takeover Project

How To: Invite ALL of Your Facebook Friends to Google Plus At Once

Image representing Google as depicted in Crunc...

Image via CrunchBase

Using a neat little trick, I managed to send everyone on my Facebook friend list a Google+ invite. In this post, I’ll show you how to do that. It’s actually quite simple. If you don’t have a GMail account, this will still work for small amounts of contacts, but you need to use a GMail account to process and invite all of your contacts at once.  First, if you don’t already have a Yahoo account, sign up for one. Otherwise, sign in and go to Yahoo Mail. The reason this works is because Yahoo and Facebook have some kind of partnership. Once logged in, go to the “Contacts” tab. Click “Import Contacts”, and choose the “Facebook” option. Allow Yahoo access to your Facebook contacts. On my account, it only imported 100 contacts the first time. After the second try, I had all 257 of my Facebook contacts imported. Now that you have your contacts imported, go back to the “Contacts” tab. Click “Actions”, and choose “Export All…”. When asked, export as a “Yahoo! CSV” file, and remember where you saved that. You will need it later. Now go to Google Contacts. Create a new group called “Facebook”. Once you have a “Facebook” group, click the “Import” link on the upper right of the page. Select the Yahoo .csv file, and make sure to choose to import it into the newly created “Facebook” group. Now that you have all of your contacts imported, if you don’t have GMail, select all of your contacts and choose “Email”, otherwise go to GMail and login to that. In GMail, click “Contacts” and then click the “Facebook” group. Click the checkbox above the list of contacts to select them all at once. Now click the “Email” button. You will now see all of your contacts in the “To” field of GMail or your email client. Copy the entire list, and paste it into the Google+ invite form. Click invite. Congratulations, you just invited all of your Facebook friends to join Google+.

I Finally Snagged a Google Plus Invitation!

Unless you’ve been living under a rock, you’ve probably heard about Google’s new invitation only (for now) social network, Google+. If  not, I suggest you check out the site and take the tour. Google+ will likely forever change the way we interact with friends online, by grouping friends into social “circles” and sharing only certain material with certain groups of friends. In addition to that, another neat feature is “hangouts”, where you can have a group video chat with up to 10 different people. Regardless, today I managed to snag an invitation to the service by posting my email address on Beatweek’s Facebook wall. Less than 5 minutes after posting my email, I had an invitation sitting in my inbox from Bill Palmer. Shortly after that, I even got a second invitation to the service from the same person. Unfortunately, because Google wants to limit how many people are on their service, even with an invitation, I couldn’t sign up for the service yet, but I’ll definitely be checking the Google Plus website frequently to see if I can get in. I’m incredibly excited to try out this new service from Google, and I have incredibly high expectations from it. Anyways, if I do manage to get in, I’ll be happy to invite anyone who requests an invitation from me. I’ll update this post (or post another post) once I get into Google+.

UPDATE: I got a second invitation by Richi Jennings of Computerworld, who I emailed before posting on Beatweek’s wall, asking for an invite. Thanks Richi! However, I still didn’t manage to get into Google+, unfortunately… :(

UPDATE 2: I finally managed to sign up for Google+! I’ll try to invite everyone who asked me to send them an invitation, but I can’t guarantee you’ll be able to sign up.

My Blog Is Now Running WordPress 3.2

WordPress Logo

Image via Wikipedia

Yesterday I upgraded my blog to the new major revision of the WordPress blogging platform, version 3.2, as soon as it was publicly released. In only a day, the new version was downloaded over 330,000 times. The new version of WordPress is supposedly much lighter and faster than the previous iteration, as a lot of bloat has been removed and a lot of the code was optimized to be more efficient. The new version features a new admin panel and an HTML5 compatible default theme. Overall, I am pleased with the new version of WordPress, and I’m looking forward to even more positive changes to the platform in the future.

FiOS WEP Key Calculator Website Updated

It’s been a very long time since I last worked on my Verizon FiOS WEP key calculator website. Over the last few days, I decided that it looked dated, and I decided to make it look a lot cleaner, using the magic of CSS3. I removed several images from the site, such as the header image, and the background gradient image, and I replaced them with a pure CSS-based approach, reducing the total page size from just above 12Kb to only 6.5Kb, and significantly reducing the already low amount of time taken to load the page, as well as making it feel more modern. The page loads, literally, almost instantly now, even on a dial-up connection, which is rather impressive if you ask me.  I think visitors will like the new look of my FiOS WEP key calculator site, and if you have any feedback about it, feel free to leave a comment on this post.

LibreScribe Progress Update

Since my last post, I have made a lot of progress with LibreScribe. Just a few commits ago, LibreScribe gained the ability to retrieve a list of installed applications on the device, and add them to the list in the applications tab. I also fixed several other significant issues, including:

  • When the smartpen is connected/disconnected, the application no longer crashes, and the status is automatically refreshed
  • Device storage usage is now displayed in MiB instead of in bytes. This makes it a lot less confusing how much space is remaining on your smartpen.
  • A bug, where the Echo Smartpen was detected as an “unknown LiveScribe Smartpen” in certain cases was fixed.
  • All absolute paths have been removed from the project. All resources are now referenced using relative paths.
  • wxFormBuilder has been replaced with wxSmith. The entire user interface has been recreated from scratch (although it’s very similar to the old interface, intentionally)
  • Many C++ source and header files are no longer necessary, so they have been removed, and merged into other files. This makes the codebase a lot more maintainable.
  • Duplicate udev events (such as multiple add events of the same device) are ignored now. Previously, we ended up refreshing the device information up to four times in a row because of duplicate events. This significantly reduces the delay between plugging in a device and seeing a response on the screen.

There are still tons of issues that still need to be fixed before LibreScribe becomes usable in a production environment, but I’ve been steadily making progress, and I hope to have something useful out soon.

Major Bug Fix in LibreScribe

A lot of work on the LibreScribe project has been accomplished since I first wrote about it. Just today, I fixed a major regression which was preventing the device information dialog from being displayed. In addition to that, I now have more work done on the interface, so that when the windows is resized, most of the elements will scale properly to fit the new size. Another major change I made was setting up the layout of the “Audio” and “Applications” tabs, so that there are now lists, with data split into columns. These changes mark a significant improvement in the look and feel of LibreScribe, but it’s only the beginning. Expect a large number of major changes in the not-too-distant future.

A Reply From Lexmark

After discovering a bug in Lexmark‘s Debian installer, as described in my previous post, and reporting it to Lexmark’s support team, I found a response from Lexmark in my inbox, which was sent on the 18th, and I decided to share it on my blog to show that Lexmark is aware of the issue, and they are actively working on resolving it. Here is the message I received from Lexmark Support:

Dear Dylan, 

Here is your Service Request # 1-5145156021

We recently received your feedback.

Thank you for sharing this information. We really appreciate your time and effort in bringing this one to us. I will definitely forward this one to our software engineers so that we can make the necessary changes to our software. We really appreciate your feedback. It’s through customers like you that we’re able to make improvements in our current and future products.

If you have any more questions or concerns, please contact me at your convenience and I will be happy to assist you. (If I am not available, another representative may reply to your request.)

To respond, please select “Reply” in your e-mail software, and be sure that the past e-mail is included in this reply.

[AOL Users: In order to include the previous e-mail, you must highlight it with your mouse when you are replying.]

If your e-mail client automatically deletes prior e-mail thread information, it will cause a delay while we look up your support history. If this is the case you may want to save the old e-mails as attachments and attach them to the current e-mail.

Lexmark eSupport Team

The driver installation failed because there was a typo in the Lua source code for the Linux Lexmark printer driver. To be specific, the variable “ownership” was misspelled as “ownhership” in one of the lines of the source code. While this is a very easy to fix bug, it prevents the Linux installer from working at all, and I am happy to hear that Lexmark knows about the issue now, and it’s likely that a quick fix will be released. Hopefully this will eliminate the need for my workaround, and simplify Linux printer driver installation.

LibreScribe, My Latest (and Most Challenging) Project

Image representing Livescribe  as depicted in ...
Image via CrunchBase

Over the past few days, I’ve been working on attempting to code an open source Smartpen Manager for Livescribe devices, based off of the work done in Steven Walter’s libsmartpen project, which hasn’t been updated for months. The project is called “LibreScribe”, and the source code is already on github right now. The code will be written primarily in C++, with limited functionality (such as threads) from the upcoming C++0x standard, and it will use wxWidgets for the graphical user interface, which will be built using wxFormBuilder, attempting to follow the Tango guidelines as close as possible. So far, I have only scratched the surface of all the coding that will be necessary, so it would be great if some of the coders reading this would step up to the plate and help out. Even small things, such as documenting functions, adding comments, ensuring source code style consistency, and making it easier to maintain the source code are incredibly important. Right now, there’s still tons of work to do. So much, in fact, that it’s actually easier to list what’s done than what’s left to do. Right now, I’m focusing on fixing bugs and writing functions to check the status of the connected Smartpen. To be more specific, some of the most important bugs at the moment include:

  • When the user plugs in or unplugs the device, the background thread updates the status of the device behind the scenes, but nothing is reflected in the user interface.
  • Clicking the “Device Information” button twice without closing the program results in a segmentation fault.
  • Currently, only LiveScribe Pulse devices are detected. LiveScribe Echo devices should work, but I can’t check the USB product ID property of them without physical access to one.
  • The program is not currently capable of retrieving the name of the Smartpen. More OBEX analysis is necessary to determine how the official desktop client retrieves the name of the Smartpen.

Once I have all of these bugs fixed, I will begin working on adding more of the code from libsmartpen into the project, fixing up existing code, and writing new code. This is probably one of the toughest coding projects I’ve started, but I enjoy the challenge, and I hope to create something genuinely useful to the open source community, improve my own coding ability, and learn new things. I frequently push changes to github, as long as I don’t notice any significant regressions, so you can track my progress in almost real-time. At the moment, the user interface is far from being finished (link is a screenshot), but it’s not too bad. Also, feel free to fork the code base, and make improvements.