Enjoy! (hosted on wiki.ubuntu.com) http://goo.gl/GGGp
Saturday, May 29, 2010
Hi everybody! It's been a while. On Wednesday evening I broke my Ubuntu (installed an old udev driver) and made it unusable. I recovered on Thursday, talked to my mentor, seeked some feedback on IRC and investigated OAuth behaviour (there are still issues, doesn't work every time).
I have setup a launchpad project, which you will find here. Since I don't want people to unintentionally bzr branch (download) the development sources, which can be broken any time and are suitable for review (or testing) only, I have left the trunk series with main branch empty. Therefore if you're interested in the devel branch, check this out. Whenever I will implement a feature in 0.x series, I will push that to the main branch.
Tomorrow I'm co-organizing this http://goo.gl/YGSX conference, and afterwards I plan to see into releases, blueprints and milestones of the lp project (+ some nightly hacking).
Stay tuned. I wonder if my project can have it's mailing list.. ah! I'll set up androidu1-users group :D
PS I should have started writing my blog post in HTML long ago ;) No stress at all.
Wednesday, May 26, 2010
And no, the log-in procedure is far from perfect. I feel that 1/3 of the time I was fighting with this error (and it, or my bug, cases authorization to work after 2nd or even 3rd try):
Monday, May 24, 2010
Fetching request token from Ubuntu One... Request token: GnpqrjR98jBcXXXXXXX Token secret: pvBlJDjq1jgm9M14rzx0hgH2xXNnhFG8zC3VkqxDdshrSKcnbBNJwD6CCJR4XXXXXXXX Now visit: https://one.ubuntu.com/oauth/authorize/?oauth_token=GnpqrjR98jBXXXXXXXX ... and grant this app authorization Enter the PIN code and hit ENTER when you're done: XXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXX Fetching access token from Ubuntu One... Access token: ddxQlp8tfltXXXXXXXX Token secret: Zn172Q7xsFdTlfB58LhLg4c8TzFmHRRhLWMQDCdvrrjJ27d0fkbk8qvVjN9rtbcnmfXXXXXXXXXXXXX Sending request to Ubuntu One... Response: 200 OK
Sunday, May 23, 2010
Saturday, May 22, 2010
First, I wanted to thank for your comments, mails, even a wiki feature-request entry :) Your opinions and feedback is priceless, and one of the things that gratifies my efforts. Thank you, Ubuntu Community!
And now the update: yet again, Guillermo (aka verterok) is my hero ^ ^ To remind you, he's the one that has written ubuntuone-java-storageprotocol, which I will be using. He has answered all my questions, both really silly and some less-but-still-silly ;) (I am glad he believes there's no such thing as dumb questions :) ). He also spent quite a while helping me to properly configure the project with maven, which I am new to. Thank you, verterok!
Finally I was able to run the ExampleClient from within Eclipse, and see it in action. I also played a bit with the code, but plan much more code-fun for tomorrow (Saturday, that is).
Keep visiting, commenting, and sending your suggestions :) !
Thursday, May 20, 2010
Hi everybody! As you already know, for the last two days (or nights actually) I have been using Balsamiq software to make my mock-ups.
I would like to happily share with you, that I have been generously granted a Balsamiq license key, so that I can use it's full potential and bring you the best quality mock-ups I can in this Open Source project. Latest pictures you have seen are just the beginning. There's still much to design and many decisions to make. I believe Balsamiq will make my sketching much more pleasant, than working with a pencil and rubber like I have before (I had quite a few sheets of paper wasted when I came up with the first drawings).
Please enjoy, and don't hesitate to share with me how would you like the application to work and look like in the future! Thank you Balsamiq!
Hi there my dear visitors!
This time I really need your feedback, as this issue will directly impact the behavior of the application. As seen in the previous post on the mockup, there's no 'Open this file' nor 'Browse this directory', since I have concluded these would be normally what you wish to do when you tap/touch/click a file/folder. Long press, on the other hand, invokes a context menu to Share a folder with other people, or Publish (a file) via Ubuntu One, then you can copy or share the link options etc.
Question is: how would you want a short tap/touch to act upon a file on your Android Ubuntu One app? Would you think of opening it (point-and-shoot scenario ;) ), or perhaps (since you're using a mobile device) there are options you would be more probable to expect after short tap, like publish a file or remove it?
To rephrase one last time: do you want to open a file with a short tap/touch while long-press pops a menu to publish, delete; or do you want to pop a menu with the list of options (and maybe some additional info about the file) after any (short/long) press on a file?
Please leave your comments below. I will appreciate any constructive critique. (If you have used Android Dropbox application before, please note that or make sure your opinion is not influenced by you wanting to have the same behaviour as Db does.)
Click to enlarge.
Wednesday, May 19, 2010
Tuesday, May 18, 2010
Had a short IRC chat with my mentor, mentioned setting up a Launchpad project, and got a link to an article relating to OAuth, as this is an area I'm not yet confident in:
Monday, May 17, 2010
- http://incompetech.com/graphpaper/squaredots/ (pen and paper are still fancy)
- http://www.balsamiq.com/ (however that I've also found earlier)
I also started to poke around ubuntuone-java-storageprotocol, but I see I'll really need some pointers from verterok on this.
Sunday, May 16, 2010
Wednesday, May 12, 2010
From the Framework topics, I've got only Content Providers and Security and Permissions left :) (Graphics, Audio, etc are unrelated to my project). This feels right, as it's about time I start some storageprotocol-related code testing - it will be the very base for my work.
I leave Publishing for later, as I have to implement the application first :P
Best practices - well.. I should read that, anyway - as soon as possible. I've watched some Android-team movies concerning performance, responsiveness and seamlessness.
All in all I must admit, this documentation is quite a load of reading ;)
Tuesday, May 11, 2010
Useful action constant from Intent class:
ACTION_MAIN, target: activity; Start up as the initial activity of a task, with no data input and no returned output - app (i.e. activity) entry point
ACTION_SYNC, target: activity; Synchronize data on a server with data on the mobile device. - we would make sync service call that upon the app
ACTION_BATTERY_LOW, target: broadcast receiver; A warning that the battery is low - we could turn off data sync in such situations (defined in app settings)
The action in an Intent object is set by the setAction() method and read by getAction().
The setData() method specifies data only as a URI, setType() specifies it only as a MIME type, and setDataAndType() specifies it as both a URI and a MIME type. The URI is read by getData() and the type by getType().
Monday, May 10, 2010
Sunday, May 9, 2010
Saturday, May 8, 2010
Thursday, May 6, 2010
More importantly, till late night I have talked to Guillermo (verterok at #ubuntuone) about Java implementation of ubuntuone storage protocol. He started it in January (it's still in the +junk ;) ), and though it's missing some features, it already handles get/put, which is great news! This means that, instead of getting dirty (at least for now!) with the low level details, I'll be able to focus on the application itself. verterok has therefore laid some basis on which I can build the Android app, very fortunate :) !
Here I'd like to thank him for his patience and time he spent helping me figure out maven issues, when attempting to compile ubuntuone-java-storageprotocol . I'll finish this entry with triumphal
[INFO] BUILD SUCCESSFUL
[INFO] Total time: 8 seconds
[INFO] Finished at: Thu May 06 02:10:02 CEST 2010
Yup, time to get some sleep.
Tuesday, May 4, 2010
Clearing the stack
Remote call procedures
Saving activity state
Broadcast receiver lifecycle
Processes and lifecycles
One of most important facts to note is that we'll be using a service, not spawning a thread, to upload files to the cloud (e.g. a picture from a camera), so that Android assigns service process rank to the task, minimizing jeopardy of it being killed in the meantime :)
Next up: User Interface
Sunday, May 2, 2010
- BroadcastReceivers (triggered by any event)
Androidology - APIs [ link ]
Google I/O 2009 - ...Make your Android UI Fast and Efficient [ link ] (good one!)
- reuse views with Recycler for higher fps
- prescale bitmaps with
image = Bitmap.createPrescaledBitmap(image, view.getWidth(), view.getHeight(), true);
- remove backgrounds from views, which fill parents full width and height (eg if you have a map, you don't see the background, which is still rendered) [00:17:23]
- invalidate() to redraw a view is inefficient, use invalidate(rect) or invalidate(left, top, right, bottom)
- fewer (views) is better ;) (try to get rid of views that have only one child, too: HierarchyViewer)
- use compound drawables (eg TextView instead of ImageView+TextView)
- use ViewStub to inflate part of the UI on demand (eg for part of the UI that for majority of the time is invisible) [00:35:20]
- use merge tag to reuse UI hierarchy elements
- RelativeLayout instead of embedding linear layouts; hard to use, but it pays off
- use custom views, custom layouts instead of overusing numerous views
- garbage collection kicks in for 100~500ms, stops threads (so allocate little memory, or even none :d)
- do not allocate memory in those time-critical points: