We've Moved

THIS BLOG HAS MOVED!

It can be found at the new website: http://fifteen15studios.com/blog/

Personal Blog

Want to know more about the man behind the programs? Check out my personal blog: http://havens1515.blogspot.com

Thursday, January 31, 2013

Analytics Data

I just want to pass on some information to you guys that I got from looking at my analytics from Auto Respond.


Most Used Features:
It seems as if most people are interacting with Auto Respond as I would expect. The most common thing people are doing is clicking the toggle button on the main page. That is expected. That is the basic use of the app, so it should be the most often used feature.
It's also the first thing you see, and for that exact reason - it's the main purpose of the app. It's the only right-justified item on the screen, and the only colored item on the screen. This is so that it will catch your attention.

The next most used feature is the message list. People are going in there and creating new messages, editing messages, sorting messages, and even using the "Get Current Message" button, which is one of the things that I was worried that people might not use. It looks like I was wrong on that.


Little Used Features:
The one thing with the messages that nobody has used since I started collecting analytic data is deleting a message. Again, this is to be expected. The option exists, and I'm not going to take it away, but I would expect that most people will either never use that feature, or use it very little.

Another thing I see very little of is swiping to change tabs. This is most likely because the majority of users are using the free version, and have no need to use the scheduler tab. I only see 1 swipe so far... again, somewhat expected.

Some of the other things that are not getting used much: the menu items other than settings. The settings are being use a decent amount, but the other menu items are hardly touched. Again, I would expect this. However, a few people have clicked on "My Other Apps", "Feedback", and even "Donate" in the paid version. (Nobody has actually donated to me, but it has been clicked)


Completely Unused Features:
It seems that nobody has used the help screen or the credits screen, at least since I started keeping track.  Also, nobody seems to have clicked on the "Buy" button in the menu, or when you try to create a schedule in the free version. As with the other features that aren't used often, I will not take these away. I think they are necessary, and someone will inevitably use them at some point. However, I would expect that these things are not going to be used often.


Future Data:
Having all of this said, there are a few things I would like to add to my analytics. Things that I'm not currently keeping track of that I think would be helpful.

  1. Docking
    1. How many times is the app activated by docking the phone?
    2. How many of those are car docks vs. desk docks?
  2. Schedules
    1. How many times is the app activated/deactivated by a schedule in the paid app?
  3. Duration
    1. How long do people generally keep the app active before disabling it again?
    2. This is more of a curiosity than anything else. Not sure how it can help me improve the app, but it would be cool to know.
    3. Also, I'm not sure how I would do that. I'd have to look into how exactly analytics reports data, and maybe create a new category or something.
  4. Settings
    1. I'm still not keeping track of exactly how people are using the settings, and I would like to do that. I'm not sure the best way to go about it though.

Questions for you - my users:

Is there any specific usage information that you would be interested in knowing? 
If it's something that I'm not tracking yet, maybe I can look into adding it to my list. If it is something in my list above, let me know that you'd be interested in seeing that data once it's available. If it's something that I am tracking already, I'll most likely let you know if you ask for it.

Is there something that you do a lot that I didn't cover?
I'm sure that there are other things in the app that I've missed in my tracking. I don't track every little thing that happens, but I do track the ones that I think are important. Let me know if I've missed something important!

Is there something you wish you could do that I can maybe add to future versions?
As always, I welcome feature requests. If there's something that you have been desperately wanting from Auto Respond and I haven't added it yet, let me know!


Let me know your thoughts! I want to make this app as useful as possible for people, and your input helps me do that!

Tuesday, January 29, 2013

Some Updates

Today I'm going to give you some updates on things I've talked about in previous posts:

First, the Nexus 10 issue with USB Debugging: It turns out, the issue is in CyanogenMod. I installed AOKP, which is based on CM, and had the same issue. I went back to stock and it worked perfectly. So I guess I need to file a bug report with the guys at CM.


Next, the new look for 4.x: I said I was changing the check boxes to on/off switches. This is great... except in one area. (I also said in that post that I had not fully tested this yet.)

For some reason, the "SwitchPreference" doesn't quite work as I would expect. I was working on something unrelated yesterday (I found a way to use an option to actually change the icon of the whole app, not just the icon of the notification) and realized while I was working on it, that these Switch Preferences did not quite work properly.

