Showing posts with label readerscope. Show all posts
Showing posts with label readerscope. Show all posts

Saturday, July 03, 2010

ReaderScope 2.0.6 - Find Comments

If you didn't notice, in recent releases the Digg and Reddit social beacons were missing. They were removed some time ago to make space for a better method of discovering comments. I had released a stand-alone app FindComments few weeks ago. It uses ContextVoice to find comments from all sources (Twitter, Digg, Reddit, and many more). In v2.0.6 that app is integrated with ReaderScope. You will see a new icon on the action panel, which you can tap to find comments on the current news item from all over the web.


Try it on some popular news stories from Slashdot or XKCD to see how it works.

Monday, June 07, 2010

ReaderScope 2.0

ReaderScope 2.0 is out in the Market today.

As explained in last post, the rules of free have changed in this version. Instead of giving a crippled version for unlimited time at no cost; now ReaderScope will be available in its full glory but for limited time - 5 days. After that you can buy the Value Pack for $2.49 and unlock the expired version.





Enjoy!

Wednesday, June 02, 2010

ReaderScope upcoming changes

Last weekend I released ReaderScope 1.9.8. It has some changes that should fix crashes that some users have reported in comments at Android market. These crashes went unnoticed for such a long time, because I didn't see them myself during my testing and they were not captured by the built-in crash reporting mechanism. But I found about them last week, thanks to Android market's new crash report collection mechanism. One frequent crash was happening in the background download service and it wasn't captured by RS's crash handler. It should be fixed in v1.9.8. So thumbs up to Android team for adding this new facility to Market.

But this post is mainly about what's coming next. For starters, the version number will now graduate to 2.x. And then there will be a key change in the way free version of ReaderScope works.

Right now you can download ReaderScope from various market places for FREE. It has the basic look, with what is known as Legacy color scheme. It has Ads below the news screen. It has a handy widget, but it cannot be refreshed unless the app is unlocked with Value pack. The value pack is available for $2.49. Once you buy it and enter the unlock code, you get full access to 3 additional themes, no Ads, fully functional widget and ability to see favicons against your feeds.

Starting with 2.x, you will be able to access the full functionality of ReaderScope right out of the box, when you install the free app from any market place. The default color scheme will be changed from Legacy to Night (which so far I've heard is most popular), but you can change to others if you want. There will be no ads. You will have fully functional widget (If you are like me, you will read half of your news via the widget). The favicons will be visible.


So what's the catch? The free version will expire in 5 days. You can buy the Value pack for $2.49 and unlock it.

In addition, support for Android 1.5 will be dropped.

Why this change?

There are couple of reasons.

1. The default (legacy) color scheme is super dull. And yet, that's the first impression users get when they download the free app. I have read many users complaining about the "awful" UI of ReaderScope, and I believe part of it is the dull color scheme. So even though some pretty color schemes are hidden in the app, users don't know about them until they dig down 2 layers of settings and see the theme previews.

2. The admob code can make the UI sluggish on slow networks. When the app starts, the admob jar downloads an Ad over network. So if the network is slow, this request can sometimes add to the startup time of the app. And the worse part is, it happens even when you have unlocked the app. With the unlocked app, you won't see the ads, but I don't have control over admob code and make it stop fetch that one ad at startup. With 2.x, admob jar will be completely removed.

3. Dropping support for 1.5 had to be done someday. Only after that features from 1.6+ SDKs could be used. I hope, the users stuck with 1.5 will soon get updated by their carriers (or they will start using cyanogen like me ;).

The 2.x version will make no difference to users who have already bought the value pack, they will keep getting updates as usual. Others who have been using the app without the Value pack, will see a 5 day expiration notice upon upgrade. They will need to buy the value pack within that time.

However, if you are happy with the way free ReaderScope is right now, you will have an option. You will find v1.9.8 apk available for download here. Obviously, it won't get any fixes/features, but the app is quite stable as it is today and you can use it for free if you want. However if you want ongoing fixes and features, you will have to upgrade to 2.x and buy a value pack within 5 days.

First 2.x release should hit the market around next week. Till then please, let me know your feedback on this change.

Saturday, April 17, 2010

ReaderScope 1.9 - OAuth

For past month or so, some of you (ReaderScope users) might be facing problems if you were using AutoLogin. This happened after I updated the login mechanism in v1.8.2 to support Google Reader authentication changes. I won't go into the details, but AutoLogin is very likely to fail in the new scheme of authentication. So I advised some of you who sent me the error reports to switch to Username/Password login. It was a temporary solution.

Today I am glad to announce that starting with v1.9 ReaderScope supports OAuth login for Google Reader - the right way to login without password (compared to other password less alternatives at least).

This has been possible only after Google Reader team enabled OAuth login for their service a few weeks ago. I have been working since to get ReaderScope working with OAuth. Not all the time was spent on OAuth, but in order to implement OAuth I had redesign entire networking layer of ReaderScope (which I am glad I did because I could improve some things along the way).

Finally RS with OAuth is ready. If you were still using AutoLogin, then after upgrading to v1.9 you will get a warning message that AutoLogin is no longer supported and you will be automatically logged out. On restart you will be taken to Login screen where you can start doing OAuth login.

If you are using username/password, then after upgrading to v1.9 you will get a message informing that a new password less login option is available. You won't be forcefully logged out though. You can choose to logout and relogin.

I have been testing most of the functionality in past couple of days. But I won't be surprised if some holes were left out. Please report any problems you might face or sent crash reports if you get any.

Enjoy the upgrade!

Wednesday, March 17, 2010

New app "Find Comments"

Over the weekend I found a simple API from ContextVoice. It was something I was looking for a long time. A service that when given a URL of a news story, returns reader comments from all over the web.

It didn't take long to put together a simple app around this API.

FindComments is really simple.

1) Install app
1.1) Do NOT look for a new icon in the launcher. You won't find it.
2) Browse any news story or blog post in the browser.
3) Press Menu > Share Page
4) Press "Find Comments"

