Monday, 20 October 2014

Weight Tracker v1.15

A new version of Weight Tracker has been released, key new features include:


  • Italian translation by Simonini Luciano
  • Fixed a nested scroll view bug
  • Improved the data entry screen
Many thanks to Luciano who has patiently worked with me to provide an Italian translation of the App,

Controversially Banner Ads are back. I know a lot of users liked the no permissions, no ads and no in app purchases, so for these users you can still access the previous version of the app.


To install the old version of the  app you will need to download the APK (see the above link) and side load it, click here if you need help.

The reason ads are back is that I plan on improving the app over the coming months and a little reward will help to make sure the app is well maintained into the future. I have had requests for an Ad free paid version (or In Purchase to remove ads), however Google requires me to handle the VAT/Sales tax on all transactions, most devs don't bother but since very few people actually pay its not worth the hassle. When I had an In App Purchase to remove ads, less than 0.5% (1 in 200) actually paid.

The banner ads are provided by Ad Mob using Google Play Services API, I also have enabled Google Analytics that provides me with anonymous usage data, this lets me see which screens people use most so I can improve the app accordingly. Your data is safe and is not sent to Google or anyone else. 

A few users left comments complaining scroll no longer worked, looking into this I found that I was nesting scroll views which is bad. This is now fixed, apologies to anyone whose phones had this bug.


New features to come:

Improved report screens with explanations of the stats and BMI chart.
Make transferring readings to other devices easier and show a link to an online help page
Add a new field for body fat and add this to the report and chart.


Please leave a comment on this blog or send me an email with suggestions, bug reports or queries

PDB

Wednesday, 3 September 2014

Translating Weight Tracker

If you are interested in translating Weight Tracker, read on!

Preliminaries

You will need a decent text editor before starting. On Windows I recommend Notepad++

http://notepad-plus-plus.org/

On Linux, Gedit is more than fine. I'd be grateful for anyone to recommend a Mac text editor.

Web hosted email tends to play funny tricks with xml files, so may need a zip utility to zip up your text file to prevent any malarky by Yahoo! etc. Linux comes with zip/unzip, on Windows I recommend 7-zip

http://www.7-zip.org/

You need to be able to download files, attach files via email, how to use text editors and how to use zip/unzip utility programs.


Overview

All the strings in the app are stored in a file called Strings.xml:

Download Strings.xml

The file contains many string elements, like:

    <string name="quickhelp_description_chart">Chart showing your weight changes over time</string>

The name, highlighted in red, is a descriptive name of where you will see the string, so here you can guess that this string is on the quick help screen and provides a description of the chart:



To translate this into Spanish, you would do
    
<string name="quickhelp_description_chart">Gráfico que muestra los cambios de peso en el tiempo</string>

Note the name is not translated, its still the same, only the green part is translated.

When all strings have been translated, save the file as Strings.xml, zip it up and send it to my pigdogbay email address (see the about screen in the app).


Technical Quirks

I use Eclipse to develop Android Apps and it can be a real pain in the ***! Here are some of the common problems that I run into and where you can help me out before providing your translations:


  • Apostrophes, ' , these need to be preceded with a backslash, for example \'
  • File encodings, Eclipse uses UTF-8, please ensure that you save strings.xml as UTF-8. You can check this in your editor's save-as dialog or file preferences.


Verification

The problem is that you can not check your translations to see how they will appear in the app. I will have to take your Strings.xml, compile a new version of the app and send you a link to the APK file for you to side load.

Once you have the updated app, you need to check that the strings fit the screen and don't mess up the user interface. One tip to avoid problems is to try and keep strings about the same length as the English version. Maybe use abbreviations such as the French 'SVP' for 'Please'.

Once we are both happy with the translations, I'll put them into the next release that will appear on Google Play. I will credit you on Google Play with providing the translation.

Lastly

If I make future releases of the App I may notify you to ask you with help in providing new translations for any changes. Since the app is quite mature now, this hopefully will be quite rare.