(WARNING: technical information included below. You may not understand all of this if you're not familiar with programming.)
The problem is this: when I click on the on/off button it reacts differently than if I click on the text NEXT to the button.

If I use OnPreferenceClick, nothing happens at all when I click the button, but the function is called when I click the text.
If I use OnPreferenceChange, the function is called with the OLD value if I click on the button, and if I click on the text it's actually called twice: once with the old value, and again with the new value.

This leaves me with an issue: how the heck do I deal with 1 item reacting in 2 completely different ways depending on how it's interacted with? The answer: I still have no idea. If you have ANY insight as to how this works, I would LOVE to hear from you with ideas. In the meantime, I'm going to post on Stack Overflow and see if anyone there has any insight.

(END OF TECHNICAL INFO)



Well, that's the news as of right now. Still no work on individual responses... I keep getting distracted by other things.

As always, let me know if you find any bugs or have any requests. And if you have any insight into the above problem, please let me know.


UPDATE: I figured out what I was doing wrong:

(Another WARNING: technical information below)
in OnPreferenecChange there are two parameters: Preference preference and Object o

Apparently preference holds the preference that is being changed, and o holds the boolean value of its state after the change. I was using preference.isChecked() as my reference, and had to change it to use o. (cast o as a Boolean, then use that value.)

(End of technical information)


I'm still working on figuring out all of the details of how to change the icon. I've figure out most of it, but there is a small side effect that some users may not like, so I'm trying to handle that before I finalize anything.

I'll keep you up to date on progress :-)

Sunday, January 27, 2013

Another User Request

I've gotten another request from a user via a Play Store comment. Since I cannot respond to comments on the Play Store, I'm hoping that the user will see this post.

First and foremost... if you have a request for a feature PLEASE email me! That way I can reply directly. My email is listed on the Play Store and in the app in the "Credits" screen.

Now, onto the request. It was a 2-part request:
  1. Custom replies for individual contacts - as I've mentioned here before... I'm working on that. The hard part is not the coding, it's working out in my head exactly how I want it to function. I think I've finally got it figured out, so I'll probably start coding soon.
  2. "no reply option for non contact list numbers" - This is already done by default in the app. I thought it was in the app description on the Play Store, but apparently it's not. However, it IS in the "About" screen in the app - "It will only respond to contacts in your address book"
    1. This is done because I don't want to be sending text messages to non-cell phones. Therefore, when a response is being sent, the app first checks to see if the number is in your contact list. If it's in your contacts, it checks to see if the contact is in your "do not respond" list. If it's not in your do not respond list, it checks to see if the number is listed as a cell phone. If the number fails ANY of these checks, the response is not sent. (Oh, and after the cell phone check, it checks to see if the number has already been sent a response during the current session.)
    2. If anyone knows of a better way to check to see if a number is a cell phone, I'd love to hear about it. But I did some research early on, and right now this seems to be the only way to do it.
UPDATE: The information in #2 has been added to the Play Store description under "Features", and #1 has been added in the description under "Ideas for future versions".

There you have it. Some requests, some replies, and some insight into how the app actually works. I'll be willing to bet that a lot of you had no idea there was so much going on before your response is sent. Fact is, there is a LOT going on in the background of this app that you don't think about unless you're the one who's coding it. And the best part - all of this happens in a matter of milliseconds, so your response is usually received before the recipient has a chance to put their phone down. (assuming that you both have a good connection to the cell network.)



Side Note - I don't know how many of you will actually use this, but I think I may have gotten the "Ignore Call" option working. I've yet to actually test it (I hope to do that today) but I actually understand how the code is working now. I added this option into my settings screen a while back, but it was disabled because it didn't work. Then I removed it completely because I couldn't fix it. Well, I may have finally fixed it :-)

Wednesday, January 23, 2013

Then and Now - Auto Respond from inception to today

For those of you who haven't seen every version of Auto Respond, you may have no idea how far it has come.


Tasker:
This app actually started as a set of Tasker profiles, which automatically sent a response to text messages while my phone was docked in my car. I'm not sure if you could do all of what it does now, even with 30 Tasker profiles.

From there, I used Tasker's App Factory to turn my Tasker profiles into a simple app, with a simple interface. (I used literally the first ever publicly available version of App Factory to do this.)

It looked like this:


Pretty hideous compared to what it is now, and the icon was just something I pulled from Tasker. Because it was so hideous, I decided to learn how to make an ACTUAL Android app, and code it myself. The first coded version looked a lot better, but still needed a lot of improvement.


My Own Code:
I asked a friend of mine from high school, who is into digital design, to design an icon for me. I told him I wanted something that looked like the stock Android messaging icon, with an arrow pointing left, signifying a response. He came up with the icon I have now, but with a white arrow... I used GIMP to add the blue to give it a little more contrast (and to fit the ICS color scheme.)



