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!

Sunday 13 November 2011

ChromeMarks updated - 2011.11.13

A long overdue release of ChromeMarks today. As normal, the highlights:

  1. The app can now handle Chrome encrypted bookmarks. This was originally  expected to be a pro only feature for some time next year. But recent releases of Chrome have started enabling encrypted bookmarks by default, so I had to accelerate the plans. There were a large number of challenges to implement this (see previous blog). And before the inevitable 1-star review and complaints appear on the Market - you need to enter your account password to decrypt the bookmarks. There is no way around this - and when you ticked the option to encrypt your bookmarks in Chrome when setting up sync, it clearly states "your account password will be used to encrypt your data". The password/passphrase is not stored on the device. It is encrypted to create a hash in exactly the same way that Chrome does.

  2. Upgraded the database to the same as the current stable release of Chrome. Unfortunately this does mean you will need to re-download all your bookmarks again. Sorry!

  3. PRO APP. Someone involved with the chromesync service contacted me and mentioned that some of the icons being created by this app were "larger" than expected and the sync service would soon stop accepting them. Since icons are normally small in size, something that was >2kb could only come from one of the external icon providers that the app uses. So a mild fix to ensure the app doesn't sync something that big again. Plus, this is the first time some acknowledgement of this app from Google!

  4. PRO APP. For users integrating their bookmarks, some may have been experiencing "corrupt database" errors. Some of these were due to a hard coded limit of 1mb in Android for the amount of data it could retrieve. If you had a lot of bookmarks and most of them have icons then you may have hit this limit and android wouldn't go any further and return a data corruption error. I've tweaked things to no longer retrieve the icons themselves (since they are the majority of the data) and retrieve the icons seperately when need be. This may make a "sync local bookmarks" slightly slower if you have a lot of icons - but it should be more reliable.

  5. Added a new menu entry to "contact developer". This allows you to goto my Twitter page (@chromemarks) or send me an email. The email option will also attach a zip file with some info about the device you are using such as language, screen size, orientation, etc. Nothing personally identifiable.

  6. The app now works on x86 devices, and also devices with an ethernet connection. I'm not sure if there are many such devices out there - but I'm using x86 android in a virtual machine for a lot of my testing now as it's sooooooo much faster than Google's android emulator that it made sense to upgrade the compatibility.

  7. Partial Russian translation. Tons of thanks to Kirill Simonov and Evgeny for all the help!

  8. Partial Finnish translation. Tons of thanks to Patrik Selin for all the help!

  9. Remember - if you want to help with the translations from one word to several phrases, just drop me a line!

  10. Some tweaks for Honeycomb users. This may or may not fix the crashes you keep getting when restarting the app. But without the Honeycomb source code, I can't tell for sure what the bug is/was or how to correctly fix it. Complain to Google!
Some screenshots for the new release can be found in the previous blog posting.