Archive

Author Archive

Geek Cuisine — Making Cornbread

January 14th, 2012 No comments
Cornbread!

Growing up in the heart of Kentucky farm land, a staple of our diet was Cornbread.

For those who have never had cornbread. it is really more cake like than bread.  You don’t slice it in to thin slices and put sandwich meat or peanut butter and jelly on it.  Instead its typically baked in an iron skillet or other cooking dish, cut into squares like cake.  Its consistency is very grainy and it tends to crumble easily.

Sometimes its made into pancakes  and other time into muffins and its typically a salty buttermilk type of cornbread or a sweet cornbread.  Its color tends to indicate the type, with buttermilk tending to be whiter and sweet tending to be more yellow in color.

But this blog post isn’t about that.  It’s about learning to cook it.

Stereotypes are what they are, stereotypes and I’m an unfortunate by product of that.  Boys learned to use tools and dig holes in the ground and pepper rabbits with buckshot on a farm.  Girls learned how to cook.  In an urban situation, the actions by gender may be different but at the end of the day, more girls learn to cook than boys do.

Usually when you grow up, you learn to love your mother’s cooking.  Other mom’s just don’t do it right and if things work out correctly, those recipes pass down through the generations.   When I left the nest and got married, my wife (following stereotypes again) tends to do the cooking.  Cornbread was not a staple of hers growing up in Louisville and she tried to learn how to but we’ve always fallen back to using prepared mixes, with Jiffy’s sweet corn muffin mix being the best.

I lost my mom in 1997 and my father passed in 2002.  I sit here today, like I have for the past 15 years (10 in Dad’s case) in regret that I didn’t spend more time learning their recipes.  Mom’s Coca-Cola cake was legendary.  She made the meanest fried corn and country fried steak.  Man could she cook.  Of course she would always over cook her pasta until it was mush (no one is perfect).  And her cornbread was amazing.  Well I should say Dad’s cornbread.  Honestly I’m not sure I could tell you the difference, their cornbread was nearly identical, but I tend to remember Dad cooking it more than Mom.

Now while my father was one of the toughest old manly-man codgers you would have ever met.  There wasn’t anything he couldn’t fix or build and he never let anything like work get in his way.  He hunted, fished, played sports, de-horned and de-boyed cows with the best of them.  He was rugged, strong and stubborn (He was quite loving and kind too, but he rarely let people see that).  He’s not the kind of person you would expect to have finesse in the kitchen.

I don’t know if he learned it from my grand-mother or not or if he picked up techniques from Mom, but I do know that during World War II, while fighting at places like the Battle of the Bulge, his military specialty besides dodging sniper bullets was a cook.  Well as a Staff Sergent, he probably was the boss of the cooks.  So in addition to knowing his concrete, his coal mining, his farming,  he was also a great cook.

Fast forward to modern times.  My wife, the Queen of Free, saves an enormous amount of money each year with her shopping savvy.  One of the rules that comes with that is you have to live with the brands that are on sale.  That means we don’t get a lot of Jiffy Corn Muffin mix any more.  Our pantry is ether loaded with Martha White mixes or bags of straight up corn meal, the main ingredient.

If I’m being honest, these non-JIffy mixes don’t measure up to the Jiffy mix and that doesn’t measure up to Mom and Dads.  Over the past few months, I’ve been trying to figure out just how to get to something closer to what I grew up with.  Being scientific in nature, I want a repeatable formula.  I’ve never tolerated a pinch of this and a dash of that.  Give me exact measurements, precise timings and I’m much happier.

I’ve observed.  I’ve experimented.  I’ve researched.

Here’s what I’ve learned.

1.  Pre-heating your oven is critical to the cooking time.  If the formula, er. recipe says 20-25 minutes,  that’s assuming you are starting at the prescribed 425 degrees F.  Our oven can take 10 minutes to pre-heat and if you’re taking that 10 minutes of cooking time out of your 20 total, then your food will be under cooked, meaning longer cook times which can lead to burning.