Above is the first coded version. As I said, a step in the right direction, but still not quite there. Even the title bar did not follow Android convention. The icon was only actually visible in the app drawer. Plus, at this point, the functionality was still pretty basic: enable/disable and car dock functionality. No scheduler, no responding to voice calls, no silencing ringer... none of the other options that I have built in today. (It didn't even have a menu to put options into.)
The list of messages had no details, no sorting... just the name of the message, and an option for a new message. And if I recall correctly, there was no edit on those messages either, just delete.
There were only 3 screens in the whole app... the two shown above, and the "New Message" screen.


Where I am Now:
It's amazing that in about 3 months, it went from that, to this:


(For the record, the red and purple icons were edits that I made using the original icon in GIMP.)

This is a LOT more pleasing to the eye, and it more closely fits in the Android standards. The app now has roughly 20 screens, maybe more, when taking into effect the various settings screens, the about screen, help screen, feedback screen, scheduler screens, etc. Some of these screens even have 2 different design files - one for Android 4.0+, and a separate file for Android 2.x. This is necessary because of the different design standards between operating system versions, and some of the new features in 4.0+ will cause the app to crash in 2.x. (Yeah, there's a lot more to it than most people realize!)

For those of you who can apply themes to your phone (some phones/ROMs come with a way to apply themes, some don't) part of those themes may apply in the app!

I downloaded a theme called "Blue Elegance", and it made the app look like this:

Pretty sweet huh!?


Moving Forward:
Today, I did a little more overhaul of the look. All of the check boxes are now on/off switches for users on Android 4.0+. For those of you on 2.x, sorry. In order to give you switches like that I'd have to design a custom view, and it would be entirely too much work for a small interface change.

If you are one of the few people using the paid version on Android 2.x, the check boxes for the schedules are now toggle buttons. (not the same as the on/off switches available in 4.0+, but similar.)

I have not fully tested these changes. They seem to be working in 4.2, but I want to make sure that none of the changes messed things up in 2.x, and my emulator on wasn't working properly when I originally wrote the code.

Also, this is a small change, so I will likely try to build in some more changes before releasing a new version. This post was more to show the progression of the app, and mostly the progression of the interface.


Conclusion:
I hope you enjoyed the journey from having an idea for an app, to having a fairly polished app on the Play Store. I put a lot of work into this app, and take a lot of pride in my work. This should show you exactly how far I have come in a matter of a couple months!

If you want to see ALL of my screenshots over the multiple versions I've released, they're all in a public folder in my Dropbox.

https://www.dropbox.com/home/Public/Android/Auto%20Respond/Screenshots

More Nexus 10 Issues

I've come to realize something about my Nexus 10... and I'm not sure if it's an issue with MY nexus 10, or all Nexus 10s.

For some reason, this thing is REALLY finicky with the USB debugging mode. At home, I had to switch USB cables for my computer to even recognize the device. It was charging, but Windows did not see it at all until I switched cables.

Now, at work, I've tried 2 different USB cables with the same result for both cables: Windows recognizes the device, the drivers are installed, but it does NOTHING beyond recognizing it. It usually shows as a device in "My Computer". It's not there. IntelliJ IDEA (my programming IDE) doesn't recognize it. The ONLY places I can find it is in "Device Manager" and in the "Devices and Printers" screen.

I'm not sure, however, if this is a problem with the device, or possibly a problem with CyanogenMod. I just flashed CM a couple days ago, and haven't actually connected it to ANY computer since then, so it's possible that the issue is actually the ROM. However, I have not yet tried restoring my backup, or flashing back to stock, to see if the issue remains.

Sunday, January 20, 2013

Auto Respond 1.2.8.2, Tic Tac Toe 1.1.1

I just published a small update to Auto Respond. This update moved some menu items around a bit, and added a new item "My Other Apps". This will take you to a market listing where all of my apps will be listed. Right now that list only includes Auto Respond and Tic Tac Toe.



I also published a small update to Tic Tac Toe. I added menus, similar to the ones in Auto Respond (with the exceptions of settings... although I may add a couple small settings later.)

There is now a Credits screen, a Help screen, and a few other menu items.

The "My Other Apps" item was also added in Tic Tac Toe. PLEASE NOTE that if you click this item in Tic Tac Toe and are using a tablet, you will ONLY see Tic Tac Toe in that list, as Auto Respond is not currently available on tablets. (I hope to eventually build in functionality for DeskSMS and TabletSMS, at which time it will be available on tablets.)


As usual, these updates are not available quite yet, but they have been published. They should get pushed through Google's servers in a couple hours.

Friday, January 18, 2013

Auto Respond 1.2.8.1

Yesterday, I drove to Buffalo for work for the first time in many months. Much to my surprise, I docked my phone and Auto Respond did not automatically start.

I looked into this, and turns out... there were some bugs in my docking code. This has now been fixed, and the new version has been published. (It may be a couple hours before it's live on Google's servers though)

In order to make the docking options work again, you may need to go into the dock options screen and toggle all of your active options off then back on.

Sorry for the inconvenience.


As usual, if you find a bug like this PLEASE let me know. I take information like this well, and I WILL look into it if you report something like this. I'd rather have someone tell me that my app is not working properly rather than have an app on the market that isn't working as advertised.
I am human. I occasionally make mistakes, and am willing to admit to my mistakes.

Tuesday, January 15, 2013

New apps!

I think both apps are ready!

Auto Respond:

The only thing I didn't finish is adding the new settings to individual schedules. To tell the truth, I've just been too lazy to do it.

Change Log:


  • Fixed a bug with "Silence Ringer" option
  • Fixed a bug with "Desk Dock Response Message" in "Dock Settings" screen
  • Fixed a bug which caused the "OK" button on the main settings screen to disappear on orientation change
  • Made responding to text messages optional
  • Changed some more "Cancel" buttons to "OK"
  • Added Analytics to learn how users interact with the app
  • Added "Share App" option to menu


Tic Tac Toe:

It's done! Roughly 36 hours after I started, I have a playable version of Tic Tac Toe with 3 difficulties:
  • Easy - chooses a random number, and if the spot is free, it moves there. If not, it chooses again until it finds an empty spot
  • Medium - If it can win, it wins. If it can block, it blocks. Otherwise, same random number scheme
  • Impossible - If you can win (not tie, actually win) I did something wrong.
I have a very simple icon for it, and some basic graphics... nothing too amazing it's Tic Tac Toe!

I do still need to add some advertisements to it, just to attempt to bring in some small amounts of cash, but that's quick and easy.




Neither of these have been released yet, but I will likely upload them late tonight or early tomorrow.

New App: Tic-Tac-Toe

Yesterday I started some initial work on a new app. This is actually something that I already have programmed as a DOS based C++ program, I just need to build a GUI and translate the code from C++ to Java.

Background
In college I received a project to build a Tic-Tac-Toe game. That was the only requirement... build a working Tic-Tac-Toe game. There was extra credit involved if you were able to make your game unbeatable. For those who don't know, by using the correct logic while playing, it is possible to never allow your opponent to win a game of Tic-Tac-Toe, their only choices are lose or tie.

After completing the project, our professor told us that had we even made a working game that was  two human players, without a computer player aspect, we still would have gotten full credit, due to the vague requirement specification of the project.

I didn't need the extra credit (I already had above 100% in the class due to all of the extra credit he offered) but I was bored and wanted the challenge, so I made my game unbeatable. I later ended up modifying it to give it 3 difficulties: Easy, Medium, and Impossible.

Difficulties
Easy simply picks a random spot to move into. If that spot is already taken, it generates another random spot, and so on until it finds one that's empty and moves into it.

Medium checks to see if it can win, or if you can win. If it can win, it wins. If you can win, it attempts to block you. If neither player is in a position to win, it falls back to the random location.

Impossible uses a HUGE amount of nested if statements (72 if I recall correctly) (correction - the 72 nested if statements were for a different game. This one actually only has about 20 if statements for the computer logic) to make sure that either the computer wins or the game ends as a tie. You cannot defeat impossible difficulty. (At least, not that I know of. Feel free to try to prove me wrong when I release the app!)



Where I am Now
So far I have only begun work on this. I spent some time yesterday working on the initial user interface. It starts with a selection of 1 player or 2 players, if you select 1 player it takes you to a selection of difficulty.

After that, so far nothing happens. I haven't even looked at my old code yet to start implementing game play.

I will begin working on this as well as Auto Respond, and will hopefully have a product available soon(ish)! (I still need to work on the graphics even. You know, the icon and whatnot.)

More Progress

Unfortunately, I wasn't able to program at all this weekend. I wasn't feeling well, and had a lot to do on top of that. (The hockey game sucked, but my brother's gf threw him a surprise 30th birthday and that was fun.)

I did however get to do some programming last night. I was able to build in the optional text response. The former "Phone Options" menu is now called "Main Options", and has the added option of "Respond to Text Messages". This new option defaults on, as that is the main function of the app for the majority of users.

As I stated earlier, one of the three options on that page MUST be enabled... the app won't let you leave the screen without having one of them enabled:
  1. Respond to Text Messages
  2. Respond to Calls
  3. Silence Ringer
One of those MUST be active, otherwise the app is basically useless.



In other news, I've squashed a couple more bugs (that I didn't know existed until last night when I was coding):

  • Fixed a bug with "Silence Ringer" option
  • Fixed a bug with "Desk Dock Response Message" in "Dock Settings" screen
  • Fixed a bug which caused the "OK" button on the main settings screen to disappear on orientation change
These are documented in the full changelog, which is linked in the Play Store listing.

I still have a few things to finish before I release a new version. Here's what I would like to accomplish before releasing a new version:
  • Add some more settings to schedules
    • ringer settings (silent/vibrate/app default)
    • response settings (respond to text/call/both/neither/app default)
  • Add analytics to Pro version
These are relatively small changes and shouldn't take long to complete. I should be able to finish them up tonight.

I realize these are both changes that only apply to the pro version, but I don't want to release the update to the free version prior to release an updated pro version. Also (as I did yesterday) I sometimes find, and fix, bugs in code that I'm not necessarily actively working on. So if I find such a bug while working on code for the pro version, I can fix it in the free version before releasing it.

Bottom line: a new version should only be a couple days away! :-)

Friday, January 11, 2013

App Idea

I was going to pitch a new app idea to you guys, but as I was writing I realized I could actually just build it into Auto Respond instead.

I said last post that this app would be useless if both "Respond to texts" and "Respond to calls" were disabled.... but that's not entirely true. I also have an option to "Silence Ringer". If both respond options are turned off, Auto Respond could act like a "Quiet Hours" app.

After realizing this, I have decided that I AM going to allow the user to turn off both response settings, but only if the silence option is active. Basically, at least one of the 3 of those options (respond to texts, respond to calls, or silence ringer) has to be enabled... and if none of them are, THEN the app would be useless.

I am also going to add some new things to schedules also... you will be able to set each individual schedule to use the default app ringer options (set in the app settings), make no changes to the ringer, or silence/vibrate the ringer. Also, for each schedule I am going to add the options for responding to texts/calls. These will likely have the same kind of choices... use the app default setting, enabled, or disabled.
For new and existing schedules, these will default to "Use app default", since that's what they are doing now.

This will make it so that you can actually create a schedule for quiet hours. Don't want to be disturbed when you're sleeping? Simple, set up a schedule for when you normally sleep and set it to  silence the ringer when it's enabled. Don't sleep at the same time every night/day? Set up a generic schedule with the "silence ringer" option enabled, keep the schedule disabled, and use the manual "start" and "stop" buttons when you go to sleep and wake up.

As a note - I have not written ANY of the code to actually do this yet... it's just an idea right now. But it shouldn't be difficult to implement. If it's easy enough, I may actually have it included in my next update.

Thursday, January 10, 2013

Request for Auto Respond

Someone today posted a review with a request that responding to text messages become optional, like responding to phone calls is. I have actually been thinking about doing this for quite some time, and will spend a bit of time making it a reality soon.

I plan on changing around the settings screens a bit, to make it so that the two options are actually on the same page. I want to do this so that you cannot disable BOTH options at the same time. The app is useless if both options are disabled.

If you aren't following me on Twitter (I've actually posted more about it on FB than anything, but w/e) you might not know that I've been sick for a few days. I didn't go to work today, and I actually slept almost all day. I'm feeling much better after a day off, (and MUCH sleep) and I'm hoping to be back to 100% soon. If I do get better I plan on doing some programming this weekend. Unfortunately, this is a busy weekend. I'm going to a hockey game tomorrow night and, because of the playoffs, football is on both Saturday and Sunday this weekend. So I may not spend as much time as a usual weekend session, but this option addition is a simple thing that I should be able to push out in no time. (Sorry, I enjoy my football.)

I still have some other things to finish, like adding analytics to the paid version, but when they are all completed I'll release an update. Hopefully that update will come this weekend or early next week.

If you have requests, PLEASE let me know. I'd prefer it not be in a review, because I may not see those immediately (or ever, if a lot of people end up leaving reviews simultaneously.) You can leave requests here in my blog or contact me on Twitter, Google+, or by email. My Twitter, Google+ and Email address are all available in the app description on Google Play, and are also in the app under the "Credits" screen in the menu.

One last thing:
All of the reviews that I HAVE received, on both versions, have been 5 stars. THANK YOU for that! I am trying to keep everyone happy (including myself) and sometimes that's not an easy thing to do. But you guys seem to appreciate the work that I've put into this app, and I'm thankful for that. Keep the reviews coming!! :-)

As always, any requests or issues, please let me know and I will look into it!

Tuesday, January 8, 2013

What I've been working on

As I've said before, I'm a casual programmer, and therefore take breaks occasionally. The past week or 2 have been one of those breaks.

Most of my time recently has been on getting my Nexus 10, replacing my N10, rooting my N10... I think you see the trend. (And the holidays just passed, so there was some extra time with family/friends in there too.)

I have done a SMALL amount of programming in that time... I played with Google Analytics a bit to see some of the things that can be done there. So far I have only built it into the free version, but will likely be copying that work into the paid version before I release the next update (and adding to it, since there are parts of the app that are not accessible in the free version.)

With analytics I am collecting the following:
  • Screen views
    • What screens the user views, how many times each screen is viewed, and how much time is spent on each screen
    • This includes basic screens as well as settings screens
  • Clicks
    • How many times each button is clicked
    • How many times list items are clicked
      • List items include your list of preset messages, do-no-respond list contacts, and in the paid versions, schedules.
      • This does not send any information about what information is IN the list item, just the fact that you clicked it, and what type of list item it was (a message, a schedule, etc.)
    • How many times list items are long-clicked
      • See above item
    • How many times list items are edited/deleted from the long-click menu
      • See above item
Things that have not been built in, but likely will be before I release an update:
  • Settings
    • What settings are being changed, and how the settings are being used
  • How often the response message is changed
    • Again, no information about what the message contains will be sent, only the fact that the message has been changed
Things that are NOT collected as part of this process:
  • Any kind of identifying information
    • Things like age, gender, name, account names, passwords, etc. will NOT be collected from analytics, or in any other manner, and never will be.
"Personal" information that IS collected:
  • Location
    • When I was doing my testing Google Analytics was able to tell me what town I was in, probably based on IP address.
    • This is NOT an exact location. I can NOT see that you are using my app in McDonald's on Main Street in New Orleans (I don't know if such a thing even exists, it was just a collection of random places) I can only see that the app is being used in New Orleans.
    • I most likely will not do anything with this information, aside from possibly seeing which countries use that app the most.