Many thanks to the people who have sent me emails with offers of help, much appreciated and I hope this post will now help.


Kind Regards
Pig Dog Bay


Tuesday, 2 September 2014

App Update


Appy Days! The Fonz keeps trim with Weight Tracker.
A quick update on how my apps are doing

CleverDic Crossword Solver

Download Now From Google Play

A strong year for CleverDic with over 60,000 downloads and over 27,000 active users and still rising. You'll find CleverDic in the Top 100 Apps for Books and Reference and has a healthy 120 downloads per day. G'Day to Australia where the app is very popular.


Weight Tracker

Download Now From Google Play

Downloads went through the roof after Christmas, with over 350 downloads per day. Total downloads now exceed 55,000. Downloads have slowed over the summer but have sharply picked back up again as people try to shed their summer holiday pounds!

Good news, I'm adding new features however I'll be bringing back ads which will help to support the app in the future.



Anagram Solver

Download now from Google Play

Anagram Solver is CleverDic's little brother where I can try out new features but is now actually beating CleverDic on daily downloads and is the #1 Anagram Solver app on Google Play.

Users like the clean and simple user interface. There are no other screens or menus, just a simple slide swipe panel so you can quickly access the help section.

Interestingly I notice that users rarely use the powerful search features, in fact they tend to only use the app for what it's name suggests. So Anagram Solver users mainly use the anagram search tool where as CleverDic they use the crossword tool!


Other apps

Download now from Google Play

Mortgage Calculator has quite recently taken off from 1 or no downloads per day, to over 20. This is quite surprising considering there must be 1000's of these type of apps but I do try to make my apps quick and easy to use, no nonsense, so I guess there is good demand for easy straight forward apps.

Stopwatch picks up the odd download each day, I never expected many downloads as I wrote this app to help me at work when I need a handy simple Stopwatch that I can see from across the room.


As The Fonz says, Heeeyyyyy!
Pig Dog Bay

Friday, 8 August 2014

Solving Crosswords With CleverDic

Introduction

I'll show you how to effectively use the CleverDic Crossword Solver app to solve cryptic crosswords. Firstly I'll summarise the powerful search functions and then we will complete a real crossword.


Missing Letters

This is the most common search as you will usually have a few letters in a clue and is useful for all types of crossword puzzles. You use a full-stop (or period) to represent a missing letter:

r..p.....

CleverDic finds 24 words such as raspberry, ragpicker, and respected.

Cryptic crossword clues sometimes give you the letters of the answer, this is useful when you don't have any letters yet to search, for example:

Sort of cable - flatter one, aluminium (7)


Well one is I (Roman numeral) and aluminium is AL (its chemical symbol), so I'll try this search:

....ial

I get 31 matches and I quickly find coaxial (coax = flatter).

Tip: Consonants, especially JKMQWXZ are really good for narrowing down the number of matches.

Tip: Big words with over 12 letters are good for giving narrow searches


Anagrams

Cryptic crosswords always have a few clues with anagrams, the easier crosswords have lots of anagrams. In CleverDic just enter the letters and it will find all the matching words that use those letters, enter:

eprsu

to find purse, sprue and super.

All very well, but how do you spot anagrams in the first place? Well the setter will use certain words to indicate an anagram such as, sort of, unfortunately, spreading, make, manufactured, maybe and could be.  Since the app is quick and easy its worth just trying out letters to see if they make a word even if you are not sure there is an anagram in the clue.

Tip. Sometimes the letters will be spread over several words and maybe punctuated.

Can you spot the anagram here (being manufactured is the indicator):

8d Maybe put heat-resisitant material around a utensil being manufactured (8)

I show you the solution later


Partial Anagrams

To make the clue more difficult the setter will only use an anagram that only makes up part of the clue, the rest of the letters will have to gleaned from rest of the clue, for exmaple.

22ac Stratus spreading around break of day - something in the heavens (8)

Stratus is an anagram as indicated by spreading, but is only 7 letters. no problem CleverDic can smartly deal with this using the Supergram feature, enter:

stratus+

The + symbol represents the unknown letter, the search returns 5 matches with stardust looking like the best fit for the clue, something in the heavens!

Tip. If you have several unknown letters use a + for each letter. 

Here is a harder example with several missing letters:

Irrational fear about short crack in water bed (7)

Irrational is an anagram indicator, so I searched for fear+++ which gave me 197 matches, luckily I had the first letter, A, and there were only 8 words in the list that started with A. Aquifer is a rock holding water, the missing letters are qui, AQUIFER, quip is a joke or crack and short means the that the last letter of QUIP is knocked off.


Sub-Anagrams

Some clues give you too many letters and it may not be clear which ones to throw away. Not to fear as CleverDic will drill down in an anagram and find you the smaller words.

Multi-Word Anagrams

Most crossword/anagram solver apps in the marketplace only solve one word anagrams, CleverDic can take you letters and make two words with them,

To use this feature, type in your letters but add a space to split the letters, eg abcdef ghi will search for 6 and 3 letter words. For fun try your own name or football club,  for example,  enter manchester united to find lots of funny names such as mechanised nutter.  Note the order of the letters is unimportant, its the placement of the space that decides the word sizes.

Tip. A lot of clues have 3 word answers one of which is usually 'and' or 'the', remove these letters from the anagram so you can search for the other two words.

Crossword Example

The Monday crossword is usually a nice easy one to gently ease you back in! I like the i crossword as they publish crosswords from several different setters who normally publish in the Independent.






1ac Cross inlaid with gold on church vessel(8)

So far I had the following letters

.a...p..

Performing a search, returned 31 matches, so to help narrow down the search I guessed that gold means the letters au, the chemical symbol for gold,
so now I refined the search to
.au..p..

Which returned

saucepan
sauropod

saucepan is a vessel, au is gold, ce is church and span means to cross. It all makes sense!

-------------------------------

9ac Animals start to shed horny plates (6)

I had the following letters

.N.I..

Which gave 77 matches, too many to look through.

Maybe its an anagram of animals, but its 7 letters, should I disregard the first letter (starts to shed?), nimals? No need, CleverDic shows sub-anagrams, eg all the 6 letter words in a seven letter anyway. There are fifteen 6 letter words that can be made from animals, but none fitted my clue.

Looking at 3 down, I had two solutions cassette or corvette, so now I could see which suited 9ac best:

.N.I.R  using corvette gives 4 matches, but none are any good.
.N.I.S  using cassette gives 14 matches, snails looks like a candidate.

Start to shed, is S, and horny plates are NAILS (bit tenuous I know). So SNAILS and CASSETTE are answers for 9ac and 3dn, CleverDic is earning its keep!

-------------------------------

12ac Odd-job man caught in big old corporation (8)

I had two letters in the clue,

...T...M

Gives me 19 matches, a lot of the words I've not seen before, I'll see if I can find another letter before trawling through 19 words. After solving the easy 8dn, I now have:

.A.T...M

Which gives:

factotum
tantalum
tautonym

Holding down factotum, gives me the following definition:

an employee who does all kinds of work.
"he was employed as the general factotum"
synonyms: odd-job man, (general) handyman, general employee, man of all work, maid of all work, jack of all trades, personal assistant;

That will do!

-------------------------------

22ac Stratus spreading around break of day - something in the heavens (8)

Spreading indicates anagram, stratus is one letter short so we need to use the supergram feature:

stratus+ gives

stardust
startups
statures
stratums
upstarts

break of day is the clue that gives us the missing letter, d, so now we have all our letters

stratusd gives

stardust

This fits the bill for something in the heavens

-------------------------------

25ac Adventure ceased unfortunately, pop being shut in (8)

I had no letters but ceased looked like a partial anagram, 'unfortunately' usually means anagram. Searching for

ceased++

Gave me 30 words, escapade popped out as it means adventure, the extra letters were PA (eg father or pop!).

