Sunday, March 31, 2013

Random thoughts.

Sometimes I really feel stupid for being this excited over a small app, but, here is another day of figures.

      Just waiting my week, for the next release.  With the search term SEO, I expect a huge change in sales rates.

Right now, up above.. I have a graph, and that graph shows some really crappy numbers.  At this payment rate I won't even be able to pay to re-license my software from my development efforts next year.  According to that graph, $481.8 is what my company will make in a year, at $1.32 a day on average.  That doesn't even count tax cost and that assumes that I'll have the same download rate.

It paints a disturbing picture, if it stays at this level.  So my only goal, is to change that picture.  To get more apps out, and more features.   I need to do releases that have great SEO on the Store.  So that I have multiple bars, and higher download counts.

Additionally, I have to get more visibility. So I went to the Google Developer Groups page to get myself added to the Supported apps list on the Google Cloud Print page.

Google Cloud Print Developers

I submitted my app for the Xamarin Showcase, not that it will pull any major buying frenzy for me, I think, but hey, more visibility is a good thing.  I have a friend, who is going to do an Android version, using one of my projects already built, that is backwards compatible to API level 4.  Probably put that on the Amazon store for $.99.  I think that store has a higher purchase level than the other Android stores.  People are willing to pay money for apps there, it's kind of like a mesh of Play and IOS in regards to purchases, I'd bet.

I don't have a marketing budget.  Even if I did, usually the bid level for ads that lead to a purchase for mobile apps are higher than the cost of what you make from a $.99 install.  Because I've gone the lowest price tier.. I have no real options and since it is my first app out there, I have to do a lot of the footwork, but because I am going to do that footwork, and because I am willing to put in the time.. it will have a higher payoff than if I took the easy way. Not just in financial rewards, but in personal growth. I guess it all comes back to that.

Saturday, March 30, 2013

Meet up - Mobile Development.

I was very impressed with a member of my meetup group this weekend.

Can't wait to have more meetings.  I want people who are passionate.  Doesn't matter if our platforms are different.  I take all intelligent opinion in it's own context.

I have a plan.  I have a lot of valuable code.  All is going according to plan.  Now, just like in "breaking_in", you have to assemble your team.  You have to move on your objectives.

The price of not being a badass; is really quite simple.  No one.. no one.. will back you up.  So, in a lot of ways, nothing has changed, however, my ranks have swelled.  I'm committed to people, and those people (I hope) are committed to me.

So, it's war time.  -sighs-

Print Hub Feature upgrade. Thoughts about Search Terms for apps.

I added Social Sharing for Twitter, Facebook, and Flickr for image file types today.  Didn't take long using Xamarin.Social.   I'll probably add a lot more every couple weeks.  Build my code up for integration and then spend a couple hours actually doing it.

I realized what my problem was.. on my app.  I had a very very weak search term base.  So, I opened it up this for this next upcoming release to a much wider set of terms.  This might end up being something I have to experiment with in order to get to the right place.  You only have 100 characters to use in your terms for your application.  Knowing what words to use is probably an entire industry in this microcosm.

In a lot of ways I get to experiment here.

Wednesday, March 27, 2013

The power of motivation. (Philosophy)

I try to preach a lot.  To the people that I care about.  Most times, they think I'm being arrogant; hey, I'm preaching, right?  I try to tell them, that if they just.. gave themselves.. they wouldn't have to worry.

From what I've seen in this world, if you just believe (doesn't matter what).  No matter what your context is, and you follow through with your objectives, you don't have to worry.  You won't end up in the situation where I see some of these really intelligent friends. Yeah, Shaun, you are one of them.

A lot of us nerds, have this tremendous capacity for understanding.  I guess if I were a typical person talking about this.. I'd have said that they have knowledge, but let's get serious here.  Knowledge is something that we as a species just don't have.

Knowledge is a complete and total understanding.  If I said that I knew the volume of my desk here, you'd be able to call "bullshit".  The equations used to calculate volume are limited by the tools that we use to measure.  In a few hundred years, our accuracy has just slipped a few to a dozen decimals, however, that isn't "knowledge".