Just an FYI - this is information that probably 90% of apps out there are collecting, so I am not doing anything that other developers aren't already doing. The only thing that I'm doing different is that I'm being 100% straight up about the information that I will be collecting. No fine print, it's all right here in a public blog in an easy to read bullet list.

I have also found an easy way to exclude my own devices from this collection. I don't care how I interact with the app.... I KNOW how I interact with the app... what I want to know is how my USERS interact with the app, and what features/settings they use the most.

I will use this information to improve the features that are used most often.



Also on the list of changes I have made:
  • changed some more "Cancel" buttons into "OK" buttons
    • I kept some as "Cancel" when it made sense
  • Added a "Share App" option to the menu
    • This will open a share dialog, where you can share a link to the app in the Play Store via any installed app that receives a share intent (Facebook, Twitter, Messaging, email, etc.)
I have not really been working on any new features, just small improvements. The next new feature that I will work on (when I decide to start working on new stuff again) is the ability to send personalized responses to specific individuals. I talked about this in one of my previous posts. It's the ONLY feature request that I've received from users, and I've had multiple people ask for it.

Personally, I'd like to get a widget working first. But nobody seems too worried about that right now except me, so I'll put that on the back burner. (Plus I've tried a couple times already, and been unsuccessful with it.)




As usual: Any requests, comments, concerns, etc.... you know where to find me. I'd especially like to get some feedback on what you think of the analytic information I'm going to collect. So if you have anything to say about it, feel free to leave a comment.

Idea for Retail POS Developers

Alright, before we get started here, I know what some of you are thinking... "POS, who are you calling a POS!?"

If you aren't in the acronym business, and aren't familiar with the retail world, a POS system in retail is a Point Of Sale system. (Not the more common use of the acronym: Piece Of S#!+)

In retail, the POS system is used for all purchases, returns, price checks, etc. Now on to my point.



When I was looking for my N10, I ran into the issue that, even within the same retailer, there often wasn't an accurate depiction of stock on the item. I went to one Walmart, and they told me another store had 1 on stock. Luckily, I got there and there was actually 2 there. (I ended up with both eventually... see the story about the N10 replacement for details.)

This got me thinking... I worked in retail for a couple years, and we often had similar issues. Usually it was the other way around though. An item would show available, and it wasn't there. 90% of the time this meant that there had been a return and the item was "in stock" because it had been returned, but it wasn't able to be put back on the shelf (Much like my N10) or it just hadn't been restocked yet, and an employee would have to retrieve it from the Customer Service desk (which is a lot less of an issue, at least it's available for purchase.)

So, here's a simple solution: (POS programmers, I hope you're listening!)
When returning an item, make an option for "restock". I was thinking on my way in to work... what's the best way to do this? You could make it a checkbox, but the Customer Service representative (CS rep) will likely ignore that box 90% of the time. As a former CS rep, I know that a lot of what you do is habit, so you will eventually get in the habit of seeing the box, knowing that 90% of items will be restocked, and clicking it. So how do you FORCE the CS rep to interact with it properly? I came up with a few ways:

  • Make that box default to on
    • Unfortunately, that makes it still optional. The user is NOT FORCED to interact with it at all. Although 90% of the time it will be correct even if ignored, habit still kicks in.
  • Make it 2 radio buttons, one for "yes", one for "no"
    • If no choice is made, cannot move forward, FORCING a click
    • again, habit kicks in. 90% of returns will be restocked, so the clerks will most likely click the "yes" box by habit.
  • Make it a Y/N input
    • This will FORCE the user to put something in the box. If the box is empty, you cannot continue.
