Viand Sync Diary #1 – Overview

My wife’s been using Viand for several month’s now with no major issues (there is one minor issue related to text size that I’ll have to fix before I push to the App Store).

The final piece is syncing so both of us can share the same lists on our respective iPhones. I’ve broken the implementation down into several steps.

  1. Sync a single Buy/Add list running on a single instance of the app with the backend database (My wife’s iPhone)
  2. Sync a single Buy/Add list running on two instances of the app with the backend database (My wife and my iPhones)
  3. Sync multiple Buy/Add lists running on multiple instances of the app for multiple accounts with the backend database (My wife and my iPhone; my mother-in-law’s iPhone)

I’ve decide to use Microsoft’s Azure for the backend because I’m familiar with the Microsoft stack, mobile services are free up to a point, and you’ve got to start somewhere.

It was relatively easy to create a mobile service (I chose to use the JavaScript backend because I want to use a tool that ubiquitous should I move into web development).


There’s an excellent post on the Azure site on how to get started with Mobile Services so I won’t duplicate the information here. Two caveats:

  • I’ll have to figure out how to sync my local data to the cloud first (The sample ToDo app starts off with an empty local database).
  • I’ll have to figure out how to add the asynchronous sync to my existing Xamarin.Forms code (the ToDo sample used UITableViewController instead of Xamarin.Forms).
Posted in Side Projects | Tagged , , | Leave a comment

What Makes Personal Computers Special?

While in the midst of cleaning out years of clippings and newspaper articles I came across a dot-matrix printout of the editorial below. I recall seeing it in one of the Whole Earth Software Catalog and Review magazines from the 80s but it turns out that was probably a reprint, it originally appeared in the August 1984 issue of Byte Magazine.

People sometimes ask me why there’s so much fuss about personal computers. Now that there are millions of them in the hands of ordinary people, personal computers are, in a sense, commonplace. Even enthusiasts may forget that personal computers are very special indeed. We would enjoy them even if they lacked practical applications and never overcame the digital indifference so often characterized as unfriendliness. To put personal computers in perspective, we should compare them with such earlier cultural watersheds as the printing press, the Industrial Revolution, and the automobile.

Because it made the production of books far more efficient, the printing press made it possible for more people to learn more than ever before. But while the printing press gave creative work a wider audience and eliminated the drudgery of scribes, Gutenberg’s technology did not directly enhance the creativity of the people who wrote books.

The Industrial Revolution made the production of goods far more efficient than ever before. The efficiencies of mass production made possible the accumulation of great wealth. Unfortunately, mass production also brought about cultural impoverishment of many workers. The assembly line deprived workers of the creativity that belonged to craftsmen— the stamp of individuality that went with good handwork. The Encyclopaedia Britannka puts it this way: “. . .the discipline of the factory (a discipline often imposed by strangers), the remorseless monotony of many of the tasks, and the physical hazard and discomfort of some of the new processes took a heavy toll.” Few would deny that the Industrial Revolution was, on balance, a good thing. But it did exact a great human price.

The automobile changed society for all time by broadening the experience of millions of people. The ability to travel quickly and widely enabled people to see more of the world and to judge it for themselves. The automobile’s influence resembled that of the printing press; while widespread book publishing extended knowledge, the mass production of automobiles extended experience. With broadened experience came wider choice in place and type of work. But the automobile did not directly enhance creativity; furthermore, the automobile was produced by the dehumanizing assembly-line methods introduced by the Industrial Revolution.

The personal computer disseminates knowledge, as the printing press did; increases productivity, as the Industrial Revolution did; and broadens experience, as the automobile did. In many applications, personal computers also reduce drudgery such as needless retyping and recalculation.

What sets personal computers apart, however, is their ability to enhance the creativity of the individual. They have justly been called “mind appliances” and “thought amplifiers.” They can help us manipulate information and ideas with remarkable freedom. Rather than forcing us all to work alike under the supervision of strangers, personal computers will let us develop our own unique ways of working. Rather than requiring personal sacrifices to achieve greater social goals, personal computers will contribute to the achievement of social goals by enriching the lives of individual persons. Programs like Bill Budge’s Pinball Construction Set, Bill Atkinson’s MacPaint, and Warren Robinett’s Rocky’s Boots offer glimpses of things to come.

Will personal computers make us all geniuses or saints? No. But they will help us make the most of ourselves. That is ample reason for regarding personal computers as far more than just another major consumer item.

—Phil Lemmons, Editor in Chief


Posted in Other | Tagged | Leave a comment

On Infinite Loops

Proramming-In-A-Nutshell(via Three Panel Soul)


Posted in Software Development | Tagged | Leave a comment

Developer vs. Good Googler

Scott Hanselman’s reply to developer who asked him the following question:

Some time in my mind sounds come that Is that I am really a developer or just a good Googler. I don’t know what is the answer I am googler or I am developer. Scott Please clear on my mind on this please.

I wonder that sometimes about myself, especially since the jobs I do or the side projects I work on always seem to be at the edge of what I know how to do or what I’ve done in the past. I’ve worked with a lot of extremely smart people over the years, smarter than me, so sometimes the thought that I’m a fraud creeps into my head.

Scott’s suggestions:

  • Remember, you grow when you work outside your comfort zone.
  • Practice. Do Code Katas or problems on Project Euler
  • Program for a day without Googling
  • Think about the problem instead of copying code from Stack Overflow
  • Get involved with others who feel about technology like you do

