NineOneOne: First App Submitted to iTunes AppStore!

After weeks/months of work I have submitted my first app to the iTunes AppStore!

So, now we wait for the approval/rejection to occur (hopefully not the latter)…

In truth, the amount of work can actually be measured in hours or perhaps days, with the actual building of the app being the least time consuming part since this is a very basic application.

I had no idea going into this the amount of time that would be spent on the preparation of the application for submission. At this point it is probably the most daunting aspect of the process — the development of the product was the simple[r] part. I expect that it will get easier the more apps I create, and having gone through the process once already, at least now I know what’s involved and what some of the potential gotchas are.

It’s tough to go it alone, but for now that’s what I have to stick with, having a day job and no capital to back up my projects or to hire other staff, much as I would like to be able to focus on this alone. It seems to me like you really need a team of three (+/-) people to make a really decent app in a timely fashion. Ideally, I think  I could get by on a relatively lean three-person team and would consist of:

  • Me. (duh)
    • product design and specification
    • UX/interaction design
    • iPhone development/programming
    • Web site programming (if required)
  • graphic designer (my graphic design skills are limited, and I’m really slow at what I do…)
    • iPhone interface eye candy
    • Icon design
    • Web site design
  • Deployment/distribution (and marketing) engineer
    • Manages distribution for testing, arranging and managing alpha and beta tests.
    • Handles all iTunes AppStore preparations (SKUs, marketing materials)

That last one is kind of squidgy, but it was the stuff that really made me insane on this first go-round, and having someone – even just part time – to collect the resources and manage the iTunes part of the equation would be really helpful. This persone would be someone who has done it a number of times and knows all the little gotchas. There are many.

Thankfully, I chose to create an app that was very small and not real complicated to construct. Otherwise, this app would never have gotten submitted! However, since it was an app that I personally needed (but didn’t realize until after I needed it), I felt pretty strongly about just getting it DONE!

I will announce when the app is approved, if it is approved. In the meantime I will be planning out the next update for NineOneOne, in addition to the next app in line…

Easily refresh an UpdatePanel, using JavaScript [Encosia]

Seems that I occasionally need to trigger the postback on an UpdatePanel, and invariably I forget between usages.

Since this particular post from Encosia has saved my bacon on more than one occasion, I shall share it here (and for my own future benefit):

Easily refresh an UpdatePanel, using JavaScript | Encosia:

I’ve noticed a lot of discussion lately regarding methods to refresh an UpdatePanel via client script. This is very easy on the server side, of course. You can just call UpdatePanel.Update(). However, on the client side, the most common solutions I’ve been seeing just don’t feel right. Many will advise you to use a hidden button control inside the UpdatePanel, manipulated via button.click(), to trigger a partial postback of the UpdatePanel. While it does work, I never have been able to get past the kludgey nature of that solution.

In a nutshell, we can use the __doPostBack() method:

Luckily, there’s an easy method for triggering a postback targeted at the UpdatePanel: __doPostBack().

As long as the event target of a __doPostBack() call is an async trigger of an UpdatePanel, the ASP.NET AJAX framework will intercept the postback and fire a partial postback instead. For purposes of demonstration, I’m going to add that to the OnClick event of the container div:

<div id="Container" onclick="__doPostBack('UpdatePanel1', '');">

Now, clicking anywhere in the UpdatePanel will trigger a partial postback, targeting the UpdatePanel. Since partial postbacks follow the full page lifecycle, this will fire UpdatePanel1_Load and update the Label’s text.

Giving Users Some Credit [Design Informer]

Really liked this article, which is a little reality check for web usability. Especially neat was the UX version of “The Golden Rule” at the end of the post.

enjoy.

Giving Users Some Credit | Design Informer:

Creating designs that are intuitive and easy to use is something we should continually strive for if we want our sites and applications to be visited and used by as many people as possible. Ultimately, making those sites easy, as well as enjoyable, to use is a critical part of helping them be successful and it starts by abandoning outdated opinions on what users can, and cannot, understand. It starts by giving our users some credit and realizing that they are not ‘idiots.’

Simple CSS Cross-Browser Drop Shadow

After seeing what Google did with Google Images, I thought, “OK… time to find a cross-browser way of doing drop shadows.” I was expecting to find something that combined CSS, HTML, and possibly some JQuery (which has some plugins for doing drop shadows, but none that really struck me as adequate for my project’s needs).

So then I found a reference to this blog post by Robert Nyman:

Drop shadow with CSS for all web browsers – Robert’s talk

…which includes a very simple CSS rule that seems to work in the following browsers:

  • Firefox 3.5+
  • Safari 3+
  • Google Chrome
  • Opera 10.50
  • Internet Explorer 5.5+

…and here’s a quick look at the final product (with some extra commentary from yours truly…):