I have noticed, in my personal life, that clicking seems to be an easier habit to form than typing. Therefore, the Y/N box seems to be the best implementation in my opinion. You have to type something in the box (unlike the checkbox) and you have to think about what key to press, not just instinctively click a mouse button (unlike the radio button.)

I'll make this even easier for you, developers, and write some sudo code for you:

If (restock)
{
    add item back into inventory

    //the actual code will likely be something like this:
    //getItem(SKU).addInventory(1);

    //where SKU is obtained by scanning the UPC code or manually entering the SKU number
}
else
{
    mark for RMA

    //something like:
    //getItem(SKU).addRMAFlag(1);
    //or
    //getItem(SKU).setRMAFlag(true);

    //in the back end, this will set a boolean flag for RMA, or add a count of RMAs to that item
}

Now, human error still occurs, and habit is still a possibility. Luckily, there is already a part of that system to take something out of inventory if it has been returned or is otherwise damaged (or whatever) and needs to be returned to the manufacturer. Keep that system around, in case it's needed, and add a flag for your backroom employees for the RMA procedure. If an item was marked for RMA and is actually able to be restocked.... simple, clear the RMA flag. 

The else statement for "mark for RMA" shouldn't actually DO the RMA procedure, just mark the item that an RMA needs to be done. Clearing that flag needs to be available anyway. After the RMA is processed, you'll need to clear the flag. So if an RMA is not actually necessary, you can clear the flag the same way.