I get worried sometimes.  Nerds, for the most part, become focused on their own challenges, without the context of the world, or without the context of others.  We lose ourselves in the challenges, and sometimes.. we forget that the only thing that will save us, if there is anything at all... Well, let's just say, it won't be your responsive touch-based javascript gallery code.  It won't be your lambda that casts your records into well formed json serialized data transfer objects.  The only thing that can save us, without a doubt, is to meld technology with our care for others.  To embrace the humanity of us all.   To realize that deep down inside we are all tied together here in this place, for the better, or for the worse.

We are all watching the same tragedies play out, that have been experienced for thousands of generations before us, and when I think about it; I laugh.

I realized, that I've wasted my time with words.  So I'll go back to doing things.  -smiles-


Currently, I'm on a free trial of "".

So in 6 days, without any app marketing, I've gotten $8.23. 

Think here soon, I might have some 0 download days if I don't start getting aggressive.

I'm waiting on a Review for my next deployment.  Only added Printer Sharing.  This weekend, should add at least 3-4 new features, if I want to get serious, before I start going to app review sites, etc.  

Frankly, if I really want to get serious, I should just build a new more "useful" app.  That incorporates the google cloud printing functionality.  I have the cash currently to get myself quite a few useful components from the store.  I could make a real business application.  

I've talked with a lot of people about this, and it seems I'm almost at a kind of impasse.  It might be time to get Unity3D.  I have enough cash from side projects, to make a gaming studio.  I have the dedication to advance my skill set in short periods of time.  If you look, I haven't been coding in Xamarin that long.   Honestly, in a lot of ways, I don't have to do anything more, I have enough right now.  I have a permanent position that takes care of my needs.  I have Kelly (Yeah, I have a girlfriend), and really, that makes me for the most part happy.  What I guess I'm looking for now, is pretty simple really.  I just want to grow.  I want to feel like I'm not just wasting oxygen until I retire.  

Anyways folk.  Just another post of a small time mobile app developer.  -smiles-  

Sunday, March 24, 2013


Straight out of ITunes Connect.

As I've done quite a bit of research on app sales, and pricing by reading blogs like my own, trying to glean some kind of intelligence out of this whole mess that is Mobile Application Development, I decided that being honest and open about my sales levels would be the best option.

As you can see, two days after a release I've sold 5 copies (I bought a copy), so really 4 copies.

I did not submit this application to any App Review site, in fact, I won't probably for a couple releases, just so that the functions on the app are a lot higher when I start asking for attention.  My Icon is horrifying bad as it stands,  as well as my ITunes Artwork submitted for the app, in the next release, those will have an upgrade.  Spent about 3-4 hours working on my graphics skills, and adding in the new MonoGCP features into the front-end.

Anyways, I feel good. Even at 5 copies.  If I broke even for the software cost, one day, that I've spent getting here, I'd feel truly blessed.  It would at least make me feel that I'd been repaid by my self-development, and the sacrifices that I've given to get this far.  The help I've received from others, taking my systems that I've built for them.  It will have been a very positive experience, and I feel very positive.  Empowered almost even.  Even with just $3.50 and a half-dozen other apps that never went to the ITunes store, but have helped others.  That's what I'm looking for. Growth.. and helping others.

Friday, March 22, 2013

Print Hub released for ITunes Store.

    Print Hub was released yesterday, just an implementation of MonoGCP.  After I released the updates to MonoGCP, I went back and added the Share printer feature.  As I add more to MonoGCP, I'll add it to my app.  I'll be adding GoogleDrive, DropBox, Print Queue Viewing, Image sharing to social sites.. thinking even about adding some image filter capability.

Not that anyone will read this, but here is a link to view it, if you want.

Print Hub.

Thursday, March 21, 2013

Monogcp features added.

Took 30 minutes today and added Printer Sharing and Unsharing to MonoGCP.