-------------------------------

3d Small container placed in class (8)

I had the letters:

C...E.T.

Which gave me 30 matches, two of which seemed to make sense cassette and corvette.  Cassette makes sense with the wordplay placed (set) in class (caste). Corvette made sense, its a small boat (container?) and its also a class of sailing boat. Hmm, in these cases I look to see how the words fits with other clues, the best fit was cassette. See 9ac.

-------------------------------

4d Being sort of nervous could make chap pray at times (15)

I only had 2 letters but being a big 15 letter word meant it was worth a search

........A...T..

returned 6 matches

commercialistic
electromagnetic
hypercatelectic
individualistic
parasympathetic
pronunciamentos

could make looks like an anagram indicator, lets try

chapprayattimes

parasympathetic

Holding the word to look up its meaning:

"relating to the part of the autonomic nervous system which balances the action of the sympathetic nerves. It consists of nerves arising from the brain and the lower end of the spinal cord and supplying the internal organs, blood vessels, and glands."

Fits my 2 letters, fits the anagram and is something to do with nervous, an acceptable answer!

-------------------------------

6d Vivacity around street beginning to lift city (7)

I had the following letters

..I.T..

The word street usually means st, lets try this search

..IST..

This gives me a list of 34 words, quickly looking through the list I see Bristol. Let's break this down,
ST street, L beginning to Lift, but brio? Using CleverDic I looked this word up and it means vivacity.

-------------------------------

8d Maybe put heat-resisitant material around a utensil being manufactured (8)

Another anagram, autensil, CleverDic qucikly solves this: insulate

-------------------------------

14d Char's initial penchant for her task(8)

I only had two letters but I guess the third*,

C.E.N...

Eight were 8 matches:

chemnitz, cleaners, cleanest, cleaning, cleansed, cleanser, cleanses, cleanups

Which one, all seem good? Well leaning is a penchant and cleaning is a clever answer to a clever witty albeit sexist clue!

(* 21ac mentioned cricket, this usually indicates xi (11 players), side or ground, so I used the n from ground).

-------------------------------

15d Something of great importance grows weak - one of the joints (8)

I only had two letters but good ones:

.L.....P

Which gave 8 matches, flagship. Flags for growing weak and hip for joint.


As you can see from the picture I had a few clues left, please leave a comment if you solve them!
Pig Dog Bay


Friday, 1 August 2014

CleverDic v1.19.01 - Supergrams!

Introduction

The latest version of CleverDic has been released on Google Play. CleverDic is the essential Android App for anybody who loves crosswords and other word games.

Download CleverDic from Google Play
Supergrams


Supergrams! Not Super Gran! Although Super Gran would love this new feature.

Supergrams, allow you to find larger words that contain the letters you specify. For example, ClEAr and spACE are supergrams of the letters ACE. This is a very useful feature when you only know a few of the letters in a word. 

For fun find larger words that contain your or your friends' names, enter Kayleigh* to find breathtakingly and heartbreakingly! The asterisk * indicates a wildcard supergram and will find all larger words.



Cryptic crosswords sometimes have clues that provide you with a partial anagram or a few letters of the answer. In these cases you know the size of the word and the letters to try, here is an example from the Guardian:

5d Cable screwed Post Office over, which may humour some deluded people (7)

The answer is PLACEBO, PO (post office) and CABLE the partial anagram. If you spotted CABLE as a partial anagram as indicated by the word screwed, enter cable++ into CleverDic. This tells CleverDic to find all 7 letter words that contain the letters CABLE, the ++ pads the length of the word to 7.




Other Changes

The clear button now shows the tip box again, quite handy with all the powerful features that are available to you.

Future Updates

Debbie Kerr and others have asked they would like larger fonts, a great idea which I'm now investigating.



Happy Crosswording.
PDB

Wednesday, 9 July 2014

PIC to PIC Communications

Introduction

Microchip have released a new family of 18F microcontroller devices that support a new feature called PPS-Lite. Peripheral Pin Select (PPS) allows the various digital IO functions such as UARTs onto pins of your choice.