This all seems so simple to me, but I have not worked with a POS system to date that had this kind of functionality. I have been out of retail for roughly 10 years, so someone MAY have come up with this already but, as far as I can tell from a customer point of view, this seems to still be an issue.

Go ahead POS developers... steal my idea. Use it. PLEASE. I would LOVE it if you gave me credit somewhere for the idea but, since I've made this public, I guess that part is optional. But I am not about to go write my own POS system, so feel free to add this to yours.

Monday, January 7, 2013

Nexus 10 Replacement - An underdog story

In case you don't want to read all of this, I'll start with the bottom line: honesty is NOT always the best policy.




As most of you know from my previous post(s), I purchased a Nexus 10 from Walmart on Christmas eve. It was the normal $499.99, same as the Play Store would charge. I was having fun with it, playing Grand Theft Auto Vice City, looking at what ROMs are available, etc.

A few days after buying it, I walked in the door to my apartment with the tablet in hand, bent over to take my shoes off, and the tablet slipped out of my hand. The screen basically shattered. The tablet fell maybe 2 feet, but the problem is that it landed on its side then crashed face down onto a hard floor.

I didn't do anything immediately, figured I'd take care of it in a few days.... fast forward "a few days". This past Friday, I wasn't feeling well. Called into work, called the doctor, made an appointment, and figured "while I'm out, might as well take my tablet back to Walmart and get a replacement." I was sadly mistaken with that assumption.