2.  At least for cornbread, pre-heating the pan seems to also be important.  We have always poured the mix into a cold glass baking dish (we gave up on iron skillets a long time ago.  The concept of not washing them was difficult to deal with, but the rust was harder…  You put your oil/spray/lard into the pan and let it melt, over the pan and let it heat up.   This way as soon as the mix hits the pan it starts cooking.  This makes it come out of the pan much easier.

3. My cook times are still taking longer than they should.  I suspect that my oven (nearing 15 years old) may not be heating to the set temperature.  Sounds like I need a new oven!

Now I’m still off on taste.  The last batch I made was very dry almost like all the liquid baked out of it and I was left with corn meal.  I followed the formula exactly.  It was using a Martha White buttermilk formula and it only called for water or milk to be added.  I felt like it needed an egg or something to give it some glue.   The Martha White sweet cornbread mix I had used previously was also a bit drier than I liked but it did hold together better (and was more tasty).

I have a new batch that is cooling now that was made with a Mrs. Butterworth brand corn meal mix.  It asked for oil, an egg, milk and a little sugar.   I can’t wait to check it out and see how well it turned out.  It took about four minutes longer than the formula called for.

I will someday find the right formula.  But with having two boys who have not spent time in the kitchen, I doubt I will be able to pass my recipes down to a new generation.

Do you have a favorite cornbread recipe?  Post it in the comments below!

 

Categories: Geek Cuisine Tags:

Happy Holidays!

December 25th, 2011 No comments

I’ve been trying to think of something good to write on.  Being a geek blog, it needs to be geeky and with my focus on mobile apps, my posts have all been on that topic lately, I don’t want to overwhelm the blog with those posts.  So I decided to venture into a dangerous ground.

Today we celebrate the birth of Jesus.  Well, “we” meaning Christianity.   “We” is a dangerous term given that only 1/3 of the people on the planet are Christian.  It is, however; the dominate religion in the United States, which many of you are from, so I’ll brave the term and go with “we”.

Take the Rick Perry “I’m a Christian and therefore Gay’s are Evil” ad that he’s running to try and become President as an example.  He’s targeting a group to blame for all the country’s problems and encouraging you to hate them because its the Christian thing to do.  “The Christian thing to do…..”

Jesus taught us to love not hate, yet it seems that message gets lost today.  “We” are anti-gay marriage (well anti-gay everything it seems.)  “We” are against a mosque being built down the street.  “We” are against the growing culture of Spanish speakers.  “We” are against socialists and communists.  “We” are against anything that isn’t like us.

Where does that come from?  It seems to me that we’ve forsaken Jesus’s message of love and tolerance and forgiveness to one of hate those that don’t believe in God.  Hate those who violate 4 verses in the Bible, 3 in the Old Testament and of which two are in the same writing as hurl rocks at your kids until they die for back talking you.  You know, the verses you cherry pick that gives you permission to hate the GLBT community.

Frequently this hate comes from a lack of familiarity with the people you are hating on.  Its a distrust formed because “they” are different and “we” are not comfortable with them or their culture.  Its easy for people to group together in common circles to protect your status quo.  But when that need to protect only stems from not knowing those outside your group, that’s when problems start.  War’s have started because of this.

For those who are Star Wars fans (obligatory geekism), you know that hate leads to the dark side.  The dark side is evil, therefor hate is evil.

Hate and distrust leads to bullying.  Many of us think of bullies as big kids beating up on weaklings.  That’s true, but its also people saying hurtful things about others.  Its about excluding people because they are different.  Its making fun of a kid because he prefers art over football.  Because she wears glasses.  Why is different wrong?  Why  must “we” do things to hurt people who are different?

Since this is a season of Love, Family, Giving, Sharing and as we move to the new year, one of resolve….   Lets not worry about how we got to a state of hate, but instead focus on love and tolerance.

I challenge each and every one of you as we move into 2012 to work to find some group/culture/faith that you “hate” or uncomfortable with  and try to learn something about them.  Maybe its learning a little bit about Chinese culture.   Perhaps its reading a few verses of the Koran.   Learn a little bit of Spanish.  Read about the origins of Kwanzaa.

Take this time and make it your New Years resolution.  Make it one you will keep.  It doesn’t take much.

If we all take a few steps towards love and tolerance then perhaps the world will be a better place.  A more peaceful place and one were different is a good quality not a bad one.

Collision detection without physics.

December 14th, 2011 4 comments

A frequent question that comes up in the Corona SDK forums is how to detect when two images on a screen hit each other. This is known as a “Collision”. The ability to determine when two things have bumped into each other is called “Collision Detection”.

Within Corona SDK, being that its an event driven system, we like the idea that we can have the system tell us when things hit each other and we just have to write the code to handle the interaction of the two. This is a coo concept and it works, but . . .

It requires using the Physics engine to do so.

Corona SDK uses a wonderful 2D Box model for physics and that model supports this event driven model and it works well. But if you’re game does not need physics and many apps don’t, like a card game where you move a card to a stack, its kind of silly and wasteful to include the overhead of the physics engine. You don’t need all of those angular momentum floating point mathematics going on for your game.

So how do I detect collisions? I don’t see any API calls to do that?

We really can’t use an event driven model like the physics engine, but there is a very simple method (well there are two) that use other features of Corona SDK, in particular using an “enterFrame” event on the Runtime listener.

Basically we have to write the code that the physics engine is doing for us and it’s not all that complex.

In my personal model, I typically have a table/array of all of my on screen objects and then I have my player’s avatar object.

1
2
3
4
5
6
local objects = {}
for i=1, 20, do
objects[i] = spawnEnemy() -- spawnEnemy creates on display objects and returns it.
end
local player = display.newImageRect("avatar.png", 64, 64) -- create me.

At this point we have a table of enemies in the “objects” table and my player object.

For the Runtime enterFrame event, you need a function to process the collision detection.

1
2
3
4
5
6
7
local function testCollisions
for i=1, #objects do
if hasCollided(objects[i], player) then
-- do what you need to do if they hit each other
end
end
end

So we simply iterate over the list of objects and see if any have hit the player object using a function called hasCollided.

This is a function that you also have to write.

There are two main methods for doing this, one is based on rectangles overlapping each other. The other involves circle testing.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
-- rectangle based
local function hasCollided(obj1, obj2)
if obj1 == nil then
return false
end
if obj2 == nil then
return false
end
local left = obj1.contentBounds.xMin <= obj2.contentBounds.xMin and obj1.contentBounds.xMax >= obj2.contentBounds.xMin
local right = obj1.contentBounds.xMin >= obj2.contentBounds.xMin and obj1.contentBounds.xMin <= obj2.contentBounds.xMax
local up = obj1.contentBounds.yMin <= obj2.contentBounds.yMin and obj1.contentBounds.yMax >= obj2.contentBounds.yMin
local down = obj1.contentBounds.yMin >= obj2.contentBounds.yMin and obj1.contentBounds.yMin <= obj2.contentBounds.yMax
return (left or right) and (up or down)
end
-- circle based
local function hasCollidedCircle(obj1, obj2)
if obj1 == nil then
return false
end
if obj2 == nil then
return false
end
local sqrt = math.sqrt
local dx = obj1.x - obj2.x;
local dy = obj1.y - obj2.y;
local distance = sqrt(dx*dx + dy*dy);
local objectSize = (obj2.contentWidth/2) + (obj1.contentWidth/2)
if distance < objectSize then
return true
end
return false
end

Depending on the shape of your player and objects, you may find that circles work better or rectangles work better. In my game Omniblaster I used both methods depending on the objects. My space ship has rounded shields and my rocks were basically round, and my enemies were basically round, so using the hasCollidedCircle made more sense to use.

When I say rounded, the images have transparency that when using rectangles would cause the objects to hit before they looked like it.

Yet, when I fired my phasers or torpedoes, those graphics fit nicely into rectangles, so using the rectangle hasCollided method was a better choice.

One gotcha that you need to be aware of is that if your processing takes too long, (longer than 1/30th of a second or 1/60th depending on frame rate) then your collision detection will fire again before you finish, so I usually change my collision handler to something like this:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
local isCheckingCollisions = false
local function testCollisions
    if isCheckingCollisions then
   return true
    end
    isCheckingCollisions = true
for i=1, #objects do
if hasCollided(objects[i], player) then
-- do what you need to do if they hit each other
end
end
isCheckingCollisions = false
return true
end

This should be a lighter weight collision detection system than the overhead of the physics engine. Though you don’t get filters, being able to define polygon shapes unless you roll you’re own!

Happy coding!

Understanding “SCOPE” for beginning programmers.

October 14th, 2011 1 comment

Scope is a term used to describe where a particular asset, be it a variable, object, array or function is available to be accessed. It’s an important concept that needs to be grasped to avoid bugs and reduce the amount of time you spend developing code.

Since the primary audience for this will be posting to the Corona SDK forums, we will be using the language “Lua” in our examples, but this holds true for almost every programming language in use today. Also, since scoping applies to different bits of your program, variables, objects, etc. We will be using the term variable in our code for simplicity, just keep in mind that all the above assets, even functions at the end of the day are variables.

There are a few key terms that we will be using:

  • Global – A global variable is available everywhere.
  • Local – A local variable only exists within the block or chunk of code where it’s defined.
  • Block – A generic term for a block of code. In Lua, these are sometimes referred to as chunks.
  • Namespace –namespace is a term applied to the area where a given variable’s name is active or in context.

Lets talk about blocks for a moment. When it comes to locality, the following programming constructs define blocks:

The file/module containing the code. Thus in lua, your “main.lua” file is one block. Any thing defined in that file is accessible to that file.

1
2
3
4
5
6
7
8
9
10
11
12
--
-- main.lua
--
local characters = {"Fred", "Barney", "Wilma", "Betty"}
local location = "Bedrock"
local function pickCharacter()
    return characters[math.random(#characters)]
end
local thisCharacter = pickCharacter()
print (thisCharacter)

In this example, our entire main.lua file is one block. It contains a function, which itself is a block. The variables, characters, location and thisCharacter along with the function pickCharacter are available to be accessed anywhere within main.lua.

Inside the function pickCharacter, I was able to see, access and modify the variable “characters” because it was defined within the main.lua chunk above me.

Functions though are also blocks. Variables created within functions are only available to that function. Lets expand our example:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
--
-- main.lua
--
local characters = {"Fred", "Barney", "Wilma", "Betty"}
local location = "Bedrock"
local function pickCharacter()
    local choice = characters[math.random(#charaters)]
    return choice
end
local thisCharacter = pickCharacter()
print (thisCharacter)
print(choice) -- this will print nil, choice doesn't exist in this context.

I made a very subtitle change to the pickCharacter function. I’ve declared a variable inside it called “choice” and I’ve assigned it the value of the random character chosen. I then return the value of that variable to the caller.

The difference here is now “choice” is defined within the block “pickCharacter” so it only exists or is available to that block of code. From my main.lua chunk, if I try to print the value of choice, I will get “nil” because that variable has not been created and initialized within my main.lua block, but within the pickCharacter function block.

Other things that are considered blocks with regards to scope include “IF” statements, “SWITCH” statements (Lua doesn’t support switches, but many other languages do) and your looping statements, “WHILE”, “REPEAT”, “FOR”, “FOREACH”, etc. Again Lua doesn’t support all of these, but you will run into them in other languages.

Not all languages let you declare variables inside these blocks either. For instance in ‘C’, your variables all have to be declared at the top of a function block, yet in ‘C++’, you can define them in the middle of a FOR loop.

Declaring Variables

In a language like C or Objective C, you have to be very explicit with your variable declarations:

1
2
3
4
5
6
void main(int argc, char *argv[]) {
char *charaters[4] = {"Fred", "Barney", "Wilma", "Betty"};
char *location = "Bedrock";
char *thisCharacter = null;
...
}

If you do not declare a variable at the top of the function or in a valid place in C++/Objective C, the complier will give you an error and not build your program. When languages like JavaScript (which lead to Flash’s ActionScript) and PHP were developed (and Lua has this same behavior) variables no longer had a specific type and no longer had to be declared. You could just start using a variable:

1
2
3
// Javascript example.
characters = ["Fred","Barney","Wilma","Betty"];
var location = "Bedrock";

I no longer had to tell the system if it was a string, number, table etc. I could just assign values and go on. An “optional” “var” tag is allowed.

This is where paying attention to scope becomes critical. The “var” isn’t optional. It controls the scope of the variable. In Lua, this is the same as putting the word “local” before a variable. What is the difference?

In Javascript and Lua if you DO NOT put the var or local in front of the variable the first time you reference it, it becomes a “Global Variable”. It is accessible anywhere with in your program. Cool, that means I don’t have to worry about passing my variables around or worrying about scope, I can just make everything global…..

Not so fast, there young padwan learner. Globals are very bad things if you treat theme without caution and careful regard.

Lets look at an example using the infamous “I” index variable:

1
2
3
4
5
6
7
myTable = {} -- make an array
for i=1, 10 do -- populate it with numbers
myTable[i] = i
end
print(i) -- prints "10"
myResult = myFunction()
print(i) -- prints "12"

The variable I changed from 10 to 12. Why? Well lets look at the code for the function myFunction:

1
2
3
4
5
6
7
function myFunction()
count = 0
for i=1, 12 do
count = count + i
end
return count
end

The developer of myFunction didn’t localize the variable I (nor the variable count for that matter) and when myFunction runs, “I” is left at 12 when the for loop ends so you in your program expects “i” to still be 10, but its not because both your “i” and the function’s “i” are accessing the exact same variable. If you used a variable called count, it would get trashed too by the function.

Therefore it’s important that when you write functions that someone else may call later (if your working on a team) or for your own sanity, to make sure you localize variables and just not use globals because they are easy.

This problem would be solved by the function being written as:

1
2
3
4
5
6
7
8
function myFunction()
local count = 0
local i
for i=1, 12 do
count = count + i
end
return count
end

Specifically within Lua when using modules, global variables are available to all modules. Lets say I have a variable I define in main.lua as:

1
score = 100

and I’m in another module, say “level1.lua” and I print the value of “score”, I will get “100” printed. Lua supports a special table called _G which you can add member elements too for this purpose of passing around variables between modules. But don’t over use it. And its good to use _G instead of loose variables like the “score” example above since its visually intentional that you intended for that value to be globally available instead of just sloppy code.

Lua does you a favor and namespaces your variables for you behind the scenes. Lets look at this example:

1
2
3
4
5
6
7
8
9
local count = 10
print(count)
local function myFunction()
local count = 30
print(count)
end
print(count)

You will get the following output:

1
2
3
10
30
10

Within the scope of myFunction, “count” is a unique variable to that block of code. When it returns, my original “count” variable remains untouched. This is an important concept to understand if you are unsure of when to use the word “local” in front of a variable or not. Lets look at the same example without the word “local” in the function:

1
2
3
4
5
6
7
8
9
local count = 10
print(count)
local function myFunction()
count = 30
print(count)
end
print(count)

You will get the following output:

1
2
3
10
30
30

In this case, we didn’t localize “count” to the function, so when it looked to find the variable “count”, it went up to the next higher level and found a variable within that chunk’s scope which is available to my function and the higher level “count” variable changed.

Of course avoiding using the same name variable in different places helps avoid these problems, but in languages like Lua were we can use untyped, undeclared variables, it’s critical to understand when variables are in scope and when they are not.

Hopefully this will help you understand the “local” tag and when you need to use it and help you avoid unnecessary headaches. Happy Coding!

Categories: Tech Geek Tags:

Why my SEO sucks.

September 9th, 2011 1 comment

Search Engine Optimization or SEO is the tricks that webmasters and content producers do to get their websites and articles to rank as high as possible in sites like Google, Bing and Yahoo when people put in words and phrases to find content.   Some people consider it an art form, others voodoo, but its magical, its technical and its ever changing.

My photography site, http://www.robmiracle.com is one of my prides and joy.  My day job is building websites and the company I work for spends a lot of energy making sure our sites and content have great SEO.  I have the pleasure to work with people who know what they are doing; and as a trainer, its my responsibility to know this stuff so I an instruct the people who are producing content and sites.  So while I don’t want to label myself as an SEO expert, I know what needs done and how to produce content and code sites that should rank rather well.

Yet for my photography site, my SEO sucks.  I decided one day to search for “Raleigh Wedding Photographer”.  I didn’t expect to be on the first page or realistically the 2nd.  I don’t do weddings full time and I would hope those shooting full time should rank above be.  But I would hope to show up by page 3 or 4 or 5 or 10.  Nope, didn’t even make it there.  In fact, I gave up looking for my site after I got 20+ pages deep.  I just wasn’t there.

After doing a little research and using Google’s “Webmaster Tools“, I quickly isolated a few problems.  I have very few backlinks (where people link to me).  That’s something I will have to fix over time.  Not all backlinks are created equally.  Higher rated sites that link to you are more valuable than less rated sites.  In fact, having a very high ranking site like CNN link to you is more valuable than a dozen personal blogs that link back to you.  So if I want to be seen, I need to join more directories.   But that’s hardly the problem.

I’m being burned by “keyword density”.  Basically for good SEO, you need to have your keywords show up on your page, in your headers and in your content.  One of these pieces of information, your pages <title> tag (some hidden code in the header) is one of the most critical parts of the page.  My title was:  “Rob Miracle Professional Photographer”.  At no point does that title tell you where my area of focus is (Raleigh-Durham, NC) nor does it tell you the type of photographer I am (Wedding, Fashion, etc.).

Likewise there is a <meta description> tag also located in the page header provides a text description about your website or that particular page.  My description contained Raleigh and Wedding, but it wasn’t written all that well and didn’t have other important keywords in it.  Keep in mind, this is what shows up on Google as the text under the title, so it should be something people will read, just not a list of random key words!

After that, my home page had no text on it, well, the menu and footer links were there.  I’m a photography site, so my site is all about pictures.  Photo sites like this are going to have a harder time than sites with some text on the page because there is little the search engines can extract from the page.  I spent a weekend editing every photo to make sure there was a caption in the IPTC meta data and changed my site’s program code to extract that caption and add it as the “alt” attribute on each <img> tag which greatly increased the “keyword density” on my front page.  It was important while writing these captions to make sure I got the right keywords in the captions.

So after providing better titles, descriptions and text on my page, I would think I would fair better….

NOT!

My site still sucks.  Using the Webmaster Tools, I see that Google has seen the increase in keyword density.  Raleigh is however, still the 81st most popular keyword on my site occurring 29 times.  “Wedding” shows up 14 times and is the 166th most popular keyword.  Wedding shows up 8 times on my front page, which seems like a lot.  Until you discover that “Kentucky”, “Model”, “twitter” and “tutorials” all show up well over 500 times!!!!

I’m being killed by my blog and photo tutorials.  These posts make up a bulk of the content on the site.  They are things I feel that are important to my photography friends as its how I give back to the photography community.  So it looks like I will be moving my blog content to another domain.

 

Categories: Tech Geek Tags: , , ,

The Beatles – Let it be! Music Perfection?

August 2nd, 2011 No comments

Like most people, I have several playlists for my Audio Collection.  I listen to a lot of music at work and I’ve dedicated playlists to each day of the week.  Monday is mostly dark and depressing songs (Daniel Powter’s “Bad day”, songs that reference Monday (Bangles “Manic Monday”).  Friday is loaded with beach and party tunes (Alan Jackson and Jimmy Buffett’s “It’s 5 o’clock somewhere”, etc.).   Well Tuesday’s happens to be love songs.  This particular Tuesday, I really didn’t want to listen to love songs all day.  I didn’t want to fall back to my “Current Stuff” list (not necessarily “current” with regards to when the music was created, but current as to when I added it in.)

So I decided to run my The Beatles playlist — 64 songs and almost 3.5 hours of play time.  Its by no means a complete The Beatles collection and its about 1/3 cover tunes, like Sarah McLachlan’s fantastic rendition of “Blackbird”.   One of the first song’s up today was “Let it Be”, the chilling and powerful song vocaled by Paul McCartney.

I started thinking about what makes this song so great.  Its more than a fantastic melody and important lyrics that are universally meaningful.  It’s more than McCartney’s voice and his keyboard work.  Its all these elements working together to form a fantastic song that lives through the ages.

But what many people may have not noticed is how the song builds from a quiet piano tune to a driving rock tune.  It starts out with just a single piano.  Then McCartney’s voice joins in through the first voice.  Quietly soft background voices are added at the first chorus.  Slowly during the 2nd verse a quiet bass guitar starts presumably from a studio artist building in the background, then Ringo Starr’s drums add in.  Another studio player’s organ adds in, then comes in George Harrison and John Lennon with their stunning electric guitars following the melody when transforms into a powerful guitar solo. All of it orchestrates to a building crescendo of perfection and it eases out much like it started.

As these different elements add in, its subtle which drives the power behind this timeless song.

If you haven’t listened to it lately, watch the YouTube video above of find it your playlist.

 

Photo Sharing — a Rant

July 31st, 2011 No comments

We love our social networking…  Let me count the ways (and in no particular order): Google+, Facebook, Plurk, Twitter, Model Mayhem, My Space (yea, I still have a My Space account) and of course, being a photographer Flickr.

We love our different social nets for various reasons and frequently our friends are with us in multiple places.  But you have enough friend that are unique in each one that you want to share with all of them.  Also, various networks popularity wanes and waxes with times (i.e. fades in and out — hey, this is a geek blog, I can use geek terms!)

But what frustrates the hell out of me is that I can’t use one service to collect all my feed back.  While I can, as I did tonight with this photo:
I uploaded it to Flickr, where as of the time of this post, its up to 33 views already.

From Flickr, I can post them to Facebook, Twitter, and my photo blog at http://robmiracle.com/blog. I also took the Flickr link, posted to Plurk.

The problem is my feed back is all fragmented and I don’t get credit for any views and my comments are spread out all over the place.

On Facebook, I’ve accumulated 4 likes and 3 comments.  But to do that I’ve had to not only post it to Facebook from Flickr, but had to upload it directly to post it into a photo group.  I have at least one more group to share it with and of course I need to upload it to my fan page.  Even Facebook won’t let me upload once and put it in multiple places.

Then several people told me to upload it to Google+ which has already gotten a couple of likes and comments there.  Plurk Friends have already laid down a hand full of comments too.  While I can’t see views from these other services in the brief hour this photo has been online, its gotten 10+ comments and the equivalent of 6 favorites or so.

I so wish that these social nets would drive traffic back to Flickr so I could have all my comments in one place.

Oh and Facebook/Flickr/Yahoo.  I DO NOT want you to send everything I upload to Flickr to Facebook.  Let me click on the Facebook button on Flickr to decide which photos I want to share over there.  THAIXBAI!

 

Categories: Robisims, Think Geek Tags:

Implementing a Game Center button in your Corona SDK Game.

June 13th, 2011 6 comments

I’ve been trying to figure out how to do a Game Center button for my game and be able to link to the Game Center leaderboards and achievements directly from my Corona SDK based game.

I had not found much information on the Internet on how to do this. Most examples were involving Objective C using Xcode and adding the Game Center framework to the game, then calling relevant methods from the framework.

I basically gave up on the idea about connecting directly to the leaderboards and decided to just try and launch the Game Center app from my game.

Here is the code I used (mostly lifted from Jayant C Varma’s “rating.lua” file found on the Corona SDK site):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
local function testNetworkConnection()
local netConn = require('socket').connect('www.apple.com', 80)
if netConn == nil then
return false
end
netConn:close()
return true
end
    
local function gotoGameCenter()
local device = system.getInfo ( "environment" )
local appURL = "gamecenter:"
if device == "simulator" then
print ( "Cannot spawn this URL in the simulator" )
else
if testNetworkConnection() then
system.openURL ( appURL )
end
end
end
local gameCenterButton = ui.newButton{defaultSrc="gamecenterbtn.png", defaultX = 164, defaultY = 32, onRelease=gotoGameCenter}
gameCenterButton.x = display.contentWidth / 2
gameCenterButton.y = 110
highScores:insert(gameCenterButton)

And much to my surprise, it works like a charm. Now to track down those pesky specific URL’s…. I should note, this is a new addition to my game and it has not been submitted to Apple yet. No warranties expressed or implied.

Implementing a Health Status Bar in Corona SDK

May 30th, 2011 No comments

Implementing a Health Status Bar in Corona SDK

Many games need a way to show the players how well they are doing. It could be a simple counter to show the number of lives left or a bar that decreases and increases as a players energy goes up and down.

There are as many different ways to do this as there are games but lets look at a couple of different ways.

The simplest may be simply using text to display the health status:

1
2
3
4
5
local lives = 5
local livesLabel = display.newText("Lives: ", 10, 30, native.systemFont, 16)
local livesValue = display.newText(string.format("%d", lives), livesLabel.contentWidth+20,30,native.systemFontBold, 16)
livesLabel:setTextColor(225,225,225)
livesValue:setTextColor(255,255,255)

Then later in your code when a player looses a life (or gains one back) simply change the text value of “livesValue” and Corona will magically update the value for you:

1
2
3
4
if lives &gt; 0 then
lives = lives - 1
end
livesValue.text = string.format("%d", lives)

Of course you might want to drop a graphic behind the text, set the colors accordingly, and possibly drop a duplicate text string underneath offset by a pixel to give a little stroke/shadow to the text.

But our players expect more from games and a simple text display won’t be accepted as high quality. Traditional arcade games have shown your lives as small versions of your player’s graphic. If your game involves a ship, perhaps you see a display of 5 little ships to show your life count.

With a display of say 5 small rockets, you will need one image and you will replicate it several times.

1
2
3
4
5
6
7
8
9
local lifeIcons = {}
local lives = 5
local maxLives = 5
local i
for i = 1, maxLives do
lifeIcons[i] = display.newImage("lifeicon.png")
lifeIcons[i].x = 10 + (lifeIcons[i].contentWidth * (i - 1))
lifeIcons[i].y = 30 -- start at 10,10
end

This will create a display of 5 little icons that shows your full life status. Later in your code when you need to change the display:

1
2
3
4
if lives &gt; 0 then
lifeIcons[lives].isVisible = false
lives = lives - 1
end

Later when you need to give a life back:

1
2
3
4
5
lives = lives + 1
if lives &gt; maxLives then
lives = maxLives
end
lifeIcons[lives].isVisible = true

But what if you want more of a bar-graph display. As long as you’re using discrete values, you can continue to use a similar method using different graphics for each value, in this example, there are 5 lives, so you can create 5 different graphics for each of the 5 life states.


Instead of using a loop to load in the same graphic, you would need to load in each of the separate five graphics in and position them all at the same location:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
local lifeIcons = {}
local lives = 5
local maxLives = 5
lifeBar[0] = display.newImage("lifeicon0.png")
lifeBar[1] = display.newImage("lifeicon1.png")
lifeBar[2] = display.newImage("lifeicon2.png")
lifeBar[3] = display.newImage("lifeicon3.png")
lifeBar[4] = display.newImage("lifeicon4.png")
lifeBar[5] = display.newImage("lifeicon5.png")
local i
for i = 1, maxLives do
lifeBar[i].x = 10
lifeBar[i].y = 30
lifeBar[i].isVisible = false
end
lifeBar[lives].isVisible = true

Then to change the graphic:

1
2
3
4
5
if lives &gt; 0 then
lifeBar[lives].isVisible = false
lives = lives - 1
lifeBar[lives].isVisible = true
end

This same concept can be done with MovieClips.

1
2
3
4
healthSprites = movieclip.newAnim{"lifeicon1.png", "lifeicon2.png", "lifeicon3.png", "lifeicon4.png", "lifeicon5.png", "lifeicon0.png"}
healthSprites.x = 50
healthSprites.y = 10
healthSprites:play{startFrame=1, endFrame=lives, loop=1, remove=false}

Then to show the current health level:
[/crayon]

lives = lives – 1
if lives < 0 then
lives = 0
end
if lives == 0 then
healthSprites:play{startGrame=6, endFrame=6, loop=1, remove=false}
else
healthSprites:play{startFrame=1, endFrame=lives, loop=1, remove=false}
end
[/crayon]

This gives you the benefit of a little animation as well. Unlike the example above, we load in the “No life left” graphic in frame 6, because movieclip starts at frame 1. We could have put frame 0 first, and just done a “lives + 1″ to get the right offset.

Hope this is helpful!

 

So you want to build an iPhone Game….

May 27th, 2011 1 comment

It was August of 1979.  I was a freshman at the University of Kentucky and one of my classes had me in the computer lab where I found people sitting in front of a DecWriter, a big machine with a keyboard and 18″ wide paper spitting out of it.  They were playing a game called DecWar.  I was a curious 18 year old and learned about the game and how to play it.

Meanwhile one of my best friends forever had a Radio Shack TRS-80 in his room and he was busy putting all these strange codes into his small computer.   I got curious and helped him hand type in all this cryptic code and at the end of several days, we had the “Star Trek” game up and running.  I was hooked.  I said “I want to learn to make my own games.” and so I went into the computer programming industry as my major and my career, which includes 10 years of full time game development!

Fast forward to today… Computer Games are everywhere and they are big business.  From console games like PlayStations to hand held’s like the Nintendo DS to games on your personal computer, you can’t help but run into them in some form or fashion.

One of the intriguing areas of game development are mobile devices, like smartphones and tablet computes like the Apple iPhone and iPad.  Programming games for these devices has opened a whole new market for independent game developers to get involved.

Games like “Call of Duty” or “NFL 2K9” require that you have a team of multiple programmers, artists, level designers, sound experts and layers of management and human resources.  You also have to have your own audio studio, your own motion capture studio (to get realistic human movement).  It takes years to build up the tools and skills to produce a $50 console game.  Money wise, one can expect to invest at least $1 million in a simple game up to $10 million or more for a major, robust title.

But Apple and the iTunes store have changed that dynamic and individuals and small shops can now put out fun titles that can earn revenue with what appears to be a minimal investment.  A recently announced game development platform, called Corona SDK by Ansca Mobile has lowered the entry point for game development and simplified the already simplified Apple iTunes process.

Before we get into Corona SDK, lets talk about building a game without it.  To make an iPhone/iPad game you have to be on the Apple Mac platform and download their free developer tool, Xcode.  This is about a 5GB package that will take a painfully long time to download over modest broadband connections.   See http://developer.apple.com/devcenter/ios/index.action to get signed up and download Xcode.

Traditionally you would need to learn the Apple Objective C language.  And as a “C” programmer, Objective C isn’t a whole lot of C, but more Small Talk, a language they blended with C to form Objective C.  Beyond the syntax and learning curve, there is the Apple SDK (library of pre-written code to do various things like draw text on the screen, moving images around, etc.), which is huge and complex to learn.  Combining the learning curve for Objective C and the SDK is enough to send a weekend programming warrior home packing.  By using a toolkit like Corona SDK, you can minimize the learning curve that Objective C puts on you.

Then to actually publish a game that you’ve written, you will have to pay $99 to Apple for a paid developer’s license that has to be renewed every year.  Its not a big deal in the grand scheme of things, sell a couple of hundred copies of your $0.99 game and that’s covered.  Once you have this, it’s a matter of following a few simple instructions and you’re set up to be able to publish a game to the Apple iTunes store and sit back and wait for the payments to start flowing in.  Sort of…

Simplifying the Development Process

As mentioned above, learning Objective C and the API’s that go with it is hard task.  A company known as Ansca Mobile has made this a much easier prospect with their Corona SDK product. (http://www.anscamobile.com/corona/)

Corona SDK is a toolset, a programming language and SDK of functions oriented at game development.  It’s based on the scripting language Lua, which has a very minimal learning curve.  The Corona SDK itself is very intuitive and easy to pick up.  In fact you can have a functioning game in just a few minutes.   The problem is the game isn’t a lot of fun and is very limited.  Games take time to develop and you should not be sold on sitting down with this toolkit and having a marketable game up in the iTunes store in a weekend.

Corona SDK is free to download and work with while you’re learning.  You however, will have to pay an annual license fee ($199) to actually build games for devices and publish to the iTunes store.   So if you’re following along, you’re up to $298 plus a Mac to get started.  In the grand scale of things, this is one of the easier hurdles to overcome.   They also offer a version of the tools that will build games for Android devices as well.  If you are only interested in that, its $199 for that fee and you can develop for Android on either Mac or PC platforms.  $349 will get you the ability to build for both using one set of code.

For all my years of programming experience, what should be a simple task of putting a graphic on the screen and a particular X, Y location would require a ton of work.  In the old days you had to write your own code to open the file, read the graphic information in converting it to the Red, Green and Blue values and blit it to the screen and for speed, we would write that using un-rolled loops in assembly language.   Then to keep the screen from flickering you would have to maintain off screen copies, paint your new or recently moved graphics.

The Corona SDK blog recently published an article showing how to load a single graphic on the phone’s screen using Xcode’s Objective C.  It took well over 100 lines of code.  With Corona SDK, my dream is realized with one line of code:

tree = display.newImage(“tree.png”, 100, 100)

I now have a object “tree” which is the graphic “tree.png” loaded at 100,100 on the screen.  If I want to move it to the right?

tree.x = tree.x + 1

Want to fade it out to make it a ghost tree?

tree.alpha = 0.5

 

What about sound?

lightningSfx = audio.load(“lighting.wav”)

audio.play(lightingSfx)

 

Corona SDK uses an event driven model and your apps can run either at 30fps or 60fps.  It supports smart graphics, loading higher resolution graphics on Retina display phones and iPads.

My recently release game, OmniBlaster (http://omniblaster.omnigeekmedia.com) checks in at around 3000 total lines of code.

I started down this path a few months ago.  I figured my ideas were pretty simple and would be fairly quick to create and deploy.  Somehow in my old age and the lure of these easy tools, I looked past the reality of what all is involved in making a publishable game!

Lets look at the pieces of the puzzle…..

Game Concept

You need to think about what your game is going to do.  How will it fair against similar games already out there (yes there are….)?  How can you balance difficulty and fun?  How will you manage advancement?  What rewards are you going to give your players?  How can you keep them playing over and over? What updates can you do to keep the game fresh?  These are all things that need to be thought out before write your first line of code.

Your game will need to be different from the pack, either through better graphics, better game play or a unique idea.  You need to research what is out there and study them.

Next you need to storyboard out the game play.  You need to figure out how to keep the players attention.  There is no set formula for this, but there are a lot of guidelines and discussions on game theory that you probably should digest before you get too serious into it.  Players need to be rewarded beyond just setting high scores.  How you tease them?  Offering them new things along the way goes a long way to repeat play and good reviews.

Artwork and Sound Effects

This may very well be your single biggest struggle.  Many game programmers stink at artwork, but artwork is the biggest piece of any video game.  Even from a simple game like Tetris or Yatzee, the quality of the art is important to separate you from the pack.  Depending on your game type, you may need maps, positional objects and animations (called Sprites), and depending on the complexity, you may need a lot of it.  A simple child’s game to teach the alphabet with association to objects, like “A is for Apple” will need at least 26 graphics.  Art isn’t free.  Sure you can steal plenty of it from the Internet, but if it makes it into your commercial for profit game, you will get sued for using it.   So your choices are draw your own, which unless you’re a graphic artist, will probably not be very good, hire an artist or pay for stock art.

If you draw it yourself, you have a heavy cost in time.  If you pay for it, your initial cash outlay will continue to climb.   That Major League Baseball game for your Xbox?  Thousands of man-hours of artwork.

Games need sound too.  Angry Birds would not be nearly has cute if it wasn’t for the sound effects of the pigs and the mad birds.  Very few of us have the skills to create our own sound effects and if we do, they are likely going to sound amateurish to the customers who will buy your game.  There are however, plenty of collections of sound effects that can be bought off the shelf.  There seems to be a much better chance of finding public domain sound effects on the Internet, but the quality will vary as well.

In addition, a good game will have a sound track that sets the mood for the game.  While many players will turn the sounds off so their boss can’t hear them playing, it adds a major ambience to the game that the players will turn on when they can.  Lets face it blowing up an enemy space ship is so much more fun when you hear the explosion (though sound doesn’t travel through space very well!)

So with art and sound in hand, you now can start programming.  It’s at this point, unless your game is very simple, you may need the skills of someone called a “Level Designer”.  These are individuals or teams of individuals who figure out the game balance of how hard a given segment of the game should be; what obstacles are present; what rewards are given and they work with the developer and artist to tie the two together.  For your one-man-shop, you are going to have to do this role too.  Figuring out how to advance in levels and balancing the game play is the hardest and most important skill to the success of the game.

All the parts you didn’t think about

Now that you’ve got your core game done, you have to now add the polish.  Splash screens, High Score screens, Help, Settings, in-between level screens or animations (interstitials), saving the game, loading in the saved game, saving the scores, loading them in, handling things like phone calls that will interrupt your game all have to be there for your game to look professional and command customers dollars.

Players like to see their name in lights.  You are going to have to have a way to let players show off their scores.   Apple provides their Game Center for this.  It does a lot to help get players together, but for your first game, you’re probably just going to be interested in their leaderboard/high score reporting features.

Many games also allow connections to various Internet social networks like Twitter and Facebook to post high scores.  This is also an important marketing tool for your game.  You should always include a link to your game so others can learn more about it.

Beyond the Physical Game

Now your code is nearing completion.  What else is missing?

Have you thought about how you’re going to test your game?  Do you have all the different iPhones, the various variations of iPads and iPod touches at your disposal?  Probably not.  Also if you’ve been building this game in a vacuum and you think its cool, then you hand it to someone else only to find out they can’t figure out how to play it, they are going to quit, not review it and your sales will suffer.

Playtesting not only helps track down bugs, but its critical to get feedback from others on how fun your game is.  Is it too hard?  Is it too boring?  What’s missing?  All of this valuable feedback comes from testing.

As a real life example, I built a vertically scrolling, side-to-side moving space shooter.  For me, I put the primary weapon button on the left and the secondary button on the right.  I hold the phone in two hands using each thumb to fire each weapon while using tilt controls to move my ship side to side.  Everyone I handed the phone to with the app launching could not figure out how to move the ship with out help.  What I thought was obvious baffled EVERY person I showed it too.  Clearly, I needed to address that.

The next issue came from a tester who held the phone in one hand and played it one handed.  In particular, he was right handed and had to stretch his thumb across the screen to get to the primary fire button.   The game now has adaptable controls so the player can choose where the buttons are positioned.

Testing feedback is essential for you to see the game through other people’s eyes.

For iPhone apps, to prevent them from escaping into the wild, developers have to go through some hoops to get their game to testers.   This involves setting up a special provisioning profile that includes the UUID (unique device ID) for each of your tester’s phones.  Once you add the devices through Apple’s developer portal and create a provisioning profile for your game, you can then add that to your application bundle.  Using Corona SDK makes building the app very simple.  You download the profile and put it in a special folder on your computer, then build the game.

The next step is getting it to your testers.   There is a wonderful website called TestFlightApp.com.  They help gather the ID’s for you, make it easy to import them into the Apple Developer Portal, and the aids the playtesters in getting the game onto their device.

Once you’ve gotten your feedback, its back to programming and art (and sound) to tune the game and send it out for another round of testing.  This testing cycle will go on for several cycles before you can call the game ready for the public.

You will need to have a system to track bugs reported by your testers, allow them to make feature requests and manage your development.  A popular tool is to install Mantis on your webserver, or use a 3rd party bug tracker like Bugzilla.  Many people don’t think about this need, but it’s important to have.  Of course you could just let your testers email you and try to track everything that way.  Good luck, buddy!

You will also need to have a way to communicate with your testers, so having access to a mailing list server will be helpful.

Roadmaps

There is a term in programming called “Feature Creep” which means that as you go along, you think of something else cool to do, or something else to fix.  This cycle will go on and on and your game never gets finished.  You need to be disciplined to cut off new ideas and features, focus on bug fixes so your game can get done.

Most developers will take time planning out the future of their application.  Games are no different.  Almost every application gets updates.  Some are to find bugs that slipped through testing, others are to add features you want in but ran out of time to do.

These new features are planned out on a “Roadmap”.   Roadmaps are living documents that change as features get thought about and determined what version you can reasonably get that feature in.  It’s a “Living” document because you will over time move features to later in the roadmap or earlier depending on various factors like importance, difficulty and player wishes.

For a small developer, this could be something simply written down on a pad of paper or a text document.  Larger teams will probably have a more formal development tool like JIRA for planning.

Do not underestimate the importance of thinking about your features and cutting off what you can reasonably get done.  Our games shouldn’t be fire and forget.  Updates keep them in front of the player’s eyes and encourage repeat sales.  Of course, feature creep has to be stopped.

Deployment

Now the game is done, you’ve uploaded it to iTunes, its been approved and your bank account is not filling up.  Why?  One word: Marketing

There are hundreds of thousands of apps in the App Store.  Dozens more added daily.  You have to have a way for people to find you.  Apple does a good job of promoting new games, but you’re likely not going to get noticed with out some help.

A game’s popularity will push it higher on the App Store’s display.  The higher rated a game is, the more prominent it will be displayed.   It’s a chicken and egg problem.  You have to have people downloading the game and reviewing it, but they can’t find your game.

This is why marketing is important.  This is how you spread the word about your game and get people interested in it.  Clearly you will need to get your testers to rate your game and review it as well as all your friends.   But that’s not enough.

Many people turn to social networks like Twitter and Facebook to talk up the game and provide links for people to find the game.   So you’re going to need a Twitter account, maybe one dedicated to your game.  You will need a Facebook “Page” to also put out news about the game and answer fan questions about it.  If you thought developing and testing and art was a time suck…..  Customer service is a major part of your marketing to keep your fans happy.

You will also need a website dedicated to your games.  If you plan to have multiple games, one website can service them all, or you could do an individual website for each game.  It take build a website, make it look profession and attractive to your customers.   You build a really cool website to go with the game and then view it from your mobile device only to find out that it really, really doesn’t play well on the small screen.  Now you have to also build out a mobile version of your site.  You’re building a mobile game, so this is a 100% must have.  In fact, it might make more sense to build a mobile friendly site from the start.

Your website will need a link to the Apple iTunes store so the readers can find and download your game.  Apple provides some basic artwork, like the “Available in the iTunes App Store” graphic, and sample devices you can use to show your game on the device.  Apple has very strict guidelines on using their artwork, and in fact, the usage agreement is the first piece of paper you actually have to fill out and mail.

Your website should also contain links to get your viewers to follow you on Twitter and “Like” your FaceBook page for the game.

Still not getting sales?  People have to find your website and find your Twitter and FaceBook pages.   There are three ways to help get your game noticed.

First is the iTunes App Store itself.  Apps can be reviewed and ranked.  You do not want to get fake rankings and ratings, but your app should provide suggestions to its players for them to go to the App Store and rate/review your game.  Make it easy for them by giving them a button to do so.

Secondly you can submit your game (website, iTunes link) to various websites and magazines that review apps and games.  There are a lot of them and Apple lets you have 50 free downloads that you can give to reviewers.   If you’ve done a good job, hopefully they will tweet about you, post on their blogs etc.

The third way is maybe the most expensive part of what you’ve done to date:  Advertise.  Most everyone can get their hands on $100 worth of free Google AdWords ads.  You should take advantage of that.   After that, finding good places to advertise will do wonders to get your game out there.  How much do you spend?  Depends a lot on the quality of your game and how much you can expect to return on the investment.

Reality Check

After working with my testers for OmniBlaster, I was feeling really good about the game.  It had come a very long way and now felt like it was ready.  My artwork had gotten a major upgrade.  I had power ups and rewards working.   The last two weeks was focused on tracking down and eliminating memory leaks and dealing with timers messing up when the game was paused.  My code was clean, I wasn’t leaking memory, and the testers were happy.   It was time to release it to the wild.

I have to admit, I got a lot of joy hitting the “Build” button for 0.9 Release Candidate 1.  That joy was replaced by changing the build process to produce a live version and creating that 1.0 Gold Master.   So for OmniBlaster, I uploaded it to iTunes Connect, Apple’s interface for developers to the App Store and the waiting games begin.  Apple’s review process is thorough and some apps take more time than others and there is always a backlock waiting.   Then one day a small email pop’s into your inbox from iTunes:  “Your app status is In Review”.   Your burst of joy is quickly replaced by anxiety.  What if they don’t approve it?  What did I miss?  Can I handle rejection.   For me the wait wasn’t long.  A new email showed up several hours later.   “Your app is Processing for the App Store” followed a few minutes later by “Your application is Ready for Sale”.  The joy of seeing those two emails come in for a first time App Store developer was off the top of the joy sale.  Euphoric is the best word to describe it.

At that point, you’re still not indexed in the iTunes search engine, but you get the URL for the iTunes page in advance, so you can prepare your website and marketing materials.  Sharing that with family and friends and  your Social Net.

That euphoria is quickly replaced by reality when you realize you didn’t sell a million units the first day and you have a long way to go to become the next Angry Birds.

 

Categories: Uncategorized Tags:

CES: Understanding all these iRumors – new iPad, new iPhone blah blah blah… Real Predictions for Apple’s products.

January 5th, 2011 No comments

As with many in the tech and gadget industry, we depend on trade shows like the annual Consumer Electronics Show (CES) to provide us a hint of what we will be spending our money on over the next few months or even years.

While most vendors are happy to show their vaporware and even some things that are close to being reality, we are frequently more interested in what’s not there. For the 2011 CES, that absence is provided by Apple.

Apple historically does things their own way. Instead of using large trade shows to announce new things, they prefer to have their own show. Instead of releasing things for the Christmas shopping season, they release them on their own schedule and actually now has a schedule that fills out their year rather nicely.

Which of course gets us to the crux of the matter.

Today’s twitterverse has been filled with people hunting for any hint of what Apple has up its very closely guarded sleeve. Will there be an iPad 2. What will it be like? What about the CDMA “Verizon” iPhone? Is that new frame an iPhone 4/CDMA or an iPhone 5?

Well I’m here to tell you exactly what all that means. And how do I know? Because Apple is predictable.

Apple stunned the smart phone market with the release of the iPhone. Now almost 5 years and 5 iPhones later, we should by now fully know what the next iPhone will be. Perhaps we won’t know processor and memory specifications or even the form factor, but this is what you can plan on.

In May, Apple will hold one of its developer conferences in Silicon Valley. They will announce the iPhone 4G. Not a 5 but a 4G. They will at the same time announce not only an AT&T phone, but most likely a Verizon and Sprint versions and even possibly a T-Mobile version. The phones will be available at the end of June for $199 with a 2 year contract for the entry level phone and $299 for the higher end one.

Why? Well lets look at history. The iPhone 2 and 3 was an EDGE (2G phone). Once AT&T had their 3G network rolled out, then we got a 3G phone for a 3G network. The next revision was a 3GS then a 4. So clearly, the next higher phone with just a number indicates that its getting ready for the next big network. Then when the network is ready, we get a phone named for the network. Guess what? AT&T and Verizon’s LTE “4G” networks are launching or will be launched by the end of June (convenient eh?) Apple will be out of their 5 year exclusive deal with AT&T and instead of having a CDMA and a GSM phone on different schedules, it only makes sense for them to come out at the same time.
Then next year in May, they will announce the 4GS, and in 2013, the 5, 2014 the 5G etc. It’s a predictable repeatable pattern.

What will this new phone likely have for us? Who knows, but a 4G network will handle video better and with the phones divided over multiple carriers, the WiFi limits on FaceTime will likely go away. Higher quality video and streaming (things we are seeing in all these CES tablets) will likely be there. Count on it.

Now for all the iPad 2 rumors. The iPad was announced on Jan 27, 2010 and went on sale in April 2010. Now since we know Apple to run on a schedule these rumors about an iPad 2 coming in January or February are not rumors. You can expect Steve Jobs and Company to put on a show in the San Francisco Bay area that will herald in the iPad 2 and guess what…. It will go on sell in April. It might even be called the iPad 4/4G since Apple would be silly to not prepare it to run on the LTE networks once they become available, though they may not want to tip their hand on the iPhone 4G yet.

Yea, we are getting cameras and a smaller form factor and longer battery life and better connectivity. It will be faster with more memory and have some other cool features that we haven’t thought about. Clearly all the other tablet makers have upped the ante on what hardware and features are going into their iPad killers (that amazingly won’t ship until the next gen iPad does). Apple won’t lower the price, but you can bet the next iPad’s guts are going to be a bit better than all these vaporware tablets that are being announced at CES. Will it be greatly better? No. Will ASUS or Toshiba build an iPad killer? No, but they will get their share of sales. Apple won by getting it out a year ahead of everyone else.

So there. No more rumors. No more needing to look for any hint of a piece of hardware. No more speculating on when we will see these. Oh and towards the fall, we will get new MacBooks and iMac’s as well.

Categories: Tech Geek Tags: , , , , , , ,

Geek Cuisine — Peanut Butter Fudge

May 26th, 2010 No comments
1
2
3
4
5
6
7
1 Stick Butter/Margarine
1lb Brown Sugar
1/2 cup milk
1lb Confectioners Sugar
1tsp Vanilla Extract
3/4 cup Peanut Butter
a separate stick of butter

Prepare:

  1. Grease a 9×9 baking dish with the extra stick of butter to keep the fudge from sticking.
  2. Spoon the peanut butter into a measuring cup.
  3. Have the confectioners sugar open and ready to pour.
  4. Have your mixer with beaters ready.

Cook:

  1. Melt the other stick in a sauce pan (quart size?)
  2. Stir in 1/2 cup of Milk and the brown sugar, bring to a boil.
  3. Boil for 2 minutes 0 seconds. Too long or not enough is a bad thing.
  4. Remove from heat and add in the peanut butter and vanilla, stir until creamy. The vanilla will want to make the solution boil harder for a few seconds. Don’t be surprised!
  5. Using the mixer on a middle setting, start beating in the confectioners sugar until you have a smooth creamy mixture.
  6. Pour into the baking dish and with a spoon spread it out.
  7. Put in the fridge for about an hour long enough for it to set.
    1. Share the beaters with someone, keep the pan for yourself, using a spoon to eat the fudge that was left behind.
    2. Cut into 1″ squares and put in a covered candy dish to serve.
    3. Nom nom nom.
  8. Enjoy:

    Disclaimer: I’m not responsible if your jeans don’t fit afterwards or any other conditions that occur.

Categories: Geek Cuisine Tags:

Review of the RIM BlackBerry Twitter App

April 9th, 2010 1 comment

My life as a BlackBerry owner has seen me through three handsets. I started with a Verizon 8703e, a reasonably functional handset. The browser was terrible and there were not a lot of apps for it. TwitterBerry was my app of choice early in its infancy. But as the developer’s added features (including fetching 200 tweets) it became unusable.

A short term acquaintance with a Pearl 8130 allowed me to browse the Internet better yet TwitterBerry didn’t seem to run well. I switched to TwiXtreme, which seemed to run better. I never got into hand held tweeting with that handset, partially because of the half-keyboard, the other part was the small screen and the apps still did not perform well.

In January of this year, I inherited a Curve 8900 on the AT&T network. I installed TwiXtreme, but again, just couldn’t get into twittering from my hand-held, though it was a nice “cute” app.

Today, I installed the office Research In Motion Twitter Application available from the BlackBerry App World. It installed quickly. I added my twitter login and password, said to remember me and it was off an running.

The app has all the usual features, see your mentions, direct messages and lets you reply to messages, set your status and so on. It does it fast and elegantly. Though it only shows two tweets at a time, it very easily scrolls to older tweets and if its fetching older tweets in the background you don’t see any delay.

It also supports lists, popular topics and search, something not seen in the other apps I’ve tried. And like any good Twitter app, it counts down your available number of characters as you compose your tweets.

Where the RIM Twitter client has impressed me is how it fits in with the Blackberry. You are notified when new tweets arrive (a feature I turned off), when new mentions and direct messages show up along with the rest of your messages. Now, e-mail, FaceBook messages, gTalk notifications, and important Twitter notifications all flow through a single messaging interface.

It also interfaces well with the camera and stored photos. I can initiate a photo from the Twitter app or I can grab an existing photo from my memory card and tweet it out using TwitPic in a very seamless manner.

It is supposed to shorten URL’s, but I’ve not had a chance to test it yet. We will also have to see what the impact on the battery will be with it running in the background all the time.

Pending the battery tests, this looks like one very well done application and its supposedly an open Beta. My version is 1.0.0.37.

At this point, I’d have to give it a thumbs up and recommend others give it a go. Twitter on the hand-held might become fun again.

Categories: Tech Geek Tags: , , , , ,

My 2009 Social Stats

January 7th, 2010 4 comments

Today as I was archiving old email I got an idea to figure out just how much information I created or processed for the year.

I’m an e-mail pack rat. I keep most every message sent to me. I do not keep spam, most mailing list messages, etc. So messages where Twitter tells me I have a new follower and similar are not included.

For Twitter, I have to way to count the number I read, nor do I have a way to count Plurk stats or text messages and IM’s sent or received.

I have two separate Flickr accounts, one is for bulk uploads and represents all but around 180 photos which I uploaded to the main Flickr account.

And while photos taken isn’t a social stat, its an interesting number.

Here are the numbers:

Count Channel
16,207 Emails Received
2,338 Emails Sent
3074 Tweets Sent
1,883 Photos uploaded to Flickr
106 Blog Posts
13,962 Photos Taken

Happy Holidays!

December 22nd, 2009 1 comment

From the entire OmniGeek family we wish you and yours a Happy Holiday Season and Prosperous New Year!

Categories: Uncategorized Tags:

Odd MacBook Restarts — Maybe I’m trying to create Higgs Bosons

November 4th, 2009 2 comments

Over the past couple of days, I’ve been working on a PowerPoint presentation for an upcoming training session for my day job. I’m using Microsoft Office 2005′s PowerPoint on a recently upgraded to Snow Leopard (10.6.1) MacBook Pro and I’ve had a couple of odd crashes that I’ve not experienced before.

Both times the OS-X window manager blue screened, brought up the Mac “Plasma” login screen and I was able to log back in and continue work. Now while this may be some Snow Leopard vs. M$OFT quirk causing the window manager to die, I’d rather consider other options.

Higgs Bosons

So just what do these sub-atomic particles have to do with this? Well this article explains why some
reputable scientists believe that the Higgs Bosons (I’m not responsible for the headaches from reading that Wikipedia article) are themselves travelling back in time, sabotaging the Large Hadron Collider to prevent it from creating them.


Time-travelling Higgs sabotages the LHC. No, really

from Newscientist.com. The article quotes the New York Times where it humanized the physics writing:

“the hypothesized Higgs boson… might be so abhorrent to nature that its creation would ripple backward through time and stop the collider before it could make one, like a time traveler who goes back in time to kill his grandfather.”

In my case, I’m going to be teaching a subject that the customers want to learn, but I fear the
Pandora’s Box (slightly NSFW image on the page) that I may be opening by teaching it. The topic is about a templating language we use within our tools.

Both of these quasi-reboots (it only rebooted the Window Manager, not the whole OS!!!) happend as I
was putting together one particular slide on “Lists and Hashes”. Something is telling me to not include this slide. Perhaps I’m going to let people know they can wield more power. Is it karma? An omen? An act from the programmer gods? or Higgs Bosons?

Is what I’m about to teach so abhorrent to nature that its instruction is rippling backwards
through time and stopping my PowerPoint slide before I can create it?

Of course, being a science geek, I should point out Occam’s'Razor would suggest I look for a simpler, more logical explanation. In this case, “Microsoft Sucks”.

I’m at a paradox with this. Should I continue? Should I take it as a sign to back off?What are your thoughts? Leave your comments below.

I am a Time god. Bow to my inner-chronometer.

November 1st, 2009 2 comments
Clock close-up
Clock from Images

One of the interesting challenges that a lot of people have is being punctual. We tend to run late and unless you live in Key West, where things run on Island Time where what time you show up, just doesn’t matter. People even have trouble guessing how much time has elapsed or how long things will take.

I however seem to have an internal clock that is insanely accurate. I have a quasi-game I play with my wife, where I insist on stupidly accurate numbers as any good science loving geek would do.  Relative to this post, I tend to give time estimates to an accuracy with in a minute, such as: I’ll be there in 17 minutes. What’s odd, is I tend to be correct within that minutes.

Today I pulled two time estimates out of my proverbial derriere. We were in Virginia Beach and my oldest son, Brandon wanted to be texted when we we left. I texted him: “We will be home at 8:52″. We were over 3.5-4 hours away depending on traffic, weather, stops and so on. The SUV was put into park at 8:53:15, a mere 16 seconds over my estimate. Maybe it was the extra nature stop that I didn’t plan for or it was the two cars that turned in front of us as we entered our neighborhood (delayed us by about 15 seconds). A 3.5+ hour drive nailed to a 30 second window.

This isn’t the first time I’ve done this. Its happens more often than not.

But I’m perhaps more surprised at my other time estimate that at around 2:59pm, earlier in the day my oldest son called wanting to know when we would show up. We still had not had lunch with my younger, hockey playing son. There is no telling how long lunch would take. Chris was not even out of the locker room yet. There is no idea how long the goodbye hugs would take. With no reference point on when we would leave, but I told Brandon “We will be there between 8:45 and 9:00pm”. So off to lunch, hugs good bye, and we were on the road.

8:52:30 was the mid-point of that original estimate. So not only did we pull in within one minute of my mid-point that I texted my son once we were on the road, but I pulled that 15 minute window seemingly totally out of the air.

Yea, bow to my inner-clock.

Now to figure out how to get people to use accurate times on mircowaves and let the the time expire instead of leaving 9 seconds on the clock for the next person.

(Evil Laugh!!!)

Categories: Robisims Tags: , , , , ,

Santa is Real, just a little different that you expect.

October 26th, 2009 2 comments

We have long envisioned Santa Claus as a jolly fat man in a red suit with elves and magical reindeer spending their lives making wooden trains and so on.

Well that was the old Santa who made toys for your parents. Today, kids want toys from Mattel and Hasbro. They are un-happy with generic dolls and jack-in-the-box’s. Elves don’t make Transformers or stitch Barbie’s latest fashions.

Santa realizing this to be the case several years ago, seeing his stock of trains, wagons, and nut cracker’s build up in his warehouse decided to reorganize. Santa now runs a large toy distribution system and it works like this.

You, the child take your parents to special viewing centers where you can see what toys Santa has available this year. These viewing centers are known as Toys ‘R Us, Walmart and so on. Santa allows your parents to have Christmas year round by selecting toys right away for you. But for Christmas, which is the special time, your parents can request what you want and send that information to Santa.

You used to have to write a letter to Santa letting him know what you want, but now, you can just tell your parents or show them. Santa, who now lives in a large office in Fargo, North Dakota. Its disguised, but I’ll let you in on a little secret. Look for a building with a big “Citicorp” sign. He uses a special card that he gives to each parent. They can use that card and let Santa know the right house, kid, and items that he is to deliver on Christmas night.

Your parents can use this special card while in the viewing centers to tell Santa what you need, or then can use their computer to tell Santa your holiday wishes.

Once your parents use the card to enter the information into Santa’s computers, the order goes to the Elves in North Dakota. They processes the orders and send them on to Elves located regionally. Because the world is so large and the toys no longer come from Santa’s workshop, the local elves handle bringing the toys to your house. They however can’t be seen while delivering the toys, so the sleighs have been disguised as are the elves. They use a brown truck and dress in brown clothes to help hide themselves better.

Santa also employees sub-Santa’s to work at the malls in case you want to get your wish list directly to Santa and not go through your parents. This local Santa will send your Christmas needs to Santa to be entered into the system.

Everything runs seamlessly with this system and you stand a good chance at getting your Darth Vadar talking mask this holiday season instead of a pretty red wooden nut cracker.

Categories: Robisims Tags: , , ,

Cool New Plugin — Freebie Images

October 13th, 2009 1 comment
two people on horse back riding on wet sandy b...

Horses Sunset from Stock Photo

 

Today I learned about a new WordPress Plugin called “Freebie Images” from http://www.freebieimages.com/.

The plugin is provided by Crestock.com, an online photo stock agency that normally sells its stock photos for use. But they make some good high quality images available for free to bloggers.The plugin shows up when you write a new post or page and gives you a search box to look for images for your blog.Once you find a photo you are interested in, just click the photo and its inserted into your blog. 

You have to be patient and it doesn’t look like it lets you use more than one a post, but this looks like it could be interesting.

Categories: Tech Geek Tags:

Dungeons and Dragons Uber Cool Gift Idea

September 15th, 2009 1 comment

A friend pointed me to this today and I just had to share it with my geek-kin:

Jones Limited Edition Spellcasting Soda

Healing Potion

These look awesome! Go buys some for your geek friends including me!!!!