(Code snippet, Xamarin.Android).

Not sure why I keep posting code snippets.  I have CodeBox now.

I use this as a simple base for my activities when I'm in the Support Library for Xamarin.Android.

public class ActivityBase : FragmentActivity
        protected override void OnCreate (Bundle bundle)
            base.OnCreate (bundle);

            // Create your application here
        public override bool OnKeyDown (Keycode keyCode, KeyEvent e)
            if(keyCode == Keycode.Back && e.RepeatCount == 0)
                AlertDialog.Builder alertbox = new AlertDialog.Builder(this);
                alertbox.SetTitle("Are you sure you want to close this Window?");
                alertbox.SetPositiveButton("Yes", delegate {
                alertbox.SetNegativeButton("No", delegate { });
            return base.OnKeyDown (keyCode, e);

People always want a little dialog that pops up and asks them if they are sure they want to back out, before they finish their activity.

Tuesday, March 19, 2013

Rockin' it out.

Yeah, late night.. kicking some code.  Playing some music.

Sqllite is banging.. queries are working. Encryption is just doing it's thing.

Sometimes, I stop and realize... I knew what I was doing a long time ago.

Just didn't have this sweet of a system.  One that I can carry with me.  One that
makes me empowered. One that can interact with the real world so easily.

I had other people's apps, but now.. they are mine.  Taking locations in the real world..
throwing google map integration for directions.   I knew where I was going anyways.

Guess I just like it a lot more when I'm driving.

The power of engagement.

Thanks Redth. Seriously. You don't know me, but thanks.

Now I can go integrate the dll back into Youth Impact's stuff.  This component is rocking on Android side now.. Guess I lost $50 on a Redlaser test account, but man.. Having it for free is just so much sweeter.

Oh, note to self.. never use sqllite insert command in a lambda select.

Always use the InsertAll. Other note to self, make sure that when you encrypt stuff you always use:


Otherwise you'll learn what suffering is again.

Sunday, March 17, 2013

Friday, March 15, 2013

The power of crazy. (Philosophy)

The one thing I've learned in my relatively short life of 32 years, is that if you are more determined than others, you almost always win out.  Intelligence, certainly helps, but it is hardly a deciding factor.

Take this guy below for example.  He is obviously crazy.  Red hair, doesn't shave often enough.  Walks around in a thermal shirt.  Good thing he is pretty determined.

This brings me to the point : Crazy people just kind of naturally sense connections between things.  Now the difference in our society, between "good crazy" and "bad crazy", is really simple.  When you can focus on something so granular... some deep down detail of an event or a process occurring; you are able to say some strange stuff. You are able to say things that people just won't take well without carefully wording your observations appropriately.

"Bad crazy" kind of people tend to forget that when they are done looking at those granular details, that the facts, have to be useful to the person who observed them (themselves), and that they shouldn't probably just spit out whatever is on their mind out loud.  The "good crazy" person, is able to focus to that granular level.. deep down into the gears and sprockets and pull back into themselves.  Then, they contemplate the meaning of it all, and re-explain it to the people who need to know why there is a problem. 

There are a lot of "crazy" people out there.  All living their lives.. and in the modern day, we live in a crazy world.  All this information at our finger tips.  People can make better decisions than ever, and become instant experts, via the technology that we've made cheap. If they are so inclined.

In a lot of ways, us nerds are responsible for the interconnection that we all share.  It was always there, but as more time goes by, all of us, will feel this interconnection more powerfully.  It's frightening, to be honest.  Just imagining the power that each of us has to project our voice about an issue, via social media.  Let alone what one person could do with a simple computer, and $300 in software, and some time on their hands.

The world is crazy and a lot of us programmers, are doing our best, to merely reflect reality.  To expose the insanity that lurks in every day transactions.  Imagine the term "loan".  Do you imagine that a "loan" is a pile of papers in a folder?  To some it might just be a window on a computer screen.  To some it might merely be represented by a PDF, sent to the bank via email.  Each person individually, will be able to visualize the term "loan" in their own personal context, or in the context of how their organization handles loans.

I think about this kind of thing often, and I hope, I explained the concept of something that I think about often in a "good crazy" kind of way. : )

IOS App : Print Hub submitted for Approval.

Print Hub was the new name, I decided on for the app.  I deleted the old one.  More features.  Nothing that great yet, but I'll add little things as I build more code up.  Been looking over tons of api's to use. Incorporating the .net code and moving it over to Mono based builds.   Only $.99.  Don't really think it will come close to paying me back for the software I've bought thus far, but it's fine.  I think this is just me continually following through on actions, until I get to where my skill is so high, that I can build applications in very very little time.  Basically, just getting my code base large enough.  I don't mind spending the time this way, since I have my kids every other weekend, and generally two days per week (for a few hours), and frankly, Mobile is the new desktop.

Some screenshots below:

Google Cloud Print Xamarin Component Coming Out soon.

I'm pretty happy.  I was given a license for Xamarin.Mac in order to get this component on the store.

I hope it gets approved here soon.  Looks like I'm going to miss out on the the Xamarin Conference (Evolve).  I had a ticket, but it was employment related, and I took an offer given to me, and I don't have the cash to make it personally.

I'm happy just overall.  That's all that matters.  My code base is swelling.  Even started on some stuff, integrating with a web service in Azure.  Encryption for the shared secret between the server and client.  Authentication required.  It's all moving along.

Wednesday, March 13, 2013

UIDocumentInteractionController Delegate MonoTouch

Sometimes you need to be able to show Documents within your application.  This is the code in Monotouch to Provide a native "Document Preview" via QuickLook referenced here:

Opening and Previewing Files

This is the code you can place in your ViewController.

                    UIDocumentInteractionController docpreview = UIDocumentInteractionController.FromUrl (NSUrl.FromFilename(path));

                    InvokeOnMainThread (delegate {
                        this.DismissViewController(true,delegate {
                        docpreview.Delegate = new Test(this);

                        docpreview.PresentPreview (true);

The Delegate made for your specific UIViewController to control behavior after the Preview Ends :

In this particular instance my ViewController I was calling the DocumentPreview from was called "FirstViewController".

public class Test : UIDocumentInteractionControllerDelegate

            UIViewController viewC;
            public Test(UIViewController controller)
                viewC = controller;
            public override UIViewController ViewControllerForPreview (UIDocumentInteractionController controller)
                return viewC;
            public override UIView ViewForPreview (UIDocumentInteractionController controller)
                return viewC.View;
            public override RectangleF RectangleForPreview (UIDocumentInteractionController controller)
                return viewC.View.Frame;
            public override void DidEndPreview (UIDocumentInteractionController controller)
                ((FirstViewController)viewC).PresentPrintDialog (controller.Url.Path);

Below is the screenshot of opening the file in the QuickLook Document Preview :

Saturday, March 2, 2013

ViewWillDisappear ViewWillAppear Monotouch.

When you deal in buttons, you need to make sure in your ViewWillDisappear, and your ViewWillAppear, that you subscribe to events for your buttons and unsubscribe.   Just so that while the new view is being presented, you don't get hit with an error.

        EventHandler StatusClick;
        EventHandler ConditionClick;
        EventHandler PhotoClick;

public override void ViewWillAppear (bool animated)
            base.ViewWillAppear (animated);
            StatusClick = delegate {
                DisplayStatus ();
            ConditionClick = delegate {
            PhotoClick = delegate {
            this.Condition.TouchUpInside += ConditionClick;
            this.Status.TouchUpInside += StatusClick;
            this.Photo.TouchUpInside += PhotoClick;
        public override void ViewWillDisappear (bool animated)
            base.ViewWillDisappear (animated);
            this.Status.TouchUpInside -= StatusClick;
            this.Condition.TouchUpInside -= ConditionClick;
            this.Photo.TouchUpInside -= PhotoClick;