Went to the doc, did some tests, found nothing. she said I probably had a virus that starts with a sore throat and ends with a cold, since that's what's been going around. OK cool, not totally sick, just not feeling well. Went to Walmart.

Walked into Walmart, told them what happened, it wasn't the store I had originally purchased it from and I didn't have the receipt, they claimed it was out of the 15 day return period, so they told me to go through the manufacturer.

When I get home, I go onto the play store to call Google. They say they don't fix N10s, Samsung does. They gave me a number to call Samsung. Their tech support says, we don't do replacements. Let me transfer you. He transfers me.
"This department only handles phones. Let me transfer you to tablets."
"Oh, this is carrier tablets, let me transfer you to wifi tablets."
"We don't support the Nexus, Google does, let me transfer you."
"That's a Samsung device, they handle that."
...I think you see about how this went.

I did this for 2 hours until I got "OK, let me make a repair ticket for you. You will be charged for this repair, because it's a non-warranty repair."
I said "That's fine, I just want it fixed. I'll pay if I need to."
"OK, the ticket is created, here's the ticket number, let me transfer you. Give them your ticket number when they answer and they'll go from there. *transfer*
*give ticket number* "Oh, this is a wifi tablet, this is the carrier tablet department".... guess what comes next.... "Let me transfer you."
*transfer*
*robotic voice* "Please wait." *15 second pause* "Please wait" *few more seconds* *click*

Now I'm beyond upset. Walmart won't help, Google won't help, Samsung won't help.
Back to Walmart. They say go to the store I got it from, they may be able to do something. On the way to the other store, I realized the receipt is in the bag... which happens to be in my back seat.