.shadow {
	/* firefox, mozilla, et al. */
	-moz-box-shadow: 3px 3px 4px #000;

	/* webkit: safari, chrome */
	-webkit-box-shadow: 3px 3px 4px #000;

	/* css3 */
	box-shadow: 3px 3px 4px #000;

	/* For IE 8 (concatenate on one line) */
	-ms-filter: "progid:DXImageTransform.Microsoft.Shadow(
		Strength=4, Direction=135, Color='#000000')";

	/* For IE 5.5 - 7 (concatenate on one line) */
	filter: progid:DXImageTransform.Microsoft.Shadow(
		Strength=4, Direction=135, Color='#000000');
}

I’m thinking that with some tweaking of the colors I can get what I’m really after, and this should integrate nicely with some relatively simple JQuery scripting as well.

We shall see… if it doesn’t work out I’ll post a follow-up.

Occam’s Razor: A Great Principle for Designers [Webdesigner Depot]

Occam’s Razor: A Great Principle for Designers | Webdesigner Depot:

Lex parsimoniae is the Latin expression of what is known in English as Occam’s Razor, a philosophical rule of thumb that has guided some of the world’s best and brightest minds (including Isaac Newton). It is named after the 14th-century logician and theologian William of Ockham. But what the heck does Occam’s Razor have to do with web design? I’m glad you asked. To put it plainly, Occam’s Razor states that the simplest explanation is usually true. For our purposes, to use Occam’s Razor is to do something in the simplest manner possible because simpler is usually better. In this article, we’ll show you how to use Occam’s Razor to create better websites and to enhance the user experience, both for yourself and your clients.

Overcoming Design Creative Block

While specifically written for Logo Design, I thought the suggestions contained in this article were applicable to most other design disciplines like web or user interface design…

Tips for Overcoming Logo Design Creative Block:

This phase can be very frustrating for any creative person. If you don’t recover within a few days, a creative block can destroy your self-confidence. The fear that you will never again be able to produce good work drives you to desperation. You try harder and harder and end up exhausting your mental faculties. This makes the situation worse. Therefore, it is very important to deal with this delicate phase of creative block with a lot of patience and care. Only you can get yourself out of it. Designers all over the world face this problem and don’t know what to do. There is actually no reason to panic. Let’s look at a few ways by which you can get rid of your creative block.

Setting Session Variables in ASP.NET from JavaScript

Someone on the ASP.NET forums asked how to set session variables in JavaScript. The answers given ranged from “totally wrong” to “rather misleading” or “marginally helpful”.

So in a nutshell, yes, you can totally do it. Not only will you be able to do it, you will love doing it after you get used to the process of getting it set up.

Here’s the recipe for success:

  • Add an ASP.NET AJAX ScriptManager to your page.
  • Create a simple ASMX Web service using Visual Studio.
  • Uncomment the Attribute directly above the class definition that reads [System.Web.Script.Services.ScriptService] to enable ASP.NET AJAX to see your web methods.
  • Create a method to get or update data in your session, and make sure the Attribute above the web method reads [WebMethod(EnableSession = true)] so you can have access to the session via your web service method.
  • Add a <Services> section to your ScriptManager.
  • In the <Services> section add a <ServiceReference> element with the Path attribute set to the path of your .asmx page.

OK, so that enables the ability to access your session from the client side.

But here’s the really awesome part:  if you include a reference to the web service in your .js file like so:

///<reference path=”~/MyServices/MyService.asmx” />

…you will get IntelliSense in the JavaScript for your web service methods! it’s very cool.

So then you just call your web service methods like you would any other JavaScript function. It’s totally easy and almost magical. It’s one of my favorite features of ASP.NET AJAX.

Designing with Paper Prototyping [UX Booth]

Designing with Paper Prototyping | UX Booth:

Prototyping is key to any successful design. Paper prototyping is usually the first step, but does it fit into a world where mobile devices are king? Yes, but not using the conventional method. Combine the physicality of the device and the power of paper prototyping and you have a solution that’s fit for the new era of computing.

NSOperation Xcode File Template

From Jeff LaMarche’s iPhone Development site:

iPhone Development: NSOperation Xcode File Template:

NSOperation Xcode File Template Although I’m generally averse to using a lot of template or boilerplate code, there are times when it’s handy to have file template beyond those that Apple provides. Something I’ve done a fair amount of lately is to create NSOperation subclasses, and there’s enough work involved with setting up an operation that I made an Xcode file template that contains all that setup work.

This template includes a delegate and a protocol and some private methods for communicating with the delegate. Now, when I have lots of NSOperation subclasses in a single project, I’ll actually move much of this stuff to an abstract parent class or a category on NSOperation, but templates don’t have any way of setting up dependencies, so I’ve made this self-contained and you can do your own refactoring.

Making User Interface Elements Difficult to Use By Intent [Six Revisions]

Making User Interface Elements Difficult to Use By Intent:

In modern web interface design, no other principle has been heralded and pushed onto us as much as the concept of user-centered design. User-centered design tells us that we should do everything we can to make our user interfaces as easy to use and as intuitive as possible.

However, a big part of designing user interfaces that are easy to use also involves figuring out what things should be a bit more difficult to to use. It’s a counter-intuitive notion that’s central to effective user interface design.