Monday, December 3, 2018

All Possible Matched Sets of Parenthesis

Coding tests: That necessary part of the hiring process that can be the difference between being hired and not. For the All Matched Set of Parenthesis coding test, I was provided with the following information:
- Given a number n, print out all the possible syntactically valid n pairs of parenthesis.
- When n = 0, there are no answers.
- When n = 1, the one answer is: ()
- When n = 2, the two answers are: ()(), (())
- When n = 3, the five answers are: ()()(), (()()), ()(()), (())(), ((()))
- What is the N-time of your code?
- As a secondary exercise, make your code work for N in the millions if it does not to begin with.
- This should be completed on a whiteboard in 30 minutes.

Sounds simple enough. Generally, I like to avoid using recursive functions, as they tend to be hard to diagnose problems with. My original answer in java was:
HashSet results = new HashSet(1);
results.add("()");
for (int i = 1; i < pairs; ++i) {
    HashSet newResults = new HashSet(results.size() * 3);
    for (String s:results) {
        newResults.add("(" + s + ")");
        newResults.add("()" + s);
    }
    results = newResults;
}
for(String s:results) {
    System.out.println(s);
}

This answer is actually wrong. When I was given the n = 3 answers, I was only given 4 answers, without the (())() answer. I coded to that. I was not told this at the time and the interviewer even confirmed that I had the right answer as it matched the example answer given for n = 3.

The correct answer using that style in Java should have been:
HashSet results = new HashSet(1);
results.add("()");
for (int i = 1; i < pairs; ++i) {
    HashSet newResults = new HashSet(results.size() * 3);
    for (String s:results) {
        newResults.add("(" + s + ")");
        newResults.add("()" + s);
        newResults.add(s + "()");
    }
    results = newResults;
}
for(String s:results) {
    System.out.println(s);
}

But even this answer has issues, as it is going to be limited by memory due to storing the entire n results in memory as well as the n-1 results at the same time. When actually running real code (whiteboards as a rule do not run code) in a standard 64-bit Java environment, it runs out of memory with n = 17. Note that n = 4 should have fourteen answers.

The N-time for the correct code is between 2^(n-1) and 3^(n-1). During the interview, I incorrectly gave the N-time as n^2 for the incorrect code, without any acknowledgement that it was right or wrong. N-time for this problem is misleading.

Sometime after the interview, I search for the answer using Google and with some minor optimizations came up with this:
protected final byte[] base;
    
protected RecursivePairParenthesis(int pairs) {
    base = new byte[pairs * 2];
}

public void PrintPairs(int pos, int open, int close) {
    if (close == pairs) {
        System.out.println(new String(base));
    } else {
        if (open > close) {
            base[pos] = ')';
            PrintPairs(pos + 1, open, close + 1);
        }
        if (open < pairs) {
            base[pos] = '(';
            PrintPairs(pos + 1, open + 1, close);
        }
    }
}
    
public void PrintPairParenthesis() {
    for (int i = 0; i < pairs * 2; ++i) base[i] = ')';
    PrintPairs(0, 0, 0);
}
    
public static void main(String[] args) {
    new RecursivePairParenthesis(Integer.parseInt(args[0])).PrintPairParenthesis();
}

Unfortunately it uses recursion to operate, so that is still an issue. It also runs much slower for the same values of n than my original correct answer. It’s N-time is still between 2^(n-1) and 3^(n-1), but is less than my original answer. It also does not operate to millions effectively, as you would have to configure the stack to have millions of frames on it.

Next I tried to unwind the recursive nature of the recursive answer, but I ended up with very ugly code that operates without any noticeable performance increase. This took me a couple hours to do, so certainly would not have been something I would have been able to complete in the 30 minutes given for the original coding test.

Still not satisfied, I did end up spending a couple more days (yes, days) coming up with a better answer. This answer will at least theoretically handle n in the millions (more on than in a minute). This code looks like this:
int[] openPositions = new int[pairs];
final int pairs2 = pairs * 2;
byte[] sb = new byte[pairs2];
for (int i = 0; i < pairs; ++i) {
    sb[i] = '(';
    sb[i + pairs] = ')';
}
for (int i = 0; i < pairs; ++i) openPositions[i] = i;
int pos = pairs - 1;
while (pos >= 0) {
    System.out.println(new String(sb));
    pos = pairs - 1;
    sb[openPositions[pos]] = ')';
    if (++openPositions[pos] > pos * 2) {
        while (--pos >= 0) {
            sb[openPositions[pos]] = ')';
            if (++openPositions[pos] <= pos * 2) {
                sb[openPositions[pos]] = '(';
                for (int i = pos + 1, x = openPositions[pos] + 1; i < pairs; ++i, ++x) {
                    sb[x] = '(';
                    openPositions[i] = x;
                }
                break;
            }
        }
    } else {
        sb[openPositions[pos]] = '(';
    }
}

It only uses arrays with n or n * 2 elements, so memory usage is fixed. It does not use recursion, so has no stack overflow issues. It runs ever so slightly faster than the recursive or unwound answers, but still much slower than my first correct answer. It’s N-time should be slightly better than the recursive version, but still between 2^(n-1) and 3^(n-1).

The keys to this final method are realizing several things:
- There are exactly n opening parenthesis and n closing parenthesis.
- The first open parenthesis can only be in the first position and the last closing parenthesis can only be in the last position.
- The second open parenthesis can only be in the second or third position, with a corresponding pattern for the second to last closing parenthesis.
- Each answer will be exactly 2*n characters long.