I then go into Walmart #2, tell them what happened, show them the receipt, we realize it's only been 11 days, not 15... they're about to exchange it! Until they realize the charger is not in the box. I say "We can just pull the charger out of the other box and you can send me home without a charger"
"I have to check with my manager before I do that"
A bunch of arguing between me and managers... turns out they won't replace it because it's "neglect" and their return policy won't cover that. I offer to buy the replacement plan that they offer. (That nobody offered me with my original purchase, but had been mentioned at this point)
"I'll even buy it on THIS tablet, do the exchange, and buy it again on THE NEW tablet. That's $90 in your pocket to do an exchange." ($45 per plan)
Come to find out, the replacement policy doesn't cover neglect for items over $150. It's only an extension of the manufacturer's warranty, and doesn't even take effect until AFTER the end of the manufacturer's warranty. So basically, it's useless to me.

Went home, bothered Samsung and their support team on Twitter, they asked me for a ticket number, I gave it to them.

ADDENDUM: another customer at Walmart told me to take it to another Walmart and claim that I received it broken, so I went home, flashed a factory image and relocked the bootloader. So if I do make that claim, it appears as if I had never even turned on the tablet.



Saturday - I reached out to Samsung Support via Twitter again, they say "That ticket was closed. Your warranty does not cover physical damage but you can call 1-888-987-4357 to discuss repair options." Awesome. Did some more back and forth with them and got nowhere.

Called the number, told the guy I want to speak with a supervisor. Told him I am willing to pay for a repair, I just want this issue taken care of. Of course, there is no supervisor available, so I'm stuck. Eventually the guy tells me about their repair place, gives me their number, tells me how to get Google to work with me (he tried contacting Google multiple times, but their phone number continually hangs up after the "Please wait") and he was actually more helpful than anyone else up to this point.

Call it quits for the day.



Sunday morning - (This is where the honesty part comes in)
Went up to Walmart #3. Took the tablet to Customer Service, told them "I opened the box, and it was cracked like this." roughly 5 minutes later, walk out with a gift card (WOO HOO! About time!)

Went back to Walmart #2 (original place of purchase) use gift card to get the last N10 in stock.

(I'm sure there's a few small and semi-important details that I left out, but that's the majority of the story.)

Lessons learned:
  1. Buying a Nexus device from anywhere other than the play store seems to be a bad idea. Nobody wants to support it. (If I had a Google Play order number I could have done the replacement on-line from the Play Store.)
  2. Samsung support does not know what they are talking about, and enjoys tossing people around their phone support like a hot potato
  3. If you're going to buy a Nexus 10, buy a case. (I have one on the way from Amazon.)
  4. Walmart's "replacement plan" is useless on items over $150
  5. And most importantly - honesty is NOT always the best policy. A return policy is the best policy. (I tried being honest and it got me nowhere.)
ADDENDUM: For the record, I will refuse to buy another Samsung product in the future, and will no longer be pushing for others to purchase ANY Samsung device. The lack of customer service that they provided was staggering, and I would not wish that experience upon anyone.

Prior to this experience, I was the main reason that friends and family purchased items such as the SGS3 (my brother, his girlfriend AND a college friend all bought this on my recommendation) and the Nexus 10 (my mom bought one because of my recommendation) and I'm sure there are other examples. Samsung has lost a powerful ally in this battle, and have turned me into a powerful enemy.

Friday, January 4, 2013

Don't buy a Nexus 10

Just don't do it. I dropped mine, cracked the screen and have now spent over 2 hours on the phone trying to get the right department to repair/replace the thing.

I first went to Walmart where I bought it. They wouldn't replace it because it's been 15 days, and their return policy is 14. Then called Google, but they wouldn't help me because I bought it at Walmart, not on the Play Store. Then I called Samsung... about 10 times. Transfer, promise to get it taken care of, transfer, promise, transfer, promise, transfer, promise, over and over again.

I have NEVER been this upset about trying to get a product replaced IN MY LIFE. I have LITERALLY lost count of how many people I have spoken to on the phone between Google and Samsung. (I lost count somewhere around 10.)

It has been FIFTEEN DAYS! I should be able to quickly get a replacement for this, or at least quickly get approved for one if there are no replacements immediately available.

Sorry Samsung, I LOVE my Galaxy Nexus, I LOVED my Nexus 10 (for the 10 days or so before the screen cracked) but I will NEVER buy another device from you after this Customer Service fiasco.

UPDATE:
A couple things:
1) Walmart ALMOST replaced it for me, after going there 4 times and realizing somewhere in there that it had only been 11 days, not 15. But in the end they decided not to because I caused the damage.
2) I reached out to Samsung support on Twitter, and THEY responded so maybe they will do something. We'll see.

At this point I'll be glad to even PAY to have it repaired, but Samsung pushed me around so much... I ALMOST got a service ticket to pay to get it fixed, but not quite.

Still developing...