(via Scott Hanselman)

Posted in Software Development | Tagged | Leave a comment


A browser-based implementation of the original MacPaint.


Screenshot of the original MacPaint for comparison.


Posted in Other | Tagged | Leave a comment

The Joys of the Craft

In The Mythical Man Month Frederick Brook describes the five rewards that the craft of software development provides to its practitioners.

  1. The sheer joy of making things
  2. The pleasure of making things that are useful to other people
  3. The fascination of fashioning complex puzzle-like objects of interlocking moving parts
  4. The joy of always learning
  5. The delight of working in such a tractable medium

I agree 100%. Every day, despite the setbacks and annoyances, I am so grateful that I work in this field.

Posted in Software Development | Tagged | Leave a comment

Two Paths to Innovation

My notes from Chris’ talk on innovation in game design and development at Gamelab Barcelona 2015

Gunpowder vs. Atomic Bomb development (0:00)

  • Trial & Error vs. Deductive

  • Practical vs. Theoretical

  • Slow (1000 yrs) vs. Fast (45 yrs, 3 yrs)

  • Incremental vs. Quantum Leap

  • Evolutionary vs. Revolutionary

What science can we use to inspire games?

We play to learn

Mental Modules

  1. Motor
  2. Visual Spatial
  3. Cause & Effect
  4. Language
  5. Social Intelligence

Games today challenge mental modules 1-3. What about 4 and 5?

All of human entertainment is about social intelligence. Interactive storytelling focuses on social intelligence.

Interactive Storytelling’s 5 “Dragons”

When slaying each dragon lean towards art instead of science

  • Faces with emotions & feelings

Final Fantasy: The Spirits Within vs. Shrek
– Ability to display expressions and micro-expressions

  • Personality modeling

  • Five Factor Model for real people

  • Open

  • Extraverted
  • Conscientious
  • Stable
  • Agreeable

  • Real people are boring, characters aren’t

  • Language

  • Mirrors reality

  • Use “toy” reality
  • Define simultaneously, wordalgorithm

  • Narrative engine

  • Interactive development environment

Slaying the Five Dragons (37:45)

  • Showed pieces of Storytron, SWAT, and Siboot
  • Chris’ preferred personality model – Good, Honest, Dominating
  • Deikto meta-language used to create language specific to reality. Showed iconic and textual manifestations
  • Scrolled through some narrative engine code (“This is really complicated stuff”)
  • Showed some SWAT editors – Verb, Actor, Scriptalizer
  • Siboot
  • Is not RPG, FPS, strategy wargame, text adventure, tower defense game, etc.
  • The difference is not in what it looks like but in what it does
  • Characters have feelings, they behave like they have feelins
  • Characters respond in dramatically plausible way

Questions & Answers (54:10)

Posted in Other | Tagged | Leave a comment

Git Stash

While working in a branch I wanted to switch back to the master branch to see how a previous implementation worked. When I tried to switch branches with checkout I got a message saying I would lose the changes in my current branch if I switched without committing. The message suggested I commit or stash my changes before switching.

I didn’t want to commit the changes in this branch (because they weren’t working just yet) so I checked out Git’s stash command. It turned out to be exactly what I wanted.

After stashing the changes in the current branch I was able to checkout master, review the code in that branch, and return to the previous branch and my broken code.

Posted in Software Development | Tagged | Leave a comment

Quantity Displayed vs. Quantity Saved

Sometimes when saving an item to the Buy screen the quantity saved is one less than the quantity displayed.

On the Add Item screen I’m displaying the floating point slider quantity as a single digit without the decimal values using StringFormat, automatically removing the decimal portion of the number and inadvertently “rounding up”. When I save the item to the database, I convert the floating point slider quantity to an integer.

As you can see in the screenshots below there are situations where I’m displaying one quantity but saving a different value.



To fix this in the AddItemPage’s code behind OnSaveClicked method I changed the line where a new item is created.

Item newItem = new Item(itemName, addToBuyList, (int)quantitySlider.Value);

To this, rounding up the slider’s quantity value.

int quantityRoundedUp = (int)Math.Round(quantitySlider.Value);
Item newItem = new Item(itemName, addToBuyList, quantityRoundedUp);

Making sure the when the new item is created the displayed quantity is saved to the database instead of the slider’s floating point value. In the screenshot below the Qty value is what the slider’s value while the Display value is what should be saved to the database.


Some helpful links:

Posted in Side Projects, Software Development | Tagged , , | Leave a comment

The Difference Between A Developer, A Programmer, And A Computer Scientist

Alan Skorkin wrote an interesting post about The Difference Between a Developer, a Programmer, and a Computer Scientist. I’ve always considered myself a software developer.

They write code. Making it well-factored and clean is important, but other factors often take priority. Math skills are very much optional, but it does help to be aware of common problems and solutions related to the domain they are in.

Communication and people skills are paramount. Process and team dynamics are bread and butter skills.

They are consummate generalists without any truly deep specializations. They are expert at finding ways around problems and plugging components together to fulfill a set of requirements.

In their personal time they are either trying to build the next Facebook, or engage in activities that have nothing to do with programming, developing, or computer science.

(via Skorks)

Posted in Software Development | Tagged | Leave a comment