Shame and anticompetitive hijinks

24 05 2012

This week, Apple pulled one of Rogue Amoeba’s iOS apps, from the App Store. Reportedly, little explanation was given. I think I might know what’s going on here.

Apple has a history of taking ideas from existing iOS apps, building them into newer versions of iOS, and then making the app essentially useless. It is kind of a dick move when you think about it for half a second. I know people like to associate that “good artists copy, great artists steal,” phrase with Steve Jobs in particular and Apple in general. Unfortunately, when hardworking independent developers get screwed over, everyone loses, even Apple.

Of course, the developer is going to take the brunt of the blow in the form of lost sales. Users who are not aware of the app from whence some iOS feature came will not know that there may be some better alternative, still on the App Store. This might keep the user experience from being as good as it might. In the end, Apple is hurting itself a little by potentially alienating developers. I know, personally, that if I worked my ass off on an app that I was proud of and Apple came along and ripped me off, I would reconsider developing for Apple’s platforms in the future.

Maybe I am completely wrong about all of this and I am just overreacting. I really hope I am. Hopefully, Rogue Amoeba’s app goes back up on the store and they go back to making money from it. Thanks for indulging this rant.


Protected: Developers are not code monkeys

14 03 2012

This content is password protected. To view it please enter your password below:

Intro to structs

25 09 2011

Structs have been a part of the C programming language from nearly the beginning. They seem to be somewhat inspired by objects or, given C’s age, it could be the other way around. I am not really sure.

A struct is like an object, but simplified. A struct cannot have any methods. Without methods, you are left with a structured group of variables. When you create a C struct, you must first define a struct type. This is a lot like writing a class. You define how many variables the struct can hold and what their types are. Here is an example of a struct definition. Read the rest of this entry »

Images and front-end web development

1 07 2011

Something that I have learned while working as a web developer at a business with tight time tables is that images are a time suck. Avoiding the use of images for things like buttons and navigation will save you time in the long run. Why? Code and text are far easier to update when client revisions inevitably come in.

Opening a 50MB website comp and trying to find the right buttons with all their states and account for all the tiny variations between pages will make you want to die. Believe me, I spent over 2 weeks of 16-hour days (including weekends) doing revisions on a site that was built almost entirely in images. In the blink of an eye, I had gone from being a code monkey to a pixel bitch.

When you develop anything, a website, an application, anything, keep the people who are going to work with it later in mind. Things like sprites, well-written CSS, and jQuery can make your website look good, easy for clients and developers to update, and much more flexible.

Now we have CSS3. I worked with a comp just yesterday that had a very subtle embossed effect on the text in the menu items, but that text was a web-safe font. I thought I was going to have to cut out those menu items as images then I learned about text-shadow, which comes with CSS3. This new CSS effect allowed me to recreate that subtle detail in clean HTML and CSS. That means four fewer images that would have to be cut out again if the client ever decided to change the navigation.

My advice for anyone doing front-end web development would be to avoid using images as much as possible. Your site will load faster, it will be more flexible, and it will be easier to maintain in the future.

Example of text-shadow:
p {text-shadow: 0px 1px #3A3A3A}

In order, those are the values for x-offset, y-offset, and shadow color.

Old-school programming not so relevant

28 06 2011

I have been watching session videos from WWDC 2011. For me, they bring up the subject of teaching old programming languages and techniques in an academic environment when the outside world rarely uses them. The stuff that Apple was showing off and people were discussing there was bleeding-edge stuff. However, it will not be bleeding-edge for much longer because developers are going to start adopting all the new developer technologies that they saw there.

I fully realize that it is important to learn the fundamentals of programming before moving on to the more shiny, advanced stuff like what Apple was showing. However, we never moved on. The instructors will probably not move on for some time, still.

An example might be compilers. If you are in the Computer Science program at Purdue, you may end up taking a class where you learn about compilers and actually have to make your own. Last year, Apple announced that they are moving on from the traditional GCC to the brand-new LLVM (Low-Level Virtual Machine). In fact, Xcode 4.2 does not support GCC anymore. It’s gone. History. However, GCC will likely linger for some time in academia because the instructors will not teach anything else. LLVM may be where things are headed, but it is new and unfamiliar. While most new software engineers will not have to understand how LLVM works, it is still a modern programming technology likely to become more and more popular as time marches on.

Maybe we should spend time during the 100- and 200-level computer science courses teaching students the basics of how software works. Things like C, Java, and basic compiler architecture could be covered then. The 300- and 400-level courses could focus more on modern programming techniques and technologies. Many universities have iPhone development courses. This is a step in the right direction. However, there are many other web frameworks out there, like Android, Sproutcore, and Rails that could do with more attention in academia as well. I could be all wrong about this, but this is where I stand on the subject.

Getting started with .bash_profile

22 04 2011

If you are new to the UNIX-like command line interface (CLI) and you think you are going to spend more and more time there, creating a .bash_profile file is something to consider. You may have already used the Terminal for quite some time and never used your .bash_profile.

The .bash_profile is a hidden plain text file that resides inside your home directory (~/). Keep in mind that your home directory (~/) and your root directory (/) are not the same thing. Stay inside your home directory and its subdirectories while we work on the .bash_profile. This file is like a settings file. It keeps instructions that are used when setting up your environment whenever a new shell (Terminal window or tab) is opened. These instructions can specify settings and aliases. I get the most use out of aliases.

I am a web developer, so I spend a great deal of my time in the command line. I actually came to prefer it over the GUI for work-related stuff. By creating aliases, or shortcuts, for my Terminal, I save myself a bit of time and effort when I try to accomplish common tasks.

A good example is getting to where my work projects are stored. I build WordPress sites, primarily and I run MAMP on my MacBook at work so I can build the site on my laptop before I push the code up to our development server. (MAMP = Mac Apache MySQL PHP.) Here’s the file address to a given project’s location:


Obviously, this can be a bit inconvenient, so I created an alias in my .bash_profile to take me to the htdocs folder and list its contents.

alias mamp="cd /Applications/MAMP/htdocs/; ls -l;"

After running “source ~/.bash_profile” or opening a new shell, I can just type “mamp” and I am taken to the htdocs folder and its contents are listed for me. Once you get the hang of this, it can really help you more out of the Terminal.

Custom functions in WordPress can save time

22 04 2011

At work, I deal with lots of complex layouts and designs for websites. I also have to make sure that each site will work on two or more servers – at least our development server and the live site (typically RackSpace). This means I have to rely heavily on WordPress’ built-in functions so that links will function when the site is moved from server to server easily.

I got tired of writing the path to images in my default images folder, so I wrote my own function to act as a short cut. Where I used to write this:

<?php bloginfo('template_directory'); ?>/images/hello.jpg

I can now write this:

<?php image_dir('hello.jpg'); ?>

The function “image_dir” can take an argument that is the images file path relative to your main images directory. If you don’t provide an argument, it will just spit out the image directory  path and you can add a file name or path onto that. The image_dir() code is below.

function image_dir($loc='') {
	if ($loc == '') {
		echo get_bloginfo('template_directory').'/images';
	} else {
		echo get_bloginfo('template_directory').'/images/'.$loc;

That is pretty much it.