In this post I will show you how to communicate between two PICs using SPI and how to set up the  PPS registers.


Schematic


Both PICs are the same type 18F65J94, one is designated the Master the other the SLAVE. The master and slave SPI pins are connected as shown in the image below. Note that here we do not use the slave select line.



Source Code

I wanted to be able to use the same binary for both PICs to help make programming of both chips easier as there is only one choice of hex file. The PICs will check pin E1 to see if they are a master or slave and behave accordingly.

One difficulty I faced is that the Master SCLK is an output and the Slave SCLK is an input. So SCLK is actually two different hardware functions SCLKOUT and SCLKIN. PPS uses two types of registers, output and input, so I needed to set the master clock pin to output register RPOR23 and the slave to input register RPINR8. Luckily the CCS compiler makes setting up these registers easy and I was able to use the same code/binary for both pics:

#pin_select SDO1=PIN_D1
#pin_select SDI1=PIN_D4
#pin_select SCK1OUT=PIN_D3
#pin_select SCK1IN=PIN_D3


The code below is written for the CCS Compiler v5.025, MPLAB X v2.10. The master will send 0,1,2 and 3 every second via SPI. Both pics will illuminate the red/green leds as they send/receive the data.


 #include "18F65J94.h"  
 #include "Device.h"  
 #inline  
 void slave(void);  
 #inline  
 void master(void);  
 #inline  
 void slave_spi_init(void);  
 #inline  
 void master_spi_init(void);  
 void main(void) {  
     set_tris_e(TRISTATE_E);  
     if (input(MCU_ID)==ID_MASTER)  
     {  
         output_bit(LED_RED,LED_OFF);  
         output_bit(LED_GREEN,LED_ON);  
         delay_ms(1000);  
         master();  
     }  
     else  
     {  
         output_bit(LED_RED,LED_ON);  
         output_bit(LED_GREEN,LED_OFF);  
         delay_ms(500);  
         slave();  
     }  
 }  
 #inline  
 void slave_spi_init(void)  
 {  
     //Set SDI and SCK as inputs, SDO as output  
     set_tris_d(TRISTATE_D_SLAVE);  
     //SPI Setup  
     //Slave, slave select disabled  
     //Clear errors  
     SSP1CON1 = 0b00000101;  
     //Slave must clear Sample bit  
     SSP1STAT_SMP=0;  
     //Mode 0 CKP = 0, CKE = 1  
     //Mode 1 CKP = 0, CKE = 0  
     //Mode 2 CKP = 1, CKE = 1  
     //Mode 3 CKP = 1, CKE = 0  
     SSP1CON1_CKP = 0;  
     SSP1STAT_CKE=0;  
     //Enable SPI  
     SSP1CON1_SSPEN=1;  
 }  
 void master_spi_init(void)  
 {  
     set_tris_d(TRISTATE_D_MASTER);  
     //SPI Setup  
     //Master, clock = FOSC/64  
     //Clear errors  
     SSP1CON1 = 0b00000010;  
     //Sample in middle  
     SSP1STAT_SMP=0;  
     //Mode 0 CKP = 0, CKE = 1  
     //Mode 1 CKP = 0, CKE = 0  
     //Mode 2 CKP = 1, CKE = 1  
     //Mode 3 CKP = 1, CKE = 0  
     SSP1CON1_CKP = 0;  
     SSP1STAT_CKE=0;  
     //Enable SPI  
     SSP1CON1_SSPEN=1;  
 }  
 void set_led(int value)  
 {  
     switch(value){  
         case 1:  
             output_bit(LED_RED,LED_ON);  
             output_bit(LED_GREEN,LED_OFF);  
             break;  
         case 2:  
             output_bit(LED_RED,LED_OFF);  
             output_bit(LED_GREEN,LED_ON);  
             break;  
         case 3:  
             output_bit(LED_RED,LED_ON);  
             output_bit(LED_GREEN,LED_ON);  
             break;  
         default:  
             output_bit(LED_RED,LED_OFF);  
             output_bit(LED_GREEN,LED_OFF);  
             break;  
     }  
 }  
 void slave(void)  
 {  
     slave_spi_init();  
     while(true)  
     {  
         SSP1BUF='X';  
         while(!SSP1STAT_BF){}  
         set_led(SSP1BUF);  
     }  
 }  
 void master(void)  
 {  
     master_spi_init();  
     delay_ms(500);  
     int buf,i;  
     while(true)  
     {  
         for (i=0;i<4;i++)  
         {  
             SSP1BUF=i;  
             set_led(i);  
             while(!SSP1STAT_BF){}  
             buf = SSP1BUF;  
             delay_ms(1000);  
         }  
     }  
 }  




 #ifndef DEVICE_H  
 #define    DEVICE_H  
 //HS External Osc, FRC internal (Fast RC Oscillator)  
 #fuses HS  
 //T1OSC/SOSC Secondary Oscillator, low power circuit selected  
 #fuses SOSC_LOW  
 //Extended Instruction Set  
 #fuses XINST  
 //Stack Overflow / Underflow Reset Enable  
 #fuses STVREN  
 //Brown out detect: Resets the device if the voltage chipped  
 // Useful for when the user switches on/off quickly and the PIC needs resetting  
 #fuses BORV20  
 //Internal External Switch over: IESO,NOIESO  
 // IESO: Two speed start up mode is enabled. Used for power saving  
 #fuses NOIESO  
 //Code Protection: PROTECT, NOPROTECT  
 //    Use NOPROTECT otherwise chipped will be permantly programmed  
 #fuses NOPROTECT  
 //CLK0 Output enabled on RA6  
 #fuses CLOCKOUT  
 //PLL Frequency Multiplier  
 #fuses NOPLL  
 //Primary Oscillator - none  
 #fuses PR  
 //No clock switching, no fail safe clock monitor  
 #fuses NOCKSNOFSM  
 //Write Protect Flash Page  
 #fuses WPFP  
 //Segment Write Diabled  
 #fuses WPDIS  
 //TMR5 Gate is driven by the T5G input  
 #fuses T5G_IS_T5G  
 //C1INA and C3INA are on their default pin locations  
 #fuses CINA_DEFAULT  
 //IOLOCK One-way set enable  
 #fuses IOL1WAY  
 //USB Low speed clock select  
 #fuses LS48MHZ  
 //MSSP2 7-bit address masking mode enable  
 #fuses MSSP2MSK7  
 //MSSP1 7-bit address masking mode enable  
 #fuses MSSPMSK7  
 //Watch dog timer window  
 #fuses WDTWIN_25%  
 //Watch dog timer clock source  
 #fuses WDTCLK_FRC  
 //Watch dog timer postscaler  
 #fuses WDT32768  
 //Watchdog Timer:  
 #fuses NOWDT  
 //Windowed watch dog timer disable  
 #fuses NOWINDIS  
 //Watch dog prescaler  
 #fuses WPRES128  
 //Voltage Regulator Control  
 #fuses NOVREGSLEEP  
 //VBAT BOR Enable  
 #fuses VBATBOR  
 //Deep sleep BOR Enable  
 #fuses NODSBOR  
 //Deep sleep  
 #fuses NODS  
 //In-Circuit Debugger Mode: DEBUG, NODEBUG  
 // DEBUG - In circuit debugging enabled, RB6 ICSPCLK & RB7 ICSPDAT are dedicated to the debugger  
 #fuses NODEBUG  
 #device PASS_STRINGS=IN_RAM  
 #use delay(clock=20MHz)  
 //Write/read to a port directly, the compiler will not set the tristate  
 #use FAST_IO(ALL)  
 #define TRISTATE_E                    0b00000010  
 #define TRISTATE_D_MASTER            0b00010000  
 #define TRISTATE_D_SLAVE            0b01011000  
 #define LED_RED                        PIN_E4  
 #define LED_GREEN                    PIN_E5  
 #define MCU_ID                        PIN_E1  
 #define SPI_SDO1                    PIN_D1  
 #define SPI_SDI1                    PIN_D4  
 #define SPI_SCK1                    PIN_D3  
 #define ID_MASTER                    1  
 #define ID_SLAVE                    0  
 #define LED_ON                        1  
 #define LED_OFF                        0  
 /*  
  *            SPI Configuration  
  * MASTER  
  *        SDO1    Output        PIN_D1        RP21        RPOR20_21=0x40  
  *        SCK1    Output        PIN_D3        RP23        RPOR22_23=0x30  
  *        SDI1    Input        PIN_D4        RP24        RPINR8_9=0x6F  
  *  
  * SLAVE  
  *        SDO1    Output        PIN_D1        RP21        RPOR20_21=0x40  
  *        SCK1    Input        PIN_D3        RP23        RPINR8_9=0x05 !  
  *        SDI1    Input        PIN_D4        RP24        RPINR8_9=0x60 !  
  *  ! write 0x65 to RPINR8_9  
  *  
  */  
 #pin_select SDO1=PIN_D1  
 #pin_select SDI1=PIN_D4  
 #pin_select SCK1OUT=PIN_D3  
 #pin_select SCK1IN=PIN_D3  
 #byte SSP1CON1 = getenv("sfr:SSP1CON1")  
 #byte SSP1STAT = getenv("sfr:SSP1STAT")  
 #byte SSP1BUF = getenv("sfr:SSP1BUF")  
 #bit SSP1STAT_SMP = SSP1STAT.7  
 #bit SSP1STAT_CKE = SSP1STAT.6  
 #bit SSP1STAT_BF = SSP1STAT.0  
 #bit SSP1CON1_WCOL = SSP1CON1.7  
 #bit SSP1CON1_SSPOV = SSP1CON1.6  
 #bit SSP1CON1_SSPEN = SSP1CON1.5  
 #bit SSP1CON1_CKP = SSP1CON1.4  
 #endif    /* DEVICE_H */  