With these in mind, this makes the pattern of open parenthesis look like a spring or wave:
((((....
(((.(...
(((..(..
(((...(.
((.((...
((.(.(..
((.(..(.
((..((..
((..(.(.
(.(((...
(.((.(..
(.((..(.
(.(.((..
(.(.(.(.

N in the millions is not good. At n = 64, there are more than 2^64 answers or more than 9 exa answers. With each answer at 128 bytes, that is more than 1 zettabytes of output. Given that some really big companies have exabytes of data, this one coding test problem is suppose to generate more data than these large companies currently have.

Did I pass the second time around? Maybe. But really the coding test is flawed:
1) The code has virtually no practical value: I can come up with two very obscure questionable uses for this output.
2) Giving the wrong answers as examples does not make for good code.
3) To give an answer that makes it beyond n = 17 and in the 30 minute time frame would have required knowing the question and correct code ahead of time. My first correct version takes ~3.5 seconds for n=15. My last spring version takes ~45 seconds for n=15. Both take about x3 longer for each successive n. In other words, if memory is not an issue, then use the memory version since it is 13 times faster.
4) To give the best correct code answer, one that theoretically could handle n in the millions would have taken way longer than 30 minutes unless you memorized the answer beforehand. I do not believe I could memorize it well enough to spit it back out correctly.
5) N-time is meaningless in comparing these versions. The worst N-time had the best performance by a significant margin. N-time can sometimes be a useful tool, but it has limits.
6) n in the millions is not practical for this problem with today’s computing technology, nor is it useful.
7) Writing code that you cannot run is bound to have errors.

Warning: This next part is beyond boring. The two very obscure use cases for this code that I can come up with are:
A) When populating an n-tree based database and you want to evaluate performance across all possible data organization, you could use this code as a basis for populating the data. You would do this to determine practical points at which the database tree should be rebalanced. For larger data sets, it becomes impractical to test every possible structure.
B) Used as a basis for generating formulas that have n variables and are properly formatted. You would further add coefficients, powers, and operators. It starts to break down if you want to include a variable more than once. Modern formula generation methodology uses genetics to find good formulas rather than trying every possible formula.

Friday, March 3, 2017

Phear Technology

I have been trying to get to write this blog entry for a while, but time just gets away at the moment. First where I am with game project. It is still on going, I have several rounds completed without having proper art work. I doubt it is going to be to a code finished state by the end of March. It will certainly need art work that I have no way to complete in a reasonable amount of time as well.

For a change of pace, I have been working a part time contract. From the second week of February thru the end of March for three days a week, I am indirectly, by a couple layers, working for Dekalb County Schools setting up iPads. Mostly I push buttons, take cases off and back on, and unplug and plug them back in. Each one is unique enough that it is not something you can do on autopilot. Originally, we were supposed to do just the elementary schools, but since we finished the last elementary school this past Wednesday, we are moving on to middle and high schools. We typically are in the library, which reminds me of my own high school time where I spent most of my time in the library. We did not get to do all the elementary schools, as some did not have enough iPads to justify having a contractor come in to do them and others were completed by internal IT teams. I did get to visit the three elementary schools that I attended. I was really young when I was at Cary Reynolds and lots of additions were done since I was there so it looks nothing like I remember. Woodward has a whole wing that was added to the entrance I remember. Fernbank changed the most, as it was completely rebuilt starting in 2012. The old building is now a parking lot and the playground is where the building is now. The Science Center looks the same from the outside at least.

Working in schools has reminded me of how desperate our schools systems are. Any help at all, even help that makes them go backwards at first is appreciated. The kids are still kids.

Several times over the past couple of months, I have been negatively impacted by different artificial intelligence (AI) systems. AI has started to show up more in popular media recently as well. Unfortunately, there is a slight misunderstanding of what constitutes an AI. Most people when they think of AI are actually thinking of Natural Learning (NL), whereby a system is taught somewhat like our children are taught to understand their world. AI encompasses anything that is artificially created that makes intelligent decisions. Your phone is AI. Your home thermostat is AI, even the old mercury based ones. AI and NL are not things to fear in themselves, but rather certain poor implementations of them.

An example of a negative impact that most of us with cell phones has experiences is Auto Correct. How many times have people said something inappropriate or humorous as a result of auto correct? It is nice that it fixes TEH to be THE, as that is one typo I consistently make. The problem is the NL part of this. At some level, we have to train the AI via NL or something akin to it for auto correct to work. So each of these humorous mistakes is actually reinforcing the NL to continue to make that mistake. As someone who is dyslexic, do as I intend for you to do which is not necessary what I say. AIs and the computers that run them tend to be literal.

Imagine existing in today's world without a cell phone or email or text messages or GPS navigation systems. Or worse, what if you got the wrong information from them? The failures over the past months have caused me everything from humor to embarrassment to inconvenience to potentially a fine. And in each case, I did not realize there was a problem until long after the problem started occurring. We have this expectation that technology just works. And when it does not, we want it to be fixed quickly. For me, having technology fail is normal. This is probably part of why I work in the field that I do: If something can fail, I will probably make it fail. I try to ignore the minor failures. As technology systems become more complicated, diagnosing failures and fixing those failures becomes increasing difficult. There are so many pieces to understand, it becomes difficult for even the most talented of us to follow.

As an example, I discovered about a week ago that some people or perhaps everyone was not receiving emails from me. I am not even sure at this point when it started since sometimes emails got through. Yesterday I spent the entire day diagnosing the problem. Until yesterday, I had 9 email addresses. They each have or had a specific purpose. It will be difficult for me to give up any of them as even finding what services use a particular email address will be difficult. As a part of figuring out the problem yesterday, I discovered one email address was totally non-functional and that I actually have a 10th email address that I need to monitor. I began the day by sending one email from each of my 9 accounts to all of the email addresses including the source email address. What I discovered is that things were very inconsistent except for the one email address that I was not even aware had a problem until doing this. The two email addresses I knew I was having a problem with did in fact have a problem. Or more correctly, there were multiple problems and sometimes the problems only sometimes caused a problem. I am still not sure that I have fixed all the problems. All I know at this point is that I can send emails from all my accounts to all the others, except for the 10th email address that has an unusual purpose and is not really an address I can send to.

So what did I learn? Some receiving email services silently reject emails for some unknown reasons. Some email services are more aggressive at marking mail as spam than others. Yahoo seems to mark more as spam than the others. In fact, until I added all my email addresses to the safe list, Yahoo marked all of my emails except the one from the Yahoo address as spam. Kind of funny to send yourself spam. I also learned that Google (gmail) is the only one that does not silently reject emails. The last thing I learned was that Apple sucks at automatically managing email settings. That is not exactly true. I knew this a couple months ago when I determined that Apple was not using the correct security settings for Yahoo Email addresses and filed a bug report to that effect. Trying to fix that problem may have in fact contributed to by current woes. The latest version of MacOS Sierra does have the correct settings for Yahoo, but you have to use an undocumented tool to prove that and you may have to delete and recreate the account on your Mac (and perhaps iOS device) to get the right settings.

So perhaps the biggest take away is that if an email, text, or voice mail might need a reply, you should probably reply just so the other person knows you got the message even if you are not yet ready to take action. And if you do not get a reply from me, hopefully that just means I did not think it needed a reply.

To be continued.

Friday, January 6, 2017

Assessment Time

Yes, it has been awhile again. Until the holidays, things were pretty much the same: Moving slowly. The past couple of weeks have been impacted by the normal holiday events. But that time has past. When I started this adventure almost a year ago, the plan was to assess where I was come the New Year. The New Year has arrived. This week I have spent assessing where I am financially and project status. Financially is fine. I could continue as I am for another year. But then the tanks would be completely dry. As for my current project, it is taking much longer than I had hoped. I am spending more time working on the art assets than actual code. I can do the art, but it takes me much longer than I want it to. It is tough when you can see it in your mind, but what comes out of your hands is not the same.

Finances were never such that I could afford to hire an artist, nor do I have enough volume to really need a full time artist. Spec art work tends to be expensive for those that talk about prices. Finding someone trustworthy to do spec work is a challenge as well. An artist has to eat just like the rest of us, so asking for free or cheap art seems wrong to me. And I tend to believe that you get what you pay for: If it is free or cheap, it may not be worth anything. Or even worse, it may be cost you more in the long run.

For my current project, I will be shifting to limiting my own art work to the bare minimum and spend more time focusing on functionality. The intent being that I get it to a point where involving an artist makes more sense. Or in a dreamy world, I magically become faster at art. I will continue to work on my current project until the end of March. Then I will assess where I am again with this project.

Farther out, I feel I can continue working as I am until the end of June. At that point, I will shift gears and start looking for outside work. Much like I did last time, I will be picky to begin with by looking for something with an organization that I believe in first. After a month or two of that, I will shift to looking for higher paying IT contracts. The higher paying contracts usually require travel. The intention then is to work long enough to save enough to go back to game development again.

Another reason to not write was the political world. I started to repeat myself. There was not a good choice. Trump was elected and now deserves your support. If you do not like that, then I suggest you figure out proper ways to change the political world. This was the year for an independent candidate to make a good showing, but none did. Rioting in the streets is not the answer. Whinnying about it does not help. So put your adult pants on and suck it up. I hear Ireland is a nice place to live and loves Americans. Canada might start shooting Americans. Mexico would kidnap you until they figure out you are worthless and then shoot you. California should secede. Nevada probably has to go with it to be viable.

In the mean time, perhaps fate will smile on me and the perfect opportunity will come knocking.

Wednesday, October 5, 2016

We Need More Math!

Recently I have been mired in utilizing rusty math skills. It is frustrating knowing that you can do something in math, but not remember how. Math is all about tricks. Everything derives from some simple rules. Multiplication is just adding repeatedly. As the tricks get more complicated, they come with their own restrictions. Remembering that there is a trick is better than taking the long route. Want to leave a 15% tip? Take the amount, move the decimal place once to the left, making the number smaller. Add half that smaller number to the smaller number. Presto, 15%. Need to know what angle a solo cup rests on a flat ground at? Arc-tangent to the rescue. Need an object to spin? Matrices to the rescue. Which is bigger: 3/4" or 7/16"? Common denominators help. Want a picture to be as big as possible in a window without it being stretched? Ratios are the answer, with a little Boolean logic to help. Math for some is hard. Learn the tricks, and it becomes much easier. Sometimes it just takes one trick to make it all easy. I keep saying this, but math is taught backwards. We should teach the why first, then work your way backwards through the hows.

Below is a screen show of what I am currently working on. It is a cross between a level and a mini-game. The final result will probably look much different than this. This is only one part among many planned. The players for this part are the round robots both in the light and the dark. It is amazing both that it is this for so quickly and take being this slow. Parts that I thought would have gone easily have been slow. Those that I expected to be harder took much less time. This lighting and sizing is being my current biggest challenge. Lighting is a known issue with Unity. Not quite time to put lipstick on the pig yet.

Tuesday, September 6, 2016

In Real Life

Another long break between posts, so there is a lot to cover. I have purchased a Unity license although it was more challenging than it should have been. I setup a similar test application using Unity that I was using with MonoGame. The process to do so was completed in a week or so: much less time than expected. I had spent a couple weeks about a year ago with Unity tutorials, so I already had a leg up on how things worked. It was still nice to get something that worked on all but one of my currently available platforms. Prior to last week, I have spent a couple weeks working on the first game. Of course I stumbled upon some of Unity's lackings, but so far nothing that I have not been able to work around. Last week was a trip to Ireland. Yesterday was a holiday. Today through the rest of the week will be in the mountains.

Ireland was amazing. We spent a couple days in the Killarney area followed by a couple in Dublin. Killarney reminds me a lot of the Highlands or Helen. Small town, lots of small restaurants and pubs. Temperature was mild, warm enough to not require a jacket and cold enough that jeans were comfortable all day. The people bring new meaning to the term friendly. Yes, it is a little touristy. Everyone was helpful and kind. There is a large park area that we drove through on one of our touring days that looked just like the mountains of the southern Appalachians. The park was filled with mountain laurel, rhododendron, and scrub trees. Had that same fall temperature feel as well. Mountains, sea, and plains all right there. I did walk a sea beach, but it was too cold to even think about going into the water.

Dublin, while still a small town in comparison to big cities I am used to, has an old city feel like Washington DC or New York. It is however much older. There are no mega tall buildings. There is plenty of history. The people are just as friendly as they were in Killarney. It was fun to watch Georgia Tech Football in another country, even if it was configured with a bias for Boston College. Irish Catholic school, go figure. At least we now know that 4th and 19 is possible. Go Jackets!

Facts I find interesting: Ireland's land area is slightly more than half that of Georgia. Ireland's total population, both Ireland and Northern Ireland, is about 60% of that of Georgia. The Republic of Ireland's population is less than the Atlanta metro area. If you turn Ireland just a bit, it almost entirely fits inside of Georgia.

A slightly strange thing is the English abbreviation for Ireland is IRL. To me, that stands for In Real Life, an old BBS/gamer term.

Now onto the north Georgia mountains and next week back to game development.

Wednesday, August 10, 2016

Mistakes of others

It is hard paying for mistakes of others. Usually there is some complacency on your part. Perhaps you were in the wrong place. Perhaps you believed someone who was not being truthful. Accepting responsibility for something you did not do is also difficult to swallow. To be a better person, sometimes you accept responsibility. You move forward.

I look at the decisions made four and eight years ago and wish we had those decisions today. Each four years gets to be worse and worse. There needs to be a Moore's Law for elections. It would be an ugly law.

Almost three months ago, I decided to pursue using MonoGame as my platform of choice. Would that I could change that decision now. But that would be taking the bad with the good. I still believe in the concept MonoGame promotes. Unfortunately it is not reality. Open source projects always have issues. MonoGame claimed to cover the platforms I wanted as options to target. Unfortunately, it is not in a state to actually support those claims. A benefit of having access to the source is that you can go fix problems yourself and contribute those back. It is hard to contribute when your primary platform is constantly being broken unintentionally by others. Another truthism with Open Source is that those participating may have different and conflicting agendas. What I have discovered is that the different platforms were each broken in different ways. Fixing them would require becoming an expert in all of them. That defeats the purpose I wanted MonoGame to provide.

In my last blog post, I alluded that a decision point was coming. It has arrived. While the time and book purchases will have gone to waste, it is not truly a waste. I spent that time trying to determine if MonoGame would work for my purposes. In that I was successful, I proved that it does not work for my purposes. I could not know that with out having gone through that effort and spending that time. Perhaps one day, MonoGame will be what it claims. I hope so. It would fill a void.

So where does that leave me now? My fear for this decision was that it might end up me abandoning doing game development. To my relief, I have decided to continue with game development. I will switch to using Unity. Unity has always been a choice. In fact, I spent some time with it more than a year ago evaluating it. It does not give me the source or the ability to fix problems myself. I did not really have that with MonoGame even with having access to the source. Moving to Unity removes one platform I had interest in utilizing but gives me one that MonoGame did not have. Fortunately, Unity recently changed their pricing model. So had I gone with Unity three months ago, I would have had to commit to paying six times what I will be paying today. Yes, it was a significant price change for me. Unity is missing one piece of functionality I want. I will just have to work around that missing functionality. It will require more work on my part to implement, but much less work than becoming an expert in all platforms.

It seems to me there are two sorts of successful people: Those that just succeed without making mistakes and those that succeed in spite of making mistakes. I am glad to be striving to be a member of the second group. Even if it is the mistakes of others are what I have to succeed through.

Meh. Back to moving forward.

Thursday, July 28, 2016

Thrown Games

Yes, the title is spelled correctly.

Recently, I have been quasi-binge watching Game of Thrones (GoT). I say quasi because I sit down to watch one episode and usually watch a second, or four. Yes, I am late to the game. The series started before I finished reading the first book. I wanted to read first and watch second. You may think I am about to launch into how great GoT is. Well, I am not. Do not bother sending hate mail, I already know I am in the minority.

I am enjoying watching GoT: It is entertaining. However, it is not great. It is at best a C+. Yep, I can hear you movie first people saying "here it comes, another one to blast a movie/series because it does not follow the books." If there are people who watch GoT without having read the books first, I think they might be confused. I am well into season 3, so almost halfway through what is available. There is so much in the books that is not sufficiently covered in the series thus far. Entertaining. I look forward to certain points, dread others, and scratch my head over what is excluded. And that would not be the end of it, but it feels "off" or not quite right. It could be the directing, writing, or acting. It is hard for me to tell. There are certainly points of brilliance in each of those areas. But overall, I am not sure where all the hype comes from. It will also not be a series for everyone. Meh. I will still watch till the end or until I catch up to where I have read up to.

Facebook as broken something again for Sudoku Pseudo and has sent a breaking change notice.  Time to spend a few hours figuring out if it is a simple fix and what impact the breaking change has. Since I think I am the only person that plays it, it may just be time to write it off as a failed experiment. It was better when it was first written, before Facebook changed what apps are allowed to do.

On the proper game development front, I continue to run into problems with MonoGame. Well, more of the same problem really. I have bugs with the current "stable" version. Some of those bugs are  fixed in the development version or were supposed to be fixed in the stable version. I cannot seem to get building from source to work at all on my Mac nor can I get the developer built binaries to work. I cannot update to the latest version of the upstream tool either. Being a volunteer supported open source project, I am not getting much help solving my issues. I would gladly give time back to support it. It makes it hard to give back if I cannot get my primary development environment to work. This means I cannot support Apple TV. My fear is that when the next version of MonoGame gets released which is already two months late, it will no longer work at all on my Mac and may still not support Apple TV.

So where does this leave me? I am coming to a decision point: Should I abandon MonoGame as a platform. The problem then is what does it get replaced with. I have not found any other totally workable solutions. Each of the other platforms I have looked at have issues: Unreal does not work with my mac and is unbelievably bloated and slow on all the platforms I have tested it on. Unity has a monthly subscription and does not provide all the functionality I was looking to use. Lumberyard does not work on the Mac. Those are most of the big guys that have platforms available. I have a spreadsheet of 46 platforms that I have did initial evaluations for. Thrown for a loop.

Tuesday, July 5, 2016

Attack of the business

I finally got my development environment working for the most part. Randomly happened upon some instructions in release notes of all places. You know, those documents called read me or booklets that come with devices. Sometimes I read them. Sometimes they tell you just what you need to know. I have also gotten a git server installed on the NAS backup device. This will give me two backup copies of future development efforts. Backups, they are a good thing.

In the last blog post, I mentioned I stopped reading Facebook but continuing to play a few games there. Now I am mostly oblivious to world news. And I find that I do not mind that. I do miss knowing things about friends who are still active on Facebook. I also miss some of the funny posts. Unfortunately Facebook forces you to wade through too much shit just to maybe find a few nuggets. If they aren't hidden from you. It was better when they gave you more control over what you saw or didn't see.

Sometimes when going to the Facebook games, I read the first page of my news feed, the one where they put what should be most important to me first. For the past two days, it has been the same post with the second day having more comments. I would have read the post before, but it wouldn't have been one that I was "interested" in. I certainly would not have read it twice or read the comments at all.

This led me to thinking about how companies go about retaining you as a client. Facebook does not seem to want to retain me as a client. Nobody at Facebook will call me or email me or even message me to ask why I do not seem to be interacting anymore. I am one person among millions. Facebook gets revenue by showing ads and using your shared information to profile you. Since I have an ad blocker, I never saw ads. So perhaps I was more of a cost to them than a benefit.

Then there are the horror stories of people calling Comcast to cancel service. Comcast will bend over backwards to keep you. If you are a customer of Comcast, it probably behooves you to call them up to see if you can get a cheaper rate. You just have to threaten to leave. You don't actually have to leave.

Next there is a company like Omaha Steaks that thinks calling every couple weeks will get me to order more from them. No, actually, this just makes me order less. Seems to me you have to pay someone to make those calls. That must make your expenses go up, which in turn makes your prices higher.

Then there was some company that was robo-calling. I answered the phone the first time, said I wasn't interested and hung up. 10 minutes later, I get another call from the same company but a different person. The person started with the same script. I told him someone from your company just called me 10 minutes ago. That apparently wasn't in the script, so he kept on. I asked him for a credit card number, figuring he could pay me for training him. He refused. I then asked to speak to a manager. He wasn't so sure about this. I was a little irate at this point. The company wasted my time TWICE. Finally he put me on hold to go get the manager. I decided it was time to hang up before the manager got there. Maybe I will be on their do not call list in the future.

Another one is the company in Arizona that handles calling customers for the local Toyota dealership. They have my cell number because that is the number I want the service people to call when they are working on my car. They can't seem to understand that I do not drive enough to service my car every three months. As if this wasn't enough, because the car is in my wife's name, they call asking for her on my cell phone. This one gets resolved because I have added their phone numbers to my iPhone's blocked list. About once a year, they get a new phone number, still in Arizona mind you.

American Express sends my business a multi-page customized color invitation to get a card every couple weeks. Not months, weeks. This after they already said no to a prior application. I don't need the card. It was to serve a specific purpose, which I met by other means. So sending me something that costs a couple dollars is just wasting money.

Think about how you would want your doctor, auto mechanic, bank, or grocery store to treat you. What can they do better FOR YOU?  Have you told them this? Have they asked you? I usually fill out surveys; that is until they start asking silly questions. Would I recommend them to a friend? If they did a good job, probably not. If they did a bad job, yes people I know will hear about it. I mean really, when was the last time you recommended Home Depot to anyone? Yes, go to Home Depot, you will need to go back again in the same day.

Here is a wild thought: If a business that you current deal with, changed for the better, would you pay them more? More to get what YOU want. If Facebook were to show you what you wanted, how you wanted, without ads, and without promoted posts, what would it be worth to you? One dollar per month? Five? Ten?

This came from someone else, but I use it myself for game purchases. Generally, I expect a game to provide $1 per hour's worth of entertainment. A $5 game should give me 5 hours of entertainment. A $50 game should give me 50 hours. Sometimes I get more entertainment and sometimes much less. But that is the target I use when looking to buy a game.

In today's business world is pays to know who your customer or potential customer is, how you should interact with them, and what they want from you. Do your best to not waste time either yours or theirs. Time is a valuable commodity. Listen to what they want. They may not be right, but that does not make them wrong either. This is how local small businesses thrive.

Monday, June 20, 2016

E3 and Facebook, the way of the dinosaur?

Yes, I missed blogging for two weeks. First was due to being focused and second was because of E3. Status has not changed a whole lot. I have mostly settled on a technology, but unfortunately one of the dependent tools upgraded versions. The framework I want to use (MonoGame), has not yet been updated to that newer version of Xamarin. Being that it is open source, it may be on the verge of being abandoned. MonoGame is a clone of XNA for other platforms. Microsoft abandoned XNA four years ago. Microsoft did buy Zamarin which does promote the use of MonoGame. I am still evaluating if MonoGame can do what I need it to. Having it be completely broken right now does not make it look good.

E3 was very underwhelming. It was borderline bad. It makes me question whether I am going next year. As a comparison, last year I had about 40 games that I took pictures or videos of. This year, I took 3. Three.

This year Sony decided to make a mobile app to register for their most popular properties instead of having lines. They released slots when the show opened and by Thrusday, they were gone in minutes.  I think this is a major fail for Sony. First the miss out because people did not know they needed an app to see or play demos. Second because those people were not standing in line inside Sony's booth, they were in other companies' booths instead. Given a choice between not playing a demo and waiting in line to play a demo, waiting in line wins as long as it is not hours in one line. Those that did have lines in Sony were so long they were mostly outside the booth and hours long. I would have liked to have demoed Farpoint, Sea of Thieves, and Recore. Sony did not even show up with any new hardware other than VR that they showed last year I did see a play through of Days Gone By, as they apparently couldn't fill up the theater from the app and were begging people in the area to come see it. I did not see anything that makes it stand out from the 101 other zombie shooters out there now.

Nintendo: why did you bother showing up? You thought it was appropriate to show up with only ONE title and no new hardware. Not even VR? No open booth. One long line that was closed the eight times I tried to get in it. I even sat near the end of the line to see how fast it moved. 10 people every 15 minutes is pretty slow. And looking inside your booth from the portals had it being mostly empty. Your convention people looked tired and harassed. Good luck getting people to work your booth next year. Tell you what, there was a tiny company in a booth next to yours that was doing ultra cheap VR. Perhaps you could gobble them up. At least they didn't have a line and had more people per square foot in their booth than you did. I would have like to have played the Zelda demo.

As much as this scares me, Microsoft was the closest to being a winner this year. Yes, they did cancel Fable Legends mere weeks before the show. They did show the new slim Xbox. It is not any more functional that the existing Xbox One, but it is smaller and does not have a brick. I did play a couple games on them. Comparing the heat output from the regular Xbox Ones to the Xbox One S had the S being much cooler, as in cool to the touch. Microsoft also came loaded with games to show off. They had to make up for Fable some how.

Lastly, I have stopped reading Facebook. Even after significantly trimming three times, the amount of time I was spending kept growing to more than two hours a day. Most of that time was scrolling past posts I had no interest in seeing. I do not need to see every post someone else likes or comments on. I still play a couple games there. I wish there was an easier way to see what I want to see. I need life, not Facebook Lice.

Wednesday, May 25, 2016

Frustration and Taxes, the new promise

Hopefully this does not end up being too long. Frustration and Taxes. The component that I found last week turned out to be a dud. Frustrating in that I had gotten focused on going down that path only to find it blocked. Even though it is open source, it is written in such a way that I cannot even debug and fix the issue. The example they provided did not work. Sometimes free stuff is worth nothing or in this case a negative amount.

Taxes are frustrating.  But probably not in the way you think. I pay taxes every month. I file forms every month, every quarter, and several times every year. But even that is not the point I am speaking of. People want to get the most value for their money. During a recent trip to Target, the cashier said to me that there was a $5 coupon for the item I was buying and did I want to use it? Realizing what they had just said and that I did not have any coupons, we had a good laugh about it. Of course I wanted to use the coupon they were offering me on the spot. Here we have the same item either for $30 or $25. The same exact item.

Taxes are just like that coupon, except in reverse. 30 years ago, I had it explained to me by a well off person that the goal to having more money was to pay less tax. People with money tend to know how to do this. But think about this a bit. What this really means is that anything that is taxed is something you will less want to use when compared to something not taxed. Let this sink in: Tax something you do not want done.

In a broad sense, any money a government collects is a tax. They do not call them taxes, but they have all the attributes of taxes. MARTA fares as taxes? Think about it. If MARTA was free, you would be more likely to use it. Of course, the government does not actually give free stuff. Anything given for free is paid for by taxes of another sort. Including MARTA or State Parks or Welfare. The government does not create money. It taxes something to pay for that free service. Police officers are paid by tax dollars. Public schools. Roads. But there are a couple taxes I want to point out specifically: Sales Tax, Income Tax, Employer Tax, and Commercial Tax.

Sales Tax says don't buy it. Or if you do, buy it in a way that you pay less tax. My parents reminded me this past week that this is a real objective. They were visiting, but only bought the bare minimum amount of gas while here. They preferred paying a cheaper price in a different state. So Georgia lost out on some tax revenue because our gas prices are higher because of taxes. Those of us that live here do not tend to notice. This is especially true for those in the Atlanta metro area, where gas prices tend to be more competitive and cheaper than the rest of the state. So don't buy gas in Georgia, because we tax it. National sales tax means those with the means will buy stuff from outside of the country to avoid taxes. If there is a way, someone will abuse that way.

Income tax says pay people less, but give them some un-taxable benefit.  Consider two jobs, one where you get paid $5 an hour and another paying $6 an hour. The $5 an hour lets you work from home so you have no commute. The $6 dollar job requires you to commute for 2 hours a day. Take the $5 per hour job as you save on taxes, fuel, and most importantly time.

Did you know that companies pay taxes for each employee they have? This is beyond the taxes taken out of your check. Employers have to pay extra amounts for Social Security, Medicare, and unemployment insurance. So these employer taxes say two things: Pay workers less and hire fewer workers. The Federal and State governments by their taxes want less people employed and those that are paid less. Think about that. Raise the minimum wage and even fewer people will get hired to offset the additional tax cost to companies. Sure people deserve a wage that allows them to be comfortable. But as long as you have employer taxes, companies are encouraged to do as little as possible.

Do you remember the Boston Tea Party from history class? The lesson in that was this countries aversion to double taxation without representation. Some corporations are structured such that the taxes on the earnings are paid by the investors (owners) of the company. Other companies pay taxes on their earnings, then the owners pay taxes on the profits. This is why Walmart does not pay a significant amount of corporate taxes, because that tax is paid ONCE by the investors instead of twice. Yes, corporations hide money. If given the opportunity, would you like to hide your wages from taxes? Especially if you could use that hidden money without restrictions? This is why company’s setup offices in Ireland and other foreign tax havens. Corporate taxes compel the companies to do so. It is not a problem of the companies avoiding taxes, but a problem of the investors not paying taxes.

So our current tax agenda would have you not buy anything, not get paid to work, and hide any money you do have in your mattress.

Government services have to be paid for somehow. Taxes that are fair, unavoidable, and minimize the negative impact are what we need. I do not know what that is, but I know this: The current proposals do not work. Want companies to hire more people? Keep income tax, eliminate employer taxes, and give companies a corporate tax break for wages paid. Want a National sales tax? Tax goods brought into this country at a higher rate than buying them locally. Unfortunately, that violates several trade agreements. Want companies to stop hiding money? Start taxing the movement of U.S. Dollars to other country, regardless of means. Forget double taxes. We already pay taxes on the same thing more than once. Give tax breaks for keeping the money here.

Is that all fair? Probably not. But think about it next time you see someone spout off a tax plan or spending plan to fix this countries problems. How can someone avoid that tax or how is that free thing paid for? Meh. Back to my hole.

Tuesday, May 17, 2016

A Tool of a Different Color


Every now and again, I get asked the question which computer technology is better X or Y? Usually X is Java and when X is Java then Y is most often C++. Typically this is a baiting question. Most Java or C++ programmers firmly believe their language is the best. To me it is comparing two things that are not the same. Each has its place.  This is true of many computer technologies. Java used to be the language of choice for writing something portable. C++ was the language for fast code. C was the language for small code, i.e. device drivers.

It seems that each new project I have started for the past couple of years both professionally and personally has required learning a new language or framework. Very few have reused a significant portion of an earlier project. Most programmers do not seem to do that. I seem to get drawn to new languages and technologies constantly. I attribute this to my ability to learn rather than my enjoyment of learning something new. There is a distinction there, because it has more to do with wanting to use an appropriate tool for the job rather than fitting the job to the tools I have.

Ever tried using a flat head screwdriver on a Philips head screw? Depending on the size and configuration, it can be done. It is rarely effective to do so. I have used a hammer to get a screw out by turning not pounding. I have used a screwdriver to pound a nail into a board. Having the right tool or at least a more appropriate one is so much better.

Over the years I have learned many computer languages/technologies: Honeywell Basic, Applesoft Basic, Integer Basic, 6502, 8080, IBM Basic, Microsoft Basic, C, C++, Java, Visual Basic, Visual C, Objective C, Python, Jython, Bash, PHP, SQL, HTML, CSS, JavaScript, Ruby, Ruby on Rails (vomit), 8086, 80186, COBOL, FreeMarker, and probably a bunch of others that I have totally forgotten about. That just covers what most would consider formal languages. The frameworks for each only serve to make the list even longer.

For the past couple weeks, I have been trying to determine which of three projects is the one I am going to work on next. Part of the problem is the technologies that are available to complete each. I would really like to use something that could be reused for all three projects. Learn once, use thrice. It has turned out that finding a technology that satisfies any one of the projects by itself is proving to be a challenge. The time is not wasted, just filled with learning new technologies enough to judge if they have the required functionality for any of the three projects.

And now it happens. Writing this caused me to search for something that did not make sense and I find what something viable for one of the projects, that probably also works for one of the others. I doubt it works for the third, but that is okay. I am happy just to have a technology that works for one of them. Meh. Back to my happy place.

Tuesday, May 10, 2016

Going back to my hole now

The past week plus have been a little random and all over the place. I had issues getting the iOS version of Maze Pseudo through the review process. It is all good now. Apple TV and iOS versions of Maze Pseudo 1.2 should be available in their respective app stores. So the rest of this are random minor thoughts to go with a random period. Some of these may get future longer blatherings.

Last week saw the second abandonment of a project, Catalog Pseudo. I'm thinking Good Reads is what I am going to use as a replacement. Now if I just had time to do that. Meh. Back to my hole.

When I was a single dad, I made a grocery list that had all of the items I usually bought at the store. I would print a copy, mark off the things I already had. The list was organized by store isle. That was the basis of one of the projects on my list. It is out of the running for the moment. Even though it has the most potential, it would require the most work to complete. Meh. Back to my hole.

Two of the projects on my working list turned into one. Then they turned back into two. Meh. Back to my hole.

There were 6 times more Android devices sold last year than iOS devices. I still like my iPhone and iPad. Meh. Back to my hole.

Apple expects to sell 24 million latest generation Apple TV units in 2016. That is more units than either Nintendo sold of the Wii U or Microsoft sold of the Xbox One in 2015. I wish the Apple TV platform was a little less restrictive. Meh. Back to my hole.

My mother is one of the best people I know in the world. I would think that even if she weren't my mother. Good for me that she is. Meh. Back to my hole.

Purple is my favorite color. Hawkeye is my favorite comic book hero. Hawkeye from the printed Marvel comics has a purple suit. Hawkeye needs his own movie to explain why he does not get to wear his purple suit. I made my own purple Hawkeye costume back in the day. Meh. Back to my hole.

I know someone who struggles. There is nothing I can do for them. You do not know them, but you may know someone else who does struggle who you can help. What are you waiting for? Meh. Back to my hole.

Someone posted a graphic asking if you had ever been had a gun pointed at you to promote gun control. I did not respond. Yes, to the head, while on my knees, 30 plus years ago. I vehemently support the right to bare arms and would own a gun if I could afford the time. Just pissed off 90% of those that read this. Meh. Back to my hole.

My music tastes generally align with the current pop music scene except for some obscure stuff. As far as I know, none of my friends or family has musical tastes even remotely similar to mine. Meh. Back to my hole.

In my primary school years, we were told you could grow up to be anything, even President (POTUS). I do not particularly want to be POTUS, but I would though. I would be a darn good POTUS. Big boy problem: Finding a candidate that is better than me. Seriously, it is me or someone better than me this year. Too bad for the two people that would seriously vote for me that I can't be President. Meh. Back to my hole.

Emptied a cereal box yesterday. Read the outside. It said "See code inside". Looked inside for my winning code and no code. Read it again and it said "No code inside". That implied there were boxes that had codes. Closed the flat and you could still see that it said "No code inside". Figured I could go to the store and find the winning box by looking at the flaps. To bad it really said "No Code inside. Learn more at kfr.com". Thanks Dyslexia for getting my hopes up. Meh. Back to my hole.

The two non-game projects are off the list for the moment. POTUS is wishful thinking. I am still working on getting the courage to do the non-computer project. That means I am officially a game developer. Hopefully forever. I hope this isn't another childhood fable. Meh. Back to my hole.

Random enough? Meh. Back to my hole.

Thursday, May 5, 2016

To Zero and Beyond

Here is another math story to tell a different story. I do have non-math stories. They just are not as relevant to my current events. Late in my high school years, a friend and I got into a discussion about if 1 divided by 0 equals infinity. I do not fully remember how, but we ended up trying to prove this on the chalkboard. It was after a test or something. Or perhaps a large portion of the class was excused for something. Mr. Hampton did not say if it was right or wrong. He let us go at it till the end of class, at which point we had filled half his chalkboard filled with work. He was encouraging and only interfered when we made a mistake, but not when we went down wrong paths. He laughed at us for what we were doing. Not in a funny ha-ha way, but in the joy that we were having a good time trying to figure it out. Here were students trying to use the knowledge he had given us for the pure joy of it.

We begged him to not erase our work. He agreed and taught the rest of the day using only the free half of the chalkboard. We had inconvenienced him, but he saw value in letting us have the thrill of learning. I remember going back later in the day, either after school or during a free period. We continued to work at it until one of us had to leave for something. Perhaps it was another class or sports practice or bus or ride home or somewhere else. We did not finish definitively proving it true or false. But that is not the point. The point was that Mr. Hampton gave us the space to try. He knew we would not be able to do it. We would have needed differential equations to even come close. We were not going to get that far in high school.

After taking differential equations in college, I remember thinking about our endeavor. I never went back and tried completing it. This may be totally wrong, but I think you can neither prove nor disprove it. You do run upon an axiom that states that any number divided by zero is undefined or something like that. Mr. Hampton certainly taught me to not be scared of math. Math does not have all the answers.

So this week has been filled with experimenting, spinning some wheels, and figuring out that time was up and to move on to something else. I thought last week that getting Maze Pseudo for Apple TV was going to be as simple as uploading and pushing some buttons. Turns out something went bonkers with Apple's development environment. I got a strange error message that was not helpful. I emailed developer support, but they just referred me to several web pages that did not help. I got it working. My fix was not the right way. I have been working with Apple as a developer for close to 40 years. You would think I know by now that Apple does not make it easy for developers. It has been submitted. No idea how long it will take to get approval.

The next project has been derailed as well. It is the one I started almost 5 years ago. At the time, I needed a way of tracking what books I owned, wanted or had read. I wanted this information on my phone so that when coming across books for sale I could determine if I already had it. I used to use a database application on my Palm for that very thing. That is the simple description of what it was. When Apple initially released iCloud, the framework for utilizing it was not compatible with the way I wanted the data to be structured. Because of iCloud, the expectation would have been that the book data would be sharable between devices and machines. Another conflict was that I wanted the data to be available even if you did not have connectivity. That was something iCloud does not natively provide. I abandoned the project at that point.

After last year's WWDC, I realized that Apple was now providing functionality that would allow me to do what I originally wanted. When time allowed, I revived the project, modernized it, and started working integrating it with iCloud. Unfortunately, I have discovered that while what I want to do is possible it is not trivial. It will take a significant amount of work and rework to get it to the right place. Now 5 years later, there are other products available that do most of what I want. They do enough that I do not feel that spending the significant amount of time on my version is beneficial. It is still possible, just the cost outweighs the benefit.

I have learned a lot from it, so I do not look at it as wasted time. And this is how it connects to the story I started with: Sometimes you have to explore a path because it is a path you want to see. The path may not go anywhere. As long as you do not walk off a cliff, you hopefully garnered some benefit.

This is another facet to why I dislike talking about my personal projects until they are close to being something solid. The feedback I get is rarely useful and sometimes down right discouraging. Suppose you were painting a picture and someone asks you what you are painting. You reply, "I am painting a bowl of fruit". To which you might get a variety of responses: It doesn't look like a bowl of fruit. Wouldn't it be easier to take a picture of a bowl of fruit? Ever heard of Picasso, he has some wicked fruit bowl pictures. You do know that apples are supposed to be red, right? Meh. I do what I do because it is right for me. If it is right for me, then it will be right for someone else. It does not have to be right for everyone.

Now onto a much bigger problem: which of the four plus one projects am I going to work on next? Probably time to do a plus minus chart with a sprinkle of math. At least there are not an infinite number of projects on the list and no time to work on them.

Friday, April 29, 2016

Going Backward to go Forward

Yesterday I did a blog post. I did not advertise it. It just did not feel right. I took it down and this is its replacement. It was long. It was too much soapbox, although all of these have a soapbox. So the theme now is going backwards to go forward.

The day before yesterday, I finished a piece of functionality for Maze Pseudo that has been on the list for a while. I have done it before in previous incantations of the game. But this time, it worked out differently. The feature actually destabilizes the game and makes it less fun. So what am I going to do? Remove the feature for now and until I can figure out how to make it so that it does not detract from the rest of the game play. This is going backwards to go forwards. I will not delete the feature, just mask it out of the production version.  Yesterday, this was going to have the impact of I would be done with the Apple TV version within the week. That was a inaccurate estimate, because today I am done with it. I have sent the bits that need proofreading to the appropriate people. Once those changes come back, I am already to submit it to Apple.

This also means that I get to focus next week on my next project. It is the project I started years ago, abandoned, revived it a couple weeks ago, and will now try to finally finish it off. So in a sense, I am going backwards to go forwards again. I hope to finish work on it by the end of May or before heading to E3 in June at the latest. After that, I have not decided. There are still four other projects I want to do. Five if you count a non-computer related project I want to figure out how to do.

Yes, here comes the soapbox. But keep reading. It is not that bad. Two days ago was national tell a story day (April 27). I only know this because of an old friend's blog post I read yesterday. Yes, already one day late and now two days late. So my story is going backward, to show that we really have not gone forward.

For me, elementary school was grades K thru 7 and high school was grades 8 thru 12. I did not have a middle school and high school had 5 years instead of the normal 4 years. In 7th grade, the school system gave us standardized tests for the various core subjects: math, English, science, and the like. The test results were used to place us into an appropriate level core class.  For math, science, and English, I was placed in the on-level group.

In 8th and 9th grades, I had the same math teacher. She and I were definitely not on the same page. I do not remember the reason at the time, but I refused to do home work or participate in class. It was not that I did not like or respect her. I just did not want to do the work. When tests came around, I routinely got 100% on them. I think there was even a test where I got something marked wrong that turned out to be wrong on her test key and that my answer was correct. She wrote notes to my mom. She called her. I think there were even a couple discussions with councilors and principles. Yea, it was bad. Even when I did my homework, I would not turn it in.  She could not bring herself to fail me, even though the zeros for class work said she should. I obviously knew the material.

At some point, she figured out that I was in the wrong level and told me that. Unfortunately, there was no way to put me into the right level because they had already moved too far ahead. Looking backwards, I was bored; very bored and frustrated. At some point, she just let me be. A willful teenager is hard enough to manage as it is. And here all of my high school years were going to be spent in the wrong level of math. Each math teacher after that knew this. They did the best they could for me.

But all of that is an effect. As far as I know, nobody actually determined the cause. In hindsight, I am guessing that something went wrong with the standardized 7th grade math test. It was one of those number 2 pencil shade the boxes tests. I probably skipped a question or answered one twice and got the boxes marked wrong. I think that the 7th grade teachers had an impact on placement. But if I did poorly enough, the math teacher would have only been able to put me in one higher level, not two. Regardless of what happened on the test, it was the test that placed me wrong.

I hate standardized testing. The best you can hope to know is that someone is good at taking a standardized test for a particular subject. This only comes to mind as I see my teacher friends congratulating their students on getting through two weeks of testing. That is sad to me. Here 40 years later, we are still using standardized testing to determine the fate of someone's future, including teachers and schools. Parents are supposed to have the option to opt their children out of testing. School systems do not make that easy. Teachers cannot discourage the testing for fear of loosing their jobs.  It is federal money on the line.

For me, it was not until my brief period of attempting college late in life that I realized I actually enjoy learning. Why could I have not gotten that in primary school? Education should be teaching children to love learning. Knowledge will come naturally from that base.

Friday, April 22, 2016

Debunking Facebook

Yes, it's been a couple weeks. First there was spring break, where I was only working half days. Then the past two weeks have been where I have been working 10-12 hour days. No problem, just into what I am doing. That is porting Maze Pseudo to work on the Apple TV. The tasks I started with have been easy. It has been the gotchas along the way that slow me down. Like artwork. To get something already functional on iOS to work on Apple TV required me making between 8 and 18 sets of 3 images. These are the new parallax images used for all the icons. I should have done 18 sets. I did 8. Took me two days. And they are not that good. Anyway, my task list has less than two weeks left.

Facebook doesn't understand when you change your habits very well. About 6 months ago, I unfollowed most news sites. Just after the beginning of the year, I started tracking how much time I was spending with Facebook a day "Catching Up With The World". About 2 months ago, I did another large unfollowing of most of the things I was previously. I spent a week looking at what a particular feed was posting. If it was not engage me a lot, I unfollowed. Do not worry, I did not unfollow friends. In fact, it is family and friends postings that I wanted to be sure I was still seeing. I still have things that I follow because they engage me. At some point, I moved to only looking at Facebook once a day. It used to be 2 or more longer sessions.

All of these shifts have not had a dramatic impact on time spent. Beginning of the year is around 2 hours a day and now it varies more but usually around an hour. What this says to me is that I am still engaging (reading links, watching videos) for about the same amount. I have also noticed that I see more things people like or comment on than before. Those I do not want to see. I wish we still had the option to turn them off. Share something if it is worthy of sharing. Like, err React, is for communicating back to the poster. I don't really care if a million people Haha something. There is also sharing too much or being to myopic in your posts. Twenty thousand cat videos gets you none of them watched or many of your other posts even looked at.

There are a couple of interesting things that have occurred. Right now, I do not have a real source of general news. I only see what people are posting/talking about. Top of that list is famous people dying. I tend to find out with a lag. But then that is all I see. Other news, like flooding in Texas is almost non-existent. Wait, there was flooding in Texas? Must not have been all that important in comparison to Prince. Prince is bigger than Texas. *nods knowingly to self*

Another interesting thing is politics. You would think it would overwhelm my feed. It actually doesn't. Most things posted are thoughtful or funny. Yes, there is the occasional spammer. I have friends that are obviously in most of the major camps. Except Cruz. I get nothing from Cruz people. Maybe Cruz people is an urban myth.

Lack of news doesn't seem to bother me. I do not stress about things I have no control over. I wish I had a candidate. I wish Facebook gave better controls over content. I want more meaningful unique commentary on the world! That or cat videos (apparently).

Friday, April 1, 2016

All The Printers Have Died

An almost funny thing happened to me yesterday: I discovered that we no longer have a working printer. That is not the funny part. I only discovered this when I was enabling some two-factor security and one of the steps required me to print a code. Yes, actually required me to print something that was equivalent to a password. Passwords are not supposed to be written down. That defeats the whole purpose of passwords.

We actually have two functioning printers. How do I know? Because I just bought cartridges for both of them to make them work. A couple weeks ago, I upgraded my PC to Windows 10 from Windows 7. Did it tell me then that the printer I had attached was not going to work? Nope. Didn't tell me anything until I tried to print to it from my Mac. Yes, the Mac speaks to that printer, but only when it can do so through another computer. That other computer, my PC, no longer speaks to that printer. The other printer worked with Windows XP and worked somewhat with my Mac. But when I went to try it, it decided that printing only some of the colors on the page was appropriate. Specifically, the color for the border and the color for the text saying you should keep this paper in a safe place. Forget anything else that was needed.

Both printer manufacturers have refused to build new drivers for the printers, despite the fact that both still sell new cartridges. Being a software developer, I wonder why it is not just someone needs to push a button to compile a new driver. Perhaps do a couple tweaks to meet new Windows or OS X demands. How much more complicated can printer driver technology get? Oh, Apple is releasing a new color, which means all the existing color printers won't work. Microsoft will shortly be scrabbling to make a faux color of the same color to keep up. Microsoft being Microsoft will make 10 shades of it that only a lithographer can see the difference between.

This all got me to thinking: 50 years ago, we were not going to need paper any more in 10 years and all the paper trees were going to be gone anyway. Maybe it was 40 years ago in 15 years. No, that does not make sense. Perhaps it was 30 years ago in 20 years. Well, shoot, so much for predicting the past. In the 1980s, computers actually caused us to use more paper than ever before.

After doing some research, I have discovered that the Paper Manufacturers have Lobbyists. Yes, Paper Pushers Pushing Paper. Apparently it is a misconception as to what the Paper Pushing Lobbyists do. It is not fighting to allow Paper Production Plants to Produce Pollution. It actually is to get congress to create a Anti Paperless Economy Society or APES for short. APES forces computer hardware and software manufacturers to perpetuate the requirement for paper. The U.S. Post Office exists only to deliver paper in various varieties. Packages wrapped in paper. Paper charging you for paper. Paper to convince you to buy more paper. Our landfills are overflowing with PAPER! Oh, yes, that is right, you recycle paper. You know what happens to recycled paper? Straight to the dump. Think of all the paperless children in China with nothing to draw on.

Meh.

Maze Pseudo has passed the App Store review, but releasing it on Spring Fools Day seems wrong. Perhaps I will remember to do it tomorrow. Does mean that I will wrap my current old project up for a couple weeks while I go back to Maze Pseudo for Apple TV next week. That and buy a new printer and new paper, since I doubt a new printer works with old paper. Can't teach Old Paper New Tricks.

Friday, March 25, 2016

The App that I want

Status first: I never remember this, but once you submit an app to Apple for review, you really do not want to be changing that code in case you need to make changes. So now that Maze Pseudo 1.1 has been submitted, I do not want to immediately work on Apple TV enhancements for it. Additionally but not really a roadblock is I need to alter the service name registration for Maze Pseudo. That should take another week or so. Good thing I have multiple things on my list of projects.

I started an iOS project 5 years ago and abandoned it when Apple released sharing data via the cloud amongst several devices. The mechanism to share data was going to make the app not function very well and the expectation that it would share the data. I realized recently that last summer, Apple made enhancements to their cloud infrastructure that allows the app to be viable again. So I have been spending some time working on that code to move it forward into current technology. And behold, I ran into a registration issue with it and Apple. Nothing that is earth shattering, but until I get that straight with Apple, I cannot test the functionality to be done next on it. I can write code for it, just not test it.

As for the app that I want: I cannot have it. At least not right now. Social media generally has gotten unmanageable.  Various platforms have gone to a model of determining for you what you want to see, how you want to see it, and how you interact with it. Mostly this is driven by the desire to get advertising dollars by keeping you constantly engaged with it. I want social media to occupy less of my time, not more. It should make my life easier, not harder. To that end, I want an app that takes various social media platforms and combines them into a single place. Pull Facebook, Twitter, Instagram, Reddit, YouTube, a couple free standing forums, and some blogger feeds into a single combined source. From that source, allow me to divide it into groups of items. Groups would be customizable. For me there would be a group of important items that would be family and friend's postings (not sharing, liking, commenting), but actual posts about themselves.. It probably includes a couple people that I follow that are important to me. This group would be the one I would check frequently. I would have a group for News, i.e. the networks, newspapers, etc that I used to follow until it made reading my feed impossible. I would have a group for games, just so I could find those posts when I was in a place to play the games. And lastly a group of other interesting things for times when I have more time to catch up, i.e. friends shares and feeds that did not fit into one of the other groups.

I want the items in the groups to be ordered oldest first. I live time moving forwards, not backwards or in some random order that a computer thought I might like or worse in an order that someone else paid you to put it in.  I want to be able to swipe right to save an item for later. Swiping left would mark an item read and I would never see it again. Some other action would allow me put the item in another group or mark the item as liked or to post a comment or reply or to follow it more closely to see future comments or replies.
I want to be able to set up filters to hide, mark items as read, or move them to a specific group based on word content and/or type of item. This way, I could remove those postings about Hillary Clinton, Bernie Sanders, and Donald Trump and still see the things from fans of those people that are not related to politics. Yes, the blog post just got filtered away. So sad, said nobody.

I want to be able to move from device to device and share the state of items across all devices. This way, I could check the important group on my phone while out and on my iPad while watching TV, watch the videos and read longer items on my Macbook, and play the games on my PC. Or just mix it all up and do whatever wherever.

I want social media to enhance life, not take over life. The social media items that are most important to me probably do not contain a picture, video, or URL. They probably do not have hundreds of stars or likes or retweets. They are the hand typed short editorials by people I care about. They will say happy things like I had a great day today or its beer-o-clock. Or the sad things like I had a crappy day yesterday or beer-o-clock ended an hour ago. Or the funny things like somewhere in the world right now it is beer-o-clock.

Tuesday, March 15, 2016

In the Zone

Several times over the past two weeks I have caught myself being in the zone: that state of ultra productivity and high focus where time drifts by without notice. Things like food and breaks get forgotten. It is nice to see that I can still get to that state while coding.

As to where things are, I have finished the performance network related changes, adding encryption to network layer, and help information to Maze Pseudo. I am close to a release point for it. After getting it released as is, next up is porting Maze Pseudo to work on Apple TV. Same product, but some additional requirements that strictly benefit the Apple TV environment. Some of the recent changes have been to support going in that direction, so it is not exactly a new project as much as a next milestone. In the grand scheme plan, I am about two weeks past where I wanted to be. Two weeks at this point does not concern me.

Monday, February 29, 2016

100 Different Directions

Everyday we are bombarded by having to move in different directions. That does not change when you work for yourself. Every action becomes an evaluation in what you are doing next. Last week for me was mostly occupied with speeding up the networking code for Maze Pseudo. While that does not mean much to many, it is a direction that I choose to follow. It is and was such an engaging task that I decided to not write a blog last week. So that covers the direction not taken. I have a little more to do on network and then it will be on to a help view. There are other tasks left, but that is probably enough for me to want to do a release.

Choosing what to blog about recently has become more challenging. Not that I do not have things to blog about, but choosing which one. Even spending the few minutes to do this gets interrupted with E3 housing contemplation. Sometimes these distractions are useful in that they give our brains more time to workout in the background other tasks. This is why I find myself particularly productive on Mondays. Other people are too busy on Monday to bother me and I have had a two-day break.

I want to talk about politics. I really do. But probably not in the way you think. In past years, it felt like there were a couple bad choices and it ultimately comes down to choosing the lesser of two evils or throwing chance to the wind since my vote rarely counts: I don't think I've voted for the winner in many years. But this year, I really want a good candidate to vote for. The top runners scare me. Good people do not run for office. Or perhaps they are only good because nobody has put them under a microscope. How do you find someone in politics to believe in?

Perhaps I do not want to talk about politics. Distractions. Back to working on things I have more control over: Squirrels!

Friday, February 19, 2016

Difficult and Self-confidence

Many years ago when speaking to a professional colleague, I said if it is difficult to do, you probably should not be doing it that way. It was in reference to doing Java coding for a piece of User Interface. That one statement has come back to haunt me many times, as well as being repeated back to me. But perhaps it needs a better explanation, as the sentiment applies in more situations than just programming. Back to that thought in a moment.

I have for some time noticed that people do not seem as self-confident as they once were. This seems to be particularly true of the younger generations and of females. If you are young and female, then you seem to get a double dose. I am not sure where this came from or how we got here. When I was in high school, I had many self-confident peers and role models. I am not sure they would have identified as themselves such then or now. But I still see, read, or hear of those people today and my impression of them has not changed. This is especially true of the females from that time of my younger life. Today they are still people to look up to.

So where did things go so wrong? I have my own self-confidence issues, but I usually recognize them and have my own method for dealing with them.  I do have a couple suspects: school testing and social pressure.

Tests promoted as a means of measuring your worth as an individual. Wrong: You can only be successful if you pass the tests. Right: Knowing how you failed a test makes you a better person. So perhaps the thought is you cannot fail if you do not take the test. I was in a chat room recently where a younger college aged female shared one of her New Year’s resolutions. She wanted to show more of her creative self this year, as in sharing artwork and videos she had made. Another female chimed in that she had you tube videos she had not published. The sentiment being these works were "not good enough" to share. I was floored. I did not know what to say.

Social pressure also causes angst. In order to be found worth in the current social world, you have to be perfect and never make a mistake. If you are not perfect, anything you create is not worthy of being seen. This is where females seem to get an extra dose. The expectation is that females have to smile and look their best in order to be taken seriously. Where did that come from? Nothing could be farther from the truth. I have done artwork. Some of that artwork has received praise. I am not an artist. I am not perfect. I do not want to be perfect. I do art when I must and it is some of the most time consuming work I ever do.

So what does self-confidence have to do with difficult? Something that a person finds difficult may cause them to loose confidence in themselves. Something being difficult means either you have not learned an easier way to do it or that there is a better way to do it. Just because I find artwork difficult, does not mean it is difficult for everyone. Some people are just better at artwork than me. There are things that I find easy that others find difficult. You should not let it being difficult diminish your self-confidence. Programmers are notoriously lazy, but this is with good reason. Lazy programmers make things that are easy to use.

Homework: If someone you know has a creative hobby, encourage them. Get them sharing. A lot of creative endeavors are easily shared in today's connected world. Yes, they will probably get the "it sucks" comments. But hopefully at least one person sees and appreciates what they are doing. If you are that creative person, are you sharing pictures or the work itself? You do not need to share 100 a day, 1 a week is enough. Share a picture of a work in progress of that sock you are knitting or wall mural you are painting. Post a character description from that story. Post that epic clip of you majorly messing up your lines for a play. Or share your latest completed awesome work.

Extra Credit: Find someone not famous who is sharing their creative endeavors that you do not personally know or know that well and complement them on their work. If you can't find a complement find someone else. There are plenty of people out there looking for validation and encouragement that you should be able to find something you like.

Short note on where I am: Still working with controllers for Maze Pseudo along with other enhancements. Current target is to be done with that in a week or two. Then it is on to Maze Pseudo for Apple TV for two to four weeks. After that is not determined, but there are several candidates. Lastly, I plan on doing this type work for the rest of the year. At the end of the year is my first decision point to determine if things are going in the right direction. Till then, I already have a job and have plenty to keep me busy.

#beawesomebeyou or #beyoubeawesome