Blog updates

Tuesday, 29 November 2011

Chromemarks Updated - 2011.11.29

Time for another ChromeMarks update.
  1. Pro users can now export/backup all their bookmarks to a file. This file is fully Chrome compatible. So if you accidentally deleted, say, every bookmark in Chrome and you haven't synced ChromeMarks then help is now at hand! Simply export from ChromeMarks, copy the file to your PC and re-import it and your bookmarks will be resurrected. Of course, folders and icons are part of the export as well. At the moment, you can perform the backup via the application menu. But I intend to beef this up in a future release by adding a "scheduler" so you can specify to backup before and/or after each sync, to possibly change the format, limit the number of backups, etc, etc. Note, the exported file is saved to the sdacrd and is not encrypted.
  2. Encryption was new with the last release, so a couple of bugfixes here. Firstly, Google allows you to change your password/phrase at any time. Chrome is meant to re-encrypt *everything* then to the new password/phrase. But the odd bug in Chrome means it sometimes misses some things out. Luckily, it does sync the "keys" which you can use to decrypt both old and new stuff. ChromeMarks had a bug in it whereby it would only ever use the latest key, so stuff that was older was left unencrypted. There was also a condition caused by the randomness of data that meant if it went from new keys to old keys to new keys then an error was thrown and nothing was decrypted. I've fixed both of these.
  3. Similarly, when you made any change to a folder (add, rename) then the app was not re-encrypting it. Ooops. Fixed that.
  4. Decryption was extended further through the app - if you were creating/amending something and Google sent back a change to the encryption, the app can now handle it instead of ignoring it.
  5. Several tweaks to the local bookmarks functionality. Thanks to Joe and Tom for providing debug logs. A recent change from Google is that the hidden tag I use to identify the local sync folder has to be unique in the users' account - which includes previously deleted ones. So if ChromeMarks created the local sync folder, and you deleted it, Google would not allow you to recreate it again. I've fixed that now with a random number on the end. And submitted a crbug patch to Google to correct their test server accordingly.. :-)
  6. Staying with the local syncing, if you added/amended a bookmark or folder, the calculations for where to position the resultant object (which should the same place it it's being amended!) were not always right. Fixed. Or at least improved.
  7. The fixes put in place last time for Honeycomb appear to have greatly improved the app for users (or at least, the number of bugs has dropped down to zero in the bits that I fixed). Added the same code to more parts of the app such as the create/amend popup.
  8. A Huge refactoring of the heart of the app - the syncing engine. The code had grown up over time as was very bloaty - it had all the logic to communicate with Google as well as logic to display errors on screen and to handle various responses. I had to duplicate this logic everywhere the app needed syncing - so another copy in the automated sync, in the create/amend popup and also in the lite app. This meant each time I changed something, I had to ensure I did it right four times. I've created some common classes now and these reduce the complexity greatly. I've also seperated out the displaying logic from the engine to make it easier to maintain. Although I've done a lot of testing - I can't say for sure that the core of the while syncing process is working exactly the same as before!
  9. Tested a few more browser apps on the Android Market to see if the full app can integrate with them. Unfortunately they all have private databases and will not allow another app to send them data. Sigh.
  10. The usual sprinkling of bugs fixes throughout the app, but too numerous or trivial to list in any detail.
  11. Updated the About popup to include info about open source licenses and the applications privacy policy. This was prompted by a snotty and annoying comment on the Market stating "now they have all my bookmarks" referring to me. Let me make this clear - YOUR BOOKMARKS ARE YOUR OWN DATA. I DO NOT AND WILL NEVER PASS YOUR BOOKMARKS THROUGH A THIRD PARTY. Feel free to use ngrep on your android to sniff the network traffic and you'll notice that it goes to exactly the same url that chrome does for syncing. The only additional bit is my app also uses Google analytics for usage monitoring, but you can see the full url being sent and can see there are no bookmarks or personally identifyable data on them. Why do some people think everyone is evil?
This was also the first release where I performed the overwhelming majority of my testing against the test chromiumsync server that is part of the Chrome codebase. It's a reasonably efficient piece of work, but it does respond a little differently in places. So I've raised two crbugs with patches for the chrome developers to upgrade the code accordingly. Previously I tried to create my own little app, but it was hard to get all the responses right. I'm thinking that my own little app might morph into a test runner to allow me to unit test the app properly.

And a quick touch on what's next for this app.

  • A first time tutorial. Basically something that will give you maybe five small pages of info that you can swipe/click through that will give you some hints/tips on the app for new users.
  • Search engines synced. I'd like to try to sync back the search engines from Chrome and make them accessible in the app. If that works well, then maybe some other bits could be synced - passwords is an option, but remember that the Android browser won't let another app send in an id/password to auto fill. So Passwords can never be integrated properly in the Stock Browser by a third party app.
  • More improvements to the new backup facility - as detailed above, a scheduler function.
  • Honeycomb integration. Google have released *some* of the source code. Not all of the bits I need, though. And they refuse to annote which bits cam from Honeycomb - they seem to be treating it like the ugly duckling and pretending it never happened. So it's hard to tell what code is running on Honeycomb and which bits are probably on Gingerbread or already on ICS. If anyone has root access on their Honeycomb tab *and* they can get partial native code syncing to work, then let me know! I need the native syncing to be functioning partially as the Browser changes it's database and I can't get anything to work in the emulator so I'm still flying blind.
  • Better testing. I spend more and more of my time retesting the app to make sure things aren't broken. I need to try to perform some automated and re-testable unit tests. Android does allow some unit test functionality, but it's a bit clunky and the interaction with an external sync server further complicates matters since it keeps returning randomly generated ids. Grrr.
That's it for now. Enjoy!

No comments:

Post a Comment