- May 2012 (1)
- April 2012 (3)
- March 2012 (1)
- January 2012 (1)
- December 2011 (1)
- November 2011 (1)
- October 2011 (4)
- September 2011 (2)
- July 2011 (1)
- June 2011 (1)
- May 2011 (1)
- March 2011 (2)
- November 2010 (2)
- October 2010 (1)
- September 2010 (6)
- August 2010 (1)
- June 2010 (1)
- April 2010 (1)
- October 2009 (1)
- August 2009 (2)
DroidCon UK, 6-7 October 2011
MyPOD reviews
There have been a couple of fair reviews of MyPOD recently and I just wanted to send a shout out to the authors, Thanks guys.
http://www.androidauthority.com/podcatcher-roundup-top-9-best-android-apps-for-playing-podcasts-16817/http://rascallings.blogspot.com/2011/07/android-app-review-mypod.html
We all know that while being highly functional – there are some edges to smooth out in the MyPOD UI. Credit goes to these bloggers for taking the time to look at the functionality and give it a fair review.
Using VectorPaint For VJing
While re-writing the VectorPaint library I have also been experimenting with using the library in a VJing application. The save drawings are sent via OSC to a processing sketch and render on the screen. This is a snapshot at MixedMedia – a monthly event in Sydney for VJing.
shortcuts script for common debug tasks
I have been using this script for a while, it allows me to make shortcuts for common android debug tasks (e.g. logcat, shell, installing/overwriting/removing apks). There are probably better ways of doing it for the shell script experts out there, but it suits my purposes… and it’s pretty streamlined.
There are aliases for common devices and common apps so i can start stuff with a few characters
So the first parameter denotes the function.
l = logcat r = replace app (keeping data) s = shell i = install u = uninstall o = overwrite (uninstall then install) ks = kill-server ss = start-server
The second parameter denots the device (which are configured in the first if statement):
a = all connected devices (from 'adb devices') f = first device (in 'adb devices' list) e1 = emulator-5554
(the others are my hardware devices)
Then there are app package name shortcuts … (the 3rd if statement)
To start logcat on ny nexus 1, I type:
ad l n1And to overwrite an apk on all connected usb devices – it type (the 2nd ‘a’ param stands for ‘all connected devices’), really useful when testing before a release …
ad r a /path/to/apkfile.apkBasically it’s nothing too high tech, it just makes things much quicker and easier when i am debugging. If you have any suggestions then i am keen to hear them…
So without further ado, here is the script:
#!/bin/bash
# toggle this to test command output without execution 0=no exec
EXEC=1;
DEVICES='f'
if [ $2 ] && [ $2 = 'g1' ] ; then
DEVICES=("HT848KV04600")
elif [ $2 ] && [ $2 = 'hero' ] ; then
DEVICES=("HT9BSL901147")
elif [ $2 ] && [ $2 = 'arch' ] ; then
DEVICES=("A10-4BE40002-9FF80000-015F2F44-0D01601E")
elif [ $2 ] && [ $2 = 'n1' ] ; then
DEVICES=("HT018P805702")
elif [ $2 ] && [ $2 = 'e1' ] ; then
DEVICES=("emulator-5554")
elif [ $2 ] && [ $2 = 's' ] ; then
DEVICES=("I5500b2e40b3c")
elif [ ! $2 ] || [ $2 = 'a' ] ; then
DEVLIST=`adb devices`
DEVICES=()
for D in $DEVLIST; do
if [ $D = "device" ] ; then
DEVICES=(${DEVICES[@]} $PREV)
fi
PREV=$D
done
# take the first device if not specified otherwise take all
if [ ! $2 ] ; then
DEVICES=${DEVICES[0]}
else
DEVICES=${DEVICES[@]}
fi
fi
echo "using devices:" $DEVICES
OP=''
if [ $1 ] ; then
if [ $1 = 'u' ] ; then
OP="uninstall"
elif [ $1 = 'i' ] ; then
OP="install"
elif [ $1 = 'r' ] ; then
OP="install -r"
elif [ $1 = 'l' ] ; then
OP="logcat"
elif [ $1 = 's' ] ; then
OP="shell"
elif [ $1 = 'ks' ] ; then
OP="kill-server"
elif [ $1 = 'ss' ] ; then
OP="start-server"
elif [ $1 = 'z' ] ; then
OP=""
elif [ $1 = 'o' ] ; then
OP=""
fi
fi
PRG=$3;
if [ $3 ] ; then
if [ $3 = 'mpp' ] ; then
PRG="package.name.1"
elif [ $3 = 'st' ] ; then
PRG="package.name.2"
elif [ $3 = 'stp' ] ; then
PRG="package.name.3"
elif [ $3 = 'mp' ] ; then
PRG="package.name.4"
fi
fi
if [ ! $1 ] ; then
echo "ad <cmd> <dev> <prg> extra"
echo "CMD = o (overwrite) extra=apk | l (logcat) | r (reinstall) extra=apk | "
echo "i (install) extra=apk | s (shell) | u (uninstall) | ks (kill-server) | ss (start-server)"
echo "CMD = z (zipalign <dev>)"
echo "DEV = g1 hero arch n1 s a(all)"
echo "PRG = mp mpp st stp"
echo "------devices---------"
CMD="adb devices"
echo $CMD
if [ $EXEC = 1 ] ; then
$CMD
fi
else
if [ $1 = 'z' ] ; then
NEWFILE=`echo $2 | sed "s/.apk/_z.apk/"`
rm -fr $NEWFILE
CMD="zipalign -v 4 $2 $NEWFILE"
echo $CMD
if [ $EXEC = 1 ] ; then
$CMD
fi
else
for DEV in $DEVICES ; do
echo $DEV
if [ $1 = 'o' ] ; then
CMD="adb -s $DEV uninstall $PRG"
echo $CMD
if [ $EXEC = 1 ] ; then
$CMD
fi
CMD="adb -s $DEV install $4"
echo $CMD
if [ $EXEC = 1 ] ; then
$CMD
fi
else
CMD="adb -s $DEV $OP $PRG $4"
echo $CMD
if [ $EXEC = 1 ] ; then
$CMD
fi
fi
done;
fi
fi
Silent mode timer UI changes – review & lessons learnt
I have posted about the silent mode timer before – it’s a small app to disable silent mode using a timer. It’s useful for situations like meetings and going to the cinema when you just want to have silent mode on for a short period of time and not mess around with schedules or flipping upside down, etc.
After releasing a UI update recently I discovered how difficult it can be to convince users of the benefits of a new (better) UI. When your users know your product there is generally going to be some resistance when it gets changed. Eventually I have realised that if there is going to be change, then you have to make sure that all the features your existing users like should be the highest priority.
The goals of the UI re-write were to reduce the amount of buttons on screen while still enabling the fastest way to set a timer and just get out (that’s all the app should do).
The features that were lost in this case were:
- Some convenience buttons on the side of the time setting widget to increment/decrement the time by 15min. In the first version
- 12 hour time.
These features have now been restored by popular demand …
There were many features people had requested to be added in the first version (automatic prompting, calendar integration, set a timer by end time). Some of these were easy to integrate in the new interface (all except the calendar integration).
But with all the (new and old) features, does it still live up to the basic goal of simplicity? Well the users will be the judge. Some have left but more new ones have also come.
The moral of the story? Well i guess it’s that no matter how well you try to make things better, the main thing you need to create is a sense of attachment to an application, and familiarity is key. Changes probably need to be made in transitional style, or if there is a complete overhaul, the option to revert to the old style while people get comfortable is highly important.
The new app can be found on the market here:
Free: https://market.android.com/details?id=co.uk.sentinelweb.silenttimer
Paid: https://market.android.com/details?id=co.uk.sentinelweb.silenttimerpaid
It would be great to know what YOU think too
ADB with Acrhos 10i internet tablet on Ubuntu
1. Get the Vendor id by typing:
lsusbThe line we are looking for is:
Bus 002 Device 007: ID 0e79:1411 Archos, Inc.
2. Add the vendor id (0e79) to /etc/udev/rules.d/51-android.rules as per normal
SUBSYSTEM=="usb", SYSFS{idVendor}=="0e79", MODE="0666"3. And the extra trick is as per this link: archoss-solution-to-adb-connection-bug.html
You also need to add the vendor id to ~/.android/adb_usb.ini (you need to check the file doesn’t exist first).
echo "0x0e79" >>~/.android/adb_usb.ini
4. Then we restart the ADB server and the device should be shown:
adb kill-server adb start-server adb devicesThe last line shows:
List of devices attached
A10-4BE4XXXX-9FF8XXXX-015FXXXX-0D01XXXX device
Top 20 nice market comments about MyPOD Podcast manager/player
It’s always nice when people like your work, nice comments go a long way when you are trying to make something that is different, so I though I’d post the Top 20 nice comments about MyPOD, so here goes, thanks to everyone:-
- After long research, I eventually found a podcast client which can do everything what I wanted (and more). Awesome app, keep going!
- This app requires an IQ of at least 85 to use. If you like to smash big buttons like a monkey do not install it. Your fault if you can’t use.
- I’ve tried a few podcast players, and this is by far my favourite. It is worth buying the full version for more than 6 feeds. Good job.
- Fantastic app. Evolving quickly and getting better every time. Most used app on my phone.
- Best most robust podcast app by far.
- The best thing is the independant volume controls. You can make it quieter than the phone would normally let you. Handy listening to podcasts at night
- Tried all podcats and this is by far the best. A lil confusing at first, but get used to it and youll see its AWESOME!
- Far and away the best android podplayer i’v ever used. Simple to use but extremely configurable. Unlocked, on samsung captivate.
- Best app I have bought! Easy to set up and no sync/account issues like listen. Could do with option to save favourite pods to media player
- Best podcatcher. It takes alittle to get used to the UI but once you do, it blows all others out of the water!!!!
- Easily the most used app on my phone. Avaulable features and responsive developer make MyPod the best podcast manager available. Well worth unlocking.
- Truly wonderful app. Great interface, easy to use, minimal learning curve and its very powerful. Well worth the price (I bought it twice)
- This is by far the best podcast app on the market.it takes about ten minutes to get the hang of how it works.
- An excellent podcast app. The first to make me begin shifting subscriptions from my ipod to my EVO. First app I excitedly bought an unlock key for.
- This app does it all! Huge thanks to the dev.
- Fantastic app. Manages all my podcasts perfectly in one place. Who needs an iPhone whilst this exists?
- The UI is intimidating the first time you use it, but it’s easy to learn and the app is feature packed…worth taking a few minutes to get familiar w/
- One of the best podcast apps around. You can’t do better for free. So good I wanted to pay for it.
- I’ve tried them all and was very frustrated with the confusing and shamefully poor podcast support till I found this gem!
- If you love to control how your phone works this is the perfect app; If you have trouble with complexity and want a predetermined path go for Listen.
Android NDK Primer & Drawable Customiser presentation
- Basic introduction to the Android NDK (Building and development basics)
- Use of DirectBuffers
- Accessing java objects from the NDK (Getting and Setting data in Java Objects)
I also gave a brief overview of the upcomping Drawable Customiser release and have released a basic version of the API under GPL (Available here). I will be posting some usage examples in the next couple of weeks ..
The NDK presentation is available as : OpenOffice and PowerPoint XML
Filtering onTouch for light pressure
However at the end of the drag operation, as the finger pulls away, the area on the touch sensor decreases and the actual touch point seems to vary a lot. This is a problem for me in my drawing program, as you make fine changes to the drawing, you don’t want the changes to be affected by this noise as you pull up from the touchpad.
This solution uses a mean filter to combat the problem – noting new there. But we combine the mean value with the pressure value so as the pressure gets lighter, we us more of the mean value. It works best if the finger pulls off the surface slowly.
The filter class I have used is shown below:
/*
* licensed under CC BY-SA : http://creativecommons.org/licenses/by-sa/3.0/legalcode
*/
class MeanFilter {
public static final int DEFAULT_LEN = 11;
float[][] points = new float[2][DEFAULT_LEN];
int currentPos=0;
int actualValues = 0;
int length = DEFAULT_LEN;
float pressureLimit = 0.2f;
public MeanFilter(int length,float pressureLimit) {
super();
this.length = length;
this.pressureLimit = pressureLimit;
}
public void add(float x,float y) {
points[0][currentPos]=x;
points[1][currentPos]=y;
currentPos++;
currentPos%=length;
if (actualValues<length) {
actualValues++;
actualValues=Math.min(actualValues, length);
}
}
public void clear() {currentPos=0;actualValues=0;}
public void get(PointF defaultPoint,float pressure){
if (actualValues==0) {return;}
if (pressure<pressureLimit) {
float xmean = getMean(points[0], actualValues);
float ymean = getMean(points[1], actualValues);
float pressureRatio = pressure/pressureLimit;
defaultPoint.x=(pressureRatio)*defaultPoint.x+(1-pressureRatio)*xmean;
defaultPoint.y=(pressureRatio)*defaultPoint.y+(1-pressureRatio)*ymean;
}
}
public void setLength(int i) {
length = i;
clear();
}
private float getMean(float[] arr,int ctr){
float accum = 0;
for (int i=0;i<ctr;i++) {
accum+=arr[i];
}
return accum/ctr;
}
}To use it we create an instance – this is a mean filter length:7, pressure threshold:0.3
private MeanFilter touchFilter = new MeanFilter(7,0.3f);
Then in onTouch, we can filter the value to be used like so:
/*
* licensed under CC BY-SA : http://creativecommons.org/licenses/by-sa/3.0/legalcode
*/
public boolean onTouch(View v, MotionEvent event) {
PointF touchPointOnScreen = new PointF(event.getX(),event.getY());
switch (event.getAction() ) {
case MotionEvent.ACTION_DOWN: touchFilter.clear();
break;
case MotionEvent.ACTION_MOVE:
touchFilter.add(event.getX(),event.getY());
if (event.getPressure()<0.05) {return true;}
if (event.getPressure()<0.3) {
touchFilter.get(touchPointOnScreen,event.getPressure());
}
break;
case MotionEvent.ACTION_UP:
touchFilter.get(touchPointOnScreen,event.getPressure());
break;
}
// use touchPointOnScreen here...
return true;
}
So touchPointOnScreen contains the filtered value to use.We can note that the mean values arent calculated until the pressure drops below the threshold, thus being slightly more efficient than just mean filtering all the time, this also stops touchpoint lag as the mean filtered value will generally lay somewhere behind the current value.
This code is made open under the CC BY-SA licence
.
Silent Timer Released
I have just yesterday released a (very) small app and widget called “Silent Timer”. This a simple app to disable the silent mode after a certain time. I made it because I regularly forget to turn off silent mode after movies and meetings. There are plans to add some more features in the next few weeks.
There is a free ad supported version and a paid version. The free version has had 300 downloads so far – which isn’t too shabby for absolutely no announcements or marketing (well, except this post).
![]() |
![]() |
![]() |
| QR Free | QR Paid |
The product page is here …