Voila!

Available in Android Market, AndAppStore, Slideme.

Here are screenshots. Give it a spin.



ReaderScope users, give it a try. Would you like to see this integrated tightly with ReaderScope?

Friday, March 12, 2010

ReaderScope 1.8.{2,3} - new authentication and global share

I released 1.8.2 couple of days ago. The only change it had was the new login mechanism. Google reader team announced on fougrapi group (that stands for "Friends of the Unofficial Google Reader API") that Google Reader soon will be discontinuing the old SID-based login mechanism. Thanks to them for announcing this well before the actual change is supposed to happen (sometime in April). ReaderScope accordingly has been updated to follow the new rules.

This change is almost painless for username/password based logins. However the  AutoLogin is a little hairy issue. The library used to get AutoLogin working is unsupported and undocumented. There is an official way to do AutoLogin kind of thing on Android 2.0 devices, but it requires access to actual device to test and still I hear it's not well documented. Besides the devices at versions <2.0 are going to be there for  a long time. Therefore I got the undocumented and unsupported library to get working somehow with the new auth mechanism. However the changes I had to make were only little short of hocus-pocus. So I was very skeptical about how it was working. I released a preview on ReaderScope mailing list. So far the feedback of the preview release and actual 1.8.2 has been positive. I haven't seen anyone reporting issues due to failed logins. I have strategic log statements to detect if things go wrong with authentication. So just mail me the logs if you see suspicious behavior. Settings > Logs. Menu > Email.

Today in 1.8.3, I also fixed a bug which would have caused auth problems if anyone was upgrading from pre-1.2.5 installation.

With the new authentication done, I have a very exciting feature implemented in 1.8.3.

When you share the news item now, you will have option to trigger the global sharing apps. They could be your favorite Twitter, Facebook, Email clients. The most useful one I found was "Read It Later" which lets you save the news item to your InstaPaper account for reading later. These are the same apps that you see when you "Share Page" from browser.


I remember someone had requested this feature once long time ago. I am sorry it took so long to implement. But now that it is here, I am sure you will enjoy it.

Ads:
* Hello, Android: Introducing Google's Mobile Development Platform (Pragmatic Programmers)
* Professional Android Application Development (Wrox Programmer to Programmer)
* Android Wireless Application Development

Saturday, March 06, 2010

ReaderScope 1.8.1 - rethinking features

In the release-early-release-often model, as the software product evolves over time, new features get added consistently. The same happened with ReaderScope for over 7 months. It started with very basic functionality and went through many iterations to reach at its current state.

Adding lot of new features however has couple of risks. First one is affecting the performance. I try to keep that under control after completing a round of new features. Memory footprint analysis and some latency measurement checks have helped to keep the ReaderScope UI very responsive over time. The second downside of features is loosing the direction, unknowingly causing a feature creep. So once in a while, it is essential that the software developer steps back a little and reviews the direction his/her software is going in. That's what I am doing in this post.

There is one feature in ReaderScope that I added few months back that I am not sure helps the main direction of the app. It is the tabbed interface. When I added it, my intent was to cater news from channels besides Google Reader. I put the Google News feeds under the News tab and was planning to add more feeds from popular news channels too. The third tab was Social. It had only a single feed for Twitter account. It smartly parsed the Twitter messages and extracted the news items pointed by the embedded links. (I love the Twitter feature and it's not going away, read below... actually nothing is going away for that matter).

Over time I have realized that the tabs are not serving any useful purpose for most of the userbase. I would rather spend time improving the Google Reader specific functionality than supporting the half baked extra tabs.

Therefore starting from v1.8.1 the tabs are disabled by default. You will only see the labels and feeds from your Google Reader account just like old days. The "Social Channels" label (which was part of the Social tab) will now appear at the bottom of your Google Reader List. If you want you can configure it to appear at the top or be invisible altogether (Settings > Customize Layout).


And for some reason if you like the tabs, you still have option. Go to Settings > Miscellaneous > Enable Tab Interface. You will get the old interface back.

One more feature is the favicons. Favicons are pretty if you read the feeds that do have favicons. However, not all users may have subscribed to feeds that publish favicons. Out of my 250+ feeds at least 150+ show valid favicons. But for some users most of their feeds may not be publishing any favicons. For them the favicon placeholder appears empty. If they are using dark themes then these placeholders appear as white rounded squares. Understandably, those users would like to turn off the favicon feature. Now they can. Head over to Settings > Value Pack > Load FavIcons and uncheck the box if you  want. (The favicon feature concerns only the Value Pack users. You haven't got one yet? It's only $2.49, hurry!)

I hope these changes simplify the UI for you. Let me know how you like it.

v1.8.1 also has one crash fix. There was a bug which could lead to crash if you immediately quit the app after starting it. It was specific to Value pack owners. It is fixed in this version.

Friday, February 26, 2010

ReaderScope 1.8 - Random

Just pushed out v1.8 of ReaderScope. Added a new feature after a long optimization-bugfix cycles in v1.7.x.

When I added home screen widget in ReaderScope, I realized how convenient it was to directly jump to the news items from the home screen, instead of opening the app and sliding through two screens. Typically during a news reading session we want to go through all the new items in all our favorite feeds. We don't necessarily care in what order. So to ease this use case, ReaderScope 1.8 introduces "Random".

When you open RS you will see a new label named "Random" at the top. When you tap on the arrow next to this label, you will directly jump to a news item. You can then use down arrow button to go to the next randomly chosen news item.


Now here is a killer. When you tap on the widget on home screen, you will be taken directly to the news item which will also have up-down arrows. It will work the same way mentioned above. In other words, you may go through all your unread news items without opening the full ReaderScope app. Just place the widget on home screen. (Note that, the full widget functionality is only available if you have the value pack installed. It's just $2.49. What are you waiting for? :)

Go ahead, update to v1.8 and let me know what you think.

And yes, do you want a FREE unlock code for the value pack. The Promotional Offer #2 is on for this weekend. First 5 people who twit about ReaderScope will get FREE unlock codes in email. It's not necessary to say only nice things, just twit your opinion about @readerscope and you will qualify for the offer. You can do this from inside the app too. Just go to Settings -> Spread the Word and you will know what to do.

P.S. I also fixed a database update issue in this release, which may concern few users who are upgrading from very old RS version (like  pre1.3)

Android fragmentation : How big a deal is it?

I came across this Infoworld story via slashdot the other day, with a sensational headline: "Google Android - a Universe of Incompatible Devices". The actual headline of the article is even more catchy "Google Android's self destruction derby begins".

The job of headlines is to attract readers. But the truth is hardly black or white. Furthermore the claims made in the article don't address specific issues that developer may or may not face. After spending past 8-9 months developing ReaderScope, I think I can better judge these fragmentation issues from developer's point of view. I have both positive and negative opinions in this matter, but all are based on my first hand experience.

  • Backward compatibility : All the Android platform versions are backward compatible. If you developed an app for Android 1.5, then it will still work on latest and greatest Android 2.1. It may look blurry on high DPI devices, but it will work nonetheless. I have hardly heard any case otherwise. Therefore, It doesn't make sense to call all the Android devices incompatible.
  • Games : I believe Game developers are the most affected by fragmentation issues. But even then I think their major concern is differing screen sizes and input controls. Hence I don't think release of 2.0, 2.1 would have affected them if they had already updated their games for all three screen sizes as per the guidelines in 1.6.
  • Standard UI : If your app is not a game and/or you are using standard UI widgets, then it doesn't take much effort to qualify your app on newer SDK versions. I didn't have to make any specific changes to ReaderScope for 2.0 and 2.1 platforms. I know of people using it on these newer phones and aren't having any platform specific issues. I however hit a problem when I started supporting 1.6. Some users started seeing crashes when ReaderScope was writing to SDCard, it later became clear that it was due to a newly introduced permission in 1.6.
  • Google published a chart on Jan 4th this year that shows current distribution of platform versions. It seemed like a great step to alleviate this problem. Unfortunately, they haven't updated that chart ever since. Nexus one was released on Jan 5th, so that chart is pretty outdated IMO. I think Google can certainly do a better job there to help the fragmentation problem.
  • It's shocking that there are still so many Android 1.5 users. I heard from a user in Russia, that they won't be upgrading from 1.5 until May this year. That's way too long. I don't know what's the update schedule in India, but OTA updates are unheard of in India, because the phone didn't come with mandatory data plan. (Thanks to cyanogen, my Magic is running a ROM somewhere between 1.6 and 2.0.) Android 1.5 R3 came back in April 2009. So 1.5 is getting over a year old. It's high time Google/their partners start updating these poor souls.
  • The backward compatibility is a huge win, but the biggest disadvantage of fragmentation is you cannot use new features introduced in newer versions. I don't want to code live wallpapers (introduced in 2.1), but there are some great improvements in 1.6 and 2.0 that I would like to use, but can't because then I would have to drop support for 1.5 users. There is some reflection witchcraft that can help in this case, but it may not be worth it.
  • There is one surprising thing that I recently discovered by accident. The browser shipped in v1.6 doesn't support HTML5 offline caching feature. It is only supported in 2.0+ browsers. I believe that's is an important feature and iPhone seems to have had it for a long time. That's a key feature for cross platform web apps.

That's pretty much I can think of till now. Let me know in comments what are your opinions on this matter.

Ads:
* Professional Android 2 Application Development
* Android Programming Tutorials: Easy-To-Follow Training-Style Exercises on Android Application Development
* Android Application Development: Programming with the Google SDK

Thursday, January 28, 2010

ReaderScope v1.7 - Widget, new Icons and .... Ads

Last night I released ReaderScope v1.7.

It now comes with a simple yet useful home screen widget.


You can tap on the news and it will be opened in the regular viewer that you see in the main app. The icon in the upper left corner, opens the full app. The icon in the lower right corner refreshes the news items in the widget. This refresh icon however, will only work with the Value pack (previously known as Theme pack, it costs only $2.49)



v1.7 comes with more stylized icons. They are also made DPI specific, so users with high DPI devices (Droid, Nexus One), will see better icons now.



And last but not the least. In this version I added an Ad-bar on the news reading screen. It is part of the basic free app. You can get rid of it by installing the Value pack.

[If you have donated to ReaderScope in the past, you are entitled to a free unlock code of the value pack. I've sent them yesterday to all the three donors. If you haven't received them or having any troubles using them, please let me know.]

Let me know what you think of the new widget, icons and the ads.

Cheers!

Saturday, December 26, 2009

ReaderScope 1.5 - quicker, better, prettier

ReaderScope 1.5 is ready for the holidays. With the latest improvements it gives the best Google Reader experience out there for your Android phone.

ReaderScope now uses non-blocking UI and the items are now loaded progressively. What does that mean? See it yourself.



As you know, the app is free in various markets. The themes (including the 'Santa' theme in above video) are part of a Theme Pack, which can be purchased for a ONLY $2.49 $3.49

Big thanks to the beta testers who helped testing the unstable 1.5 builds for over a week. Thank you guys!

Also if you like ReaderScope, vote for it at Android Arcade Facebook app.

Friday, December 11, 2009

ReaderScope 1.4 (with a Theme Pack)

Yes, now you don't have to stare at the black and khaki interface of ReaderScope. With 1.4, ReaderScope adds a theme pack. Right now it comes with three themes which look far more pleasant than the legacy color scheme. Also the Theme Pack is the first premium add-on to ReaderScope. You can buy it for only $3.49, from here. You can see the preview in the Theme switcher, just go to Settings -> Themes.



In future more themes will be added to the theme pack and you can get access to all of them, for just $3.49.

Go on, give it a try.

Thursday, November 19, 2009

Android AsyncTask template

Any meaningful GUI application needs to employ multiple threads, otherwise it is very likely to lock while doing any I/O operations - leaving bad impression on the user. Same is true for Android apps. In fact, android framework prompts user to close the app if it doesn't respond in 10 seconds or so. So it's absolutely essential to perform any task - that has even a remote possibility of taking a bit longer - in a background thread.

Fortunately Android framework has some useful constructs built into the framework that make our job relatively easy while doing multithreaded GUI programming. android.os.AsyncTask is one of them.

The basic steps to make your app multithreaded using AsyncTask are as follows:
1. Identify the code segment that you want to execute in background thread. (for e.g. code that does network i/o, bulk file transfer on local disk, etc)

2. Model it as an AsyncTask object.
(Subclass the AsyncTask object and put your code segment in the doInBackground(...) method)

3. Figure out what parameters you have to pass to the task, the result that the task should return and how to handle the exception in case something goes wrong.

This is pretty simple, but the third step gets bit complicated as your app grows and there are multiple asynchronous tasks that you want to code in.

When I was faced with this problem during the development of CuTewit, I stumbled through some steps. After a while I managed to create a template for modelling with AsyncTasks. In my second app - ReaderScope - the same template worked very nicely. ReaderScope has over 50 different tasks that are run on background thread at one time or another. The template I use, has made it pretty easy to add new AsyncTasks.

In this post, I want to share that template with you. I have written a small example app that demonstrates the use of the template. Download source tarball and apk to try it yourself.

Here is the source code of AppTask.java (the derivative of AsyncTask) for discussion.

package com.altcanvas.asynctemplate;

import android.os.AsyncTask;

public class AppTask extends AsyncTask<AppTask.Payload, Object, AppTask.Payload>

{
    public static final String TAG = "AppTask";

    public static final int APPTASK_1 = 1001;
    public static final int APPTASK_2 = 1002;

    /*
     * Runs on GUI thread
     */
    protected void onPreExecute() {
    }

    /*
     * Runs on GUI thread
     */
    public void onPostExecute(AppTask.Payload payload)
    {
        switch(payload.taskType) {

        case APPTASK_1:
            AsyncTemplateActivity app =
                (AsyncTemplateActivity) payload.data[0];

            if(payload.result != null) {

                // Present the result on success

                int answer = ((Integer) payload.result).intValue();
                app.taskStatus.setText("Success: answer = "+answer);

            } else {
                // Report the exception on failure

                String msg = (payload.exception !=null) ?
                                payload.exception.toString() : "";
                app.taskStatus.setText("Failure: error ="+msg);
            }

            break;

        case APPTASK_2:
            break;
        }
    }

    /*
     * Runs on GUI thread
     */
    public void onProgressUpdate(Object... value)

    {
        int type = ((Integer) value[0]).intValue();

        switch(type) {

        case APPTASK_1:
            AsyncTemplateActivity app = (AsyncTemplateActivity) value[1];
            int progress = ((Integer) value[2]).intValue();
            app.progressBar.setProgress(progress);
            break;

        case APPTASK_2:
            break;
        }

    }

    /*
     * Runs on background thread
     */
    public AppTask.Payload doInBackground(AppTask.Payload... params)

    {
        AppTask.Payload payload = params[0];

        try {
            switch(payload.taskType) {
            case APPTASK_1:

                // extract the parameters of the task from payload

                AsyncTemplateActivity app =
                    (AsyncTemplateActivity) payload.data[0];
                int numSteps = ((Integer) payload.data[1]).intValue();

                if(numSteps < 0) throw new AppException("Invalid input");

                // perform the task

                int progress = 0;
                for(; progress < numSteps; progress++) {
                    try {
                        // pretend to work for 1 second

                        Thread.currentThread().sleep(1000);
                    } catch(InterruptedException ie) {
                        break;
                    }
                    publishProgress(new Object[] {
                            new Integer(APPTASK_1), app, progress});
                }

                publishProgress(new Object[] {
                        new Integer(APPTASK_1), app, progress}); 
                // Return result of the task
                payload.result = new Integer(42);
                break;

            case APPTASK_2:
                break;
            }
        } catch(AppException ape) {
            payload.exception = ape;
            payload.result = null;
        }

        return payload;
    }

    public static class Payload
    {
        public int taskType;
        public Object[] data;
        public Object result;
        public Exception exception;

        public Payload(int taskType, Object[] data) {
            this.taskType = taskType;
            this.data = data;
        }
    }
}

code syntax highlighting by GVIM,

Let's go over different aspects of this code.

What is Payload?
To simplify the management of passing parameters and carrying result/exception back, we create a special object called Payload. Payload carries four entities - the type of the AsyncTask (int taskType), parameters to the task (Object[] data), result of the task (Object result), exception that took place during the task (Exception exception).

Note the signatures of doInBackground and onPostExecute. The same payload object is passed around.

How do you start a new task?

new AppTask().execute(new AppTask.Payload(
    AppTask.APPTASK_1,
    new Object[] { AsyncTemplateActivity.this,
    new Integer(numSteps) })); 
   
[You can find it in AsyncTemplateActivity.java in the sample app]

How do you define a new async task?
You don't have to create another AsyncTask derivative object. Just define a new taskType, e.g. APPTASK_2 in AppTask.java. Create a switch case for that taskType in each of 'doInBackground', 'onPostExecute', 'onProgressUpdate'. Depending upon the nature of the tasks, the contents of payload.data will vary. Since this data is passed as generic Object[], you can pass around any types of objects that suite the task's needs. On the other hand, you have to be careful to not type cast them to wrong classes.
[We loose Java's static type checking by defining params and result as generic 'Object's. But it saves us from repetitively defining similar AsyncTask derivatives]

How is the progress of the task updated?
When you call publishProgress(...), it results in a call to onProgressUpdate(...) which is running in the GUI thread. Here, you can manipulate any widget like progress bar to indicate the task progress.

...

This may not be the only way to code AsyncTask, but it certainly has worked for me - not just for one, but for two sizeable projects. Before this, it used to be pretty cumbersome to define a new task.

You can download the source code and use it in your app if you like.

Any comments and suggestions are welcome.


Flattr this



Ads:


Thursday, November 12, 2009

ReaderScope v1.3.3 - offline podcasts

ReaderScope primarily started as an Android app to access Google Reader from the phone. Over time however, various features were added as they proved complimentary to the act of news reading - like sharing the news with friends (Twitter, SMS, Email); bookmarking it (Del.icio.us); reading what others think about it (Digg, Reddit, FriendFeed); support for rich forms of news, i.e. podcasts and youtube videos, etc.

This release improves one of those fringe features, that of Podcasts. ReaderScope supports scheduled download of news items for reading offline. However that wasn't supported for podcasts yet. This release tries to address that problem a bit.

Now as you click on a podcast beacon, you will be asked whether you want to play the podcast right away or just download it for later listening.


If you choose to download, it will start downloading in the background (with progress in the notification). When the download is complete, you can listen to it by clicking on the notification. You can do this when you are offline too.

Furthermore, you can choose to download multiple podcasts simultaneously. They will download in parallel and will be accessible via their independent notifications.

You can listen to them one by one after they are downloaded. When the podcast ends or if you choose to stop it; the local downloaded file is automatically deleted freeing the storage it occupies.

How do you like it? Let me know.

Also in this release there are some bug fixes. There was a glitch in the Google News and Twitter news features. If you were to sync your feeds with "Thorough" option, the feeds under Google News and Social Channels would disappear. This release fixes that problem.

That's it for now. Upgrade to v1.3.3 and let me know if there's any problem.

Cheers!

Friday, November 06, 2009

ReaderScope v1.3.2 - Social Channels

Few months back I realized that all the stories I read in my slashdot or ars-technica feeds seemed kinda ... stale. Why? Because most of the interesting ones I had already read - through links posted by the people I follow on Twitter. It is now a cliché to say that Twitter is the fastest medium of spreading news. Consequently, it's the news channel that delivers the latest news. Moreover, it's the news that you care about most; because it is coming from the people you have chosen to follow.

So how can a modern news reader be complete without incorporating this real time news channel.

In v1.3.2, ReaderScope introduces Social Channels.


You will see a third tab "Social" when you start the upgraded ReaderScope. You will find a preset Twitter subscription there. When you tap on it, you will be asked to login to Twitter (if you haven't already). Once it gets Twitter credentials, you can tap it again and it will download you twitter timeline. It won't show you all the twits (that is for dedicated twitter clients). Instead, it will go through all the twits and will pick the ones that have embedded links in them. ReaderScope will fetch the stories/pictures/videos pointed to by those links and when it's done, they will be presented to you as news items (with the original twits as yellow subtext).



How do you like that?

You can also schedule the Twitter subscription for periodic download.

You will see lot of other improvements in this version too, especially the item list (it now has author and timestamp, right in the list). The news fetched from Google News channels, looks fresh (unread) now; instead of dull in color. The unread counts have been fixed too.

On Podcast front: the ones that take too long "Preparing" (because of long time in buffering over slow network) can now be stopped.

So download the upgrade and enjoy.

And yes... in case you haven't noticed yet, ReaderScope is now accepting donations. ReaderScope is available FREE of cost for everyone to use. Some users who are avid news readers, will see great value in it. While others may not. So it's up to you to decide what's ReaderScope worth to you. If you can express it in terms of $$, you will help towards further development of ReaderScope. You can find the donate button on this page

... better yet, let me paste that button right here. :)






Thanks for all your support. More features are coming to ReaderScope. Show your support and help it improve.

Cheers!

Saturday, October 31, 2009

ReaderScope v1.3 - Beyond Google Reader

Google Reader gives us choice in News Reading. With the advent of RSS aggregators, we got the power to subscribe to selective sources of news. That way we can fetch the up-to-date information from the selective sources that we prefer. This saves us time. We build a focused channel to acquire our daily diet of news.

However there is a flip side to that. What if an important news is unrolling that is outside the scope of our news channel. It's being reported by a publisher that we are not subscribed to. In that case we miss out the hotness of a news.

What if after the same routine of reading your regular list of feeds, you get bored. You miss that element of surprise that one gets by reading random headlines.

For the times like this, ReaderScope v1.3 introduces some new features that go beyond Google Reader.

You can now read "Google News" in a separate tab, alongside Google Reader feeds. The tab lists six different categories of news: Headlines, World News, Sports, Entertainment, Business, Sci/Tech. You can now stay up-to-date with the latest happenings in any of these areas.


In addition to that, ReaderScope now offers the latest Google Reader feature: "Popular Items". As the official Google Reader Blog says:

We use algorithms to find top-rising images, videos and pages from anywhere (not just your subscriptions), collect them in the new Popular items section and order them by what we think you'll like best. Now you don't have to be embarrassed about missing that hilarious video everyone is talking about — it should show up in your "Popular items" feed automatically.

Now you can access the same list from ReaderScope.




In addition, you can now access other lists that were absent in ReaderScope untils now: "All Items", "Starred", "Shared".

You may feel that there is not enough space on screen for all this stuff. If you feel so, you can customize the elements to get more space. The tab panel that lets you choose between Google news and Reader, disappears automatically as you start browsing the news. In the Google Reader's feed list, if you don't want the extra labels, just go to "Settings -> Customize Layout" and you will be able to rearrange all of them.

And yes, ReaderScope is now Android 1.6 ready - for bigger and smaller screens.

So update your copy and enjoy!

Saturday, October 24, 2009

ReaderScope 1.2.7 - Podcasts, Expanded View

Podcast support was a feature request in one of the market comments. I hadn't thought about it before that. When I looked into how to do it, it turned out to be pretty simple - thanks to Android's easy MediaPlayer API.

If you have subscribed to any podcast in your Google Reader, open it in ReaderScope just like any other feed. When you open a news item that has podcast attached, you will see a speaker icon near the bottom right corner, as shown in the following picture.

Just tap on it. You will see a notification indicating that the Podcast has started playing in the background.


The notification shows the progress through the podcast. If you want to pause or stop it, just tap on the Notification and you will be presented with the options. You can read your other news or even exit ReaderScope, and the podcast will keep playing in the background.

Second feature that made into this version is "Expanded view".

Just press the new menu option - "Expanded Mode" and you will see expanded list of news items with a portion of the news content below each of them. Useful to skim through the news items in a hurry.



Last but not the least, "Periodic Cleanup" feature. In v1.2.5 new options were introduced to cleanup old news items. With the "Periodic Cleanup" feature, you can choose to run the cleanup service at desired intervals. That will keep the storage in check. The periodic cleanup will delete the items that match your specified settings for "Cleanup Age" and "Keep Unread Items" option.

That's it folks. BTW, check out the new Google Reader features the were introduced recently.

Happy Halloween!

Tuesday, October 20, 2009

Sprint HTC Hero problems with ReaderScope

[Update: A fix for this problem is released in v1.2.8a. Please update.]

In past 2-3 weeks new users of Sprint HTC Hero have been trying ReaderScope. Unfortunately, they hit a crash immediately after they open the app. A lot of them have been helpful in sending the crash reports to me. I have now received over 10-12 such crash reports, all confirmed to be on Sprint HTC Hero devices.

The exception that occurs implies that there is something wrong with one of the XML layout files. In reality, the XML layout in question is a very simple one and hardly seems to be the cause. I have posted the layout to android-developers group for others' review too. Most importantly this exception is not seen on any other handset or emulator.

I started a thread on android-developers group to discuss this issue. Although, there has been no authoritative answer whether this problem is in HTC firmware or not; couple more developers have reported similar issues their apps are seeing only on Sprint HTC Hero.

At the moment the only hope I have is next firmware update from HTC for these devices. If anyone has better suggestion, I am all ears.

Keep checking the thread mentioned above, or this blog. Hopefully we will find the solution soon. Thanks for using ReaderScope.

Saturday, October 10, 2009

ReaderScope 1.2.3 - Search

Search box is implicit for any Google product. Google Reader offers one too. Searching through your hundreds of feeds, folders is really handy. With v1.2.3 the same search functionality comes to ReaderScope.




You can search through all items, or individual feeds or tags. Pressing search menu button on first screen will let you search through "All items". Pressing search menu button on second screen will let you search through whatever feed or tag you are browsing on that screen currently. The search box will indicate the scope of your search.

Besides this feature, the functionality of updating the unread counts is implemented completely in this version. In v1.2.2 only the GUI was updated to reflect changes in unread counts. But actual update in database was disabled because of performance issues. In v1.2.3 the syncing with database is deferred till the end. So now you will see a "Syncing database" progress dialog before you close the app.

In v1.2.2, some fixes went in that take care of crashes people were seeing. No obvious crashes have been reported since, so I hope everything is going well. BTW, Did you like the loading screen? :)

Cheers!

Monday, October 05, 2009

ReaderScope 1.2.1 - Auto Login

Today I came across this excellent article "5 Nice Apps I refuse to use" by Chuck Falzone. It talks about how all the Google Reader apps (or android app that needs access to Google services) ask for passwords to the user's Google account. As you know ReaderScope does it too. But I completely empathized with the author's point of view. For many like me, Google is the biggest closet in their wired home. Giving the key to this closet to any random app is scary for sure.

However, of all the login mechanisms I found out, the only supported method for a desktop/mobile app is asking user to enter his/her username and password. Google supports OAuth, but only for web apps. I wish they implement version of OAuth for desktop/mobile apps, just like Twitter. Another way, is to get the login tokens from Android platform. Although, it should be available as platform API, it is not. I guess the reason is, it will be limited only to 'Google experience' phones, hence it cannot be part of the platform.

But, thanks to the article I mentioned above, more info came out on this discussion. From the article I learnt, that a Google Reader widget accesses Google Account info available on phone. I went through the comments, and one of them gave a pointer to how this might be done. After following the email thread, I found a way to do this. The solution is not perfect/ideal. It uses a library put together by a Google engineer (@jbqueru), but it is not an official part of platform. With the help of ubikdroid's example code from the thread, I put together an "AutoLogin" feature for ReaderScope (as of v1.2.1)


If you are using a 'Google Experience' phone (or a ROM with Google Apps), then you don't have to give your password to ReaderScope. Just press AutoLogin and you are in.

If the existing users want to remove their password (which by the way is encoded before storage) from ReaderScope and use this new auth mechanism, then you can do so without loosing your cached items. Go to Settings->Credentials Management. Press "Logout". Choose "No" to the prompt of deleting cache. The app will exit. Start it again, you will be taken to Login screen. Now choose AutoLogin.

If your phone is not 'Google Experience' phone, this will not work. You will get an error message.

I put this together in past few hours. Although it has passed my automated regression tests, there might be some rough edges. Let me know if you see any problems.