Friday, 6 June 2014

Privacy Policy

This post is about the Privacy Policy for Pig Dog Bay apps, including CleverDic Crossword Solver, Anagram Solver, Weight Tracker, Mortgage Calculator and RoboQuip.

I am a sole developer based in the UK, I produce Android apps which I distribute through Google Play under the developer name Pig Dog Bay. My apps may contain advertising delivered via Google Admob, I trust that Admob will not harm you or you're device but please let me know if you have concerns about any ads that are shown.

Your privacy is important to me and I do not collect or store any of your personal information. My apps will however gather anonymous usage statistics viaGoogle Play Services, Google AdMob and Google Analytics. These statistics are completely anonymous to me and allow me to monitor such information as the daily Google Play downloads, user interface events (like pressing buttons), the number of clicks on ads and show in real time the number of users and their location.

Note that comments posted to the Pig Dog Bay Facebook, Google Play, Twitter and Blogger pages are public and may show your name and photo.


Disclaimers

My software is provided 'as is' without warranty of any kind, either express or implied, including, but not limited to, the implied warranties of fitness for a purpose, or the warranty of non-infringement. Without limiting the foregoing, I make no warranty that:


  1. the software will meet your requirements
  2. the software will be uninterrupted, timely, secure or error-free
  3. the results that may be obtained from the use of the software will be effective, accurate or reliable
  4. the quality of the software will meet your expectations
  5. any errors in the software will be corrected.

The Weight Tracker App is for information purposes only and is not intended to be used for medical purposes. I am not a doctor or have any medical training.
Warning, CleverDic Crossword Solver and Anagram Solver apps use large dictionaries and so may contain words that may be offensive to you. Any offence caused is completely unintended.

Finally
I am a software engineer, not a lawyer! I write apps for fun, learning, a little money and the hope that many others will enjoy using my apps. 

Pig Dog Bay