| Comments

If you’re like me then you probably are more geekier than you are artistic.  I don’t think of myself AT ALL as a designer, but rather one who appreciates both good design and good user centric design.  You may look at this site here and say it doesn’t, and that is okay…I’m trying my best :-).

Smashing Magazine logoBut often I find that I need some tweaks, icons, templates, application design inspiration for a Silverlight application, whatever and just want to do it myself.  I’ve found the one place now where I start to look and be inspired: SmashingMagazine.com.  If you’ve never been there, go and subscribe now if you are interested in design.  Over the past year I’ve found it to be one of the most amazing sites for inspiration and design resources that I’ve added to my toolbox.  Of all the feeds I subscribe to, I can count on the syndicated content coming from them to be 99.999% inspiring and helpful.  I find myself adding almost everything they send to my delicious bookmark list!

Here are some of my favorites and examples (most recent):

And there is so much more.  I look at their Inspiration and Freebies links a lot for aggregation of some of the best stuff.  The great thing is also to pay attention to the end of each article.  The writers are doing an excellent job appending highly relevant information to the topic.  They don’t just show you their top 50 favorite photo blogs, but the related information shows you links on how they were created and where to get more information.

Smashing Magazine has been a daily resource for me for useful tools, resources and inspiration…I highly suggest you add it to your feed list or bookmarks…I am sure it will be a great resource for you as well!

| Comments

Well, it seems that in addition to problems with MobileMe, Apple is getting into some gray area with AppStore.  Applications are appearing, disappearing without explanation to the authors.  The one that got more attention was NetShare, an app that purports to enable tethering of your iPhone 3G.  However despite it being available (actually for me clicking on the link it wasn’t even available then) it seems to be performing one of Criss Angel’s greatest feats in appearing/disappearing at will (or at Steve Jobs’ request).

The latest app to fall to this scenario and be removed from the AppStore without explanation is BoxOffice.  The developer of BoxOffice posted a plea on MacForums:

Apple pulled the app yesterday without giving my any notification that they were doing it, or what their justification was for removing it.


I've tried to contact them about the issue, but it's been a complete dead end. If anyone has a useful contact number for apple, please let me know.


I'm in regular contact with all my data providers, and none of them have had an issue with my app. Indeed, the response was the exact opposite. They like my app and have even asked if i would do custom application work for them in the future. Furthermore, all the data i use is licensed by the owners as 'free for non commercial use'. i.e. precisely what BoxOffice is. Source: MacForums

Here’s my guesses (and only guesses):

1) NetShare pulled because of violation of AT&T terms.  I can’t cite them specifically but I’m pretty sure there is some fine print about tethering and normal use.  Heck AT&T sells a tethering option on some of their devices so I’m sure their crafty attorneys have legalese in their normal terms for 3G devices like iPhone about tethering. 

2) BoxOffice – pulled because it is Open Source licensed under the GPLv2.  BoxOffice has had it’s code up there on Google Code for a while.  Could this be a sign that Apple is now getting around to tightening their reigns on their terms and that OSS applications would not be allowed?  Or perhaps because he has a ‘Donate’ button in the app and Apple can’t get their chocolaty fingers on any donations (which probably violates the terms anyway-however other apps do the same thing).  I can’t wait to see what Cyrus hears back regarding BoxOffice and why it was removed.  And if he does receive that reason…will WordPress follow next?

What gives with updates?

The AppStore model was an exciting one.  I say was becuase I’m starting to see some faults.  This whole appearing/disappearing thing without communication to the authors is frustrating.  Even if they are in violation of whatever terms…a communication to the author is something that should occur.  “Hey you are violating terms XYZ, if you want to be listed in the AppStore you need to patch your software and re-submit.”  Is that so hard?

The other pain I’m seeing is updating.  While the AppStore seemed a great model, the update model sucks big time.  Authors have to go through the same process to submit an update it seems as they would a new app.  For real?  So 1.0 to 1.1 takes forever?  Is that a model that is acceptable to the security world?  What if someone found an exploit in Super Monkey Ball that it was actually taking your contacts and passing them around somewhere?  The v1.x patch has to go through a similar process of a new app?  Seems strange.

The other updating just seems hokey to me.  It really isn’t enabling a software+services model.  One case is the apps that provide reference.  For example, I downloaded the Spanish phrase app (handy by the way).  Let’s say the authors want to add more phrases.  They have to release a whole other app!  I have to download/install a whole other app.  Why can’t the author have their own update mechanism like other real software?!  Imagine if that every time your favorite app was updated you had to completely re-install it each time.  Ridiculous right?  Why should an iPhone app be any different.  Enabling this model of auto-updating should be added to their SDK to enable authors to quickly provide patches and incremental updates to their applications without the AppStore getting in the way.

Well, it is interesting to see how Apple is going through these pains in their new adventures.

| Comments

NDA.  Non-disclosure.  Hush documents.

Not many people like them.  In the technology world they are a necessary evil.  Personally I don’t think that way.  I think NDA’s are generally a good thing.  It’s enabling legalese to let two parties participate in information exchange when they don’t want the rest of the world to know about them.  NDA is a general term, of course, and the wording in any non-disclosure agreement is subject to the two parties involved.  Heck it could say “We’re going to show you everything and you agree only to not talk about feature X…everything else is fair game.”  Usually they don’t.

Enter the iPhone SDK.  The frustrating part for iPhone developers wanting to share their knowledge, innovate on the platform, etc.  It was assumed from a lot of developers that upon the release of iPhone 2.0 software that the NDA would be lifted.  Guess what – it isn’t (as of this writing).  What does that mean?  Well, among other things, people who have the SDK are under that NDA and shouldn’t be discussing it with anyone other than Apple.  Guess what…even if your best friend is under the same NDA, technically your agreement is only with Apple, not ‘anyone else under NDA.’

My local Cocoa/iPhone user group in my area recently shut off their email list and posted this message:

“IMPORTANT NOTE: AT THE PRESENT, IN ORDER TO RESPECT THE IPHONE DEVELOPER TERMS AND CONDITIONS, WE HAVE DEFERRED MESSAGE POSTING AND OUR FIRST MEETING UNTIL OPEN DISCUSSION ON IPHONE DEVELOPMENT IS ALLOWED BY THE NDA, AND BLESSED BY APPLE. OUR GOAL IS TO PROMOTE APPLE IPHONE TECHNOLOGY ACCORDING TO PROPER GUIDELINES AND NOT PRESENT EVEN AN APPEARANCE OF IMPROPRIETY. ALL GROUP MEMBERS WILL BE NOTIFIED AS SOON AS WE ARE FREE TO OPENLY COLLABORATE.” source: Phoenix iPhone Developer Group

As frustrating as it is for passionate folks, bravo to this group to at least ensuring their channel they’ve created isn’t a faucet of information that shouldn’t be shared just yet.  There are other groups that I’ve seen hosting iPhone developer discussions and I can’t imagine how they are doing that without talking about thing that violate the agreement they have in place. 

NOTE: If you downloaded the SDK, you agreed to the NDA – sorry if you didn’t read it, but you did.

An NDA is in place to provide valuable information to those who want to agree to it.  By not honoring that you’re stealing information essentially.  Beyond the legal stuff which I don’t pretend to understand in a deep manner, it just isn’t really ethical for you as an individual, business, developer, community, whatever.  I don’t care if it is with a darling company like Apple…no matter what if you agree you should be responsible. 

Another part of the SDK is the terms.  Besides not being able to be discussed, shown, shared, the terms of the iPhone SDK might prohibit any open source project.  Which brings into question the project from Wordpress.  This is an AppStore approved app that now has source available. (which is using the GPL license).  As Nathan Willis of Linux.com points out that two terms of the SDK and AppStore deployment violate explicitly the GPL (nondisclosure and code signing).  Wordpress putting the source out there violates not only the terms of the iPhone SDK but as well isn’t in line with the GPL they have selected.  How is nobody claiming shame on them?  Just because they are open source doesn’t mean they have the right to violate agreements.

Yes, I know Microsoft isn’t open source all the way by ANY means.  I don’t believe I’ve ever made that comment and certainly not here…this isn’t about a ‘well then you should to’ but rather about honoring known agreements and terms/conditions of use.

If people get lost in a frenzy of excitement and decide just to start violating things they agree to, where does that leave organizations wanting to plan and share information?  There isn’t a lot of trust left is there?  I honestly think that Apple will rectify this soon and perhaps it is just an oversight while they are dealing with the MobileMe troubles as of late, but regardless the terms are still there, the confidentiality agreements are still in place and if you agreed to them, you should honor them.  I know that is a bit of a “duh” moment…but seeing stuff like what Wordpress is doing and user groups sprouting information makes me sad that we as professionals have disregard for these types of things.

I had an idea for an iPhone app that I wanted to do to manage the life-sucking-battery-settings and others even wrote they’d pay money for that app.  When I had the idea I immediately contacted an Apple evangelist and began starting a discussion about this.  Turns out that the settings I’d need to get to aren’t available according to this evangelist in email.  I noticed the iPhone dev team has the headers needed, but even completing the app wouldn’t give me any distribution beyond myself because the mere coding against the properties would violate the terms and wouldn’t be approved in AppStore.  I suspect an app like this will surface (perhaps in the Jailbreak world) and if it does on AppStore, I’ll be pissed that I was misinformed and missed out on an opportunity!  Where was I?  Oh yeah, anyway I went to the source (Apple), inquired, and was told it wasn’t possible per the terms.  It sucks, but I’m going to honor those terms…because I agreed to.

And if you did, so should you.  Wordpress…shame on you.

Related articles:

| Comments

This blog runs on SubText.  I heart SubText.  I know there are others out there but for me SubText has met most of my needs.  And when it hasn’t I modify it.  Which brings me to this post.  There was a thread on an email list I belong to about Windows Live Writer (I heart Live Writer too :-)) and categories (adding new categories on the fly).  This got me to crack open the source and hunt.  Alas, there was no support for this.  I’ve been ranting about WordPress API support for SubText on the developer list and I think if I rant one more time it will probably get assigned to me.  Please keep in mind that my modifications were solely intended to make Live Writer the best tool for me…these are targeted at Live Writer functionality and may/may not add value to other areas of functionality.  So on with the show…

The Slug

One of the features in SubText is the ability to auto generate URLs based on the title of the blog post.  Well, I didn’t like that.  I usually want my URLs to be a slight derivative of the URL.  My workflow, then, has been to post as draft, go to the web interface, change and then enable the syndication.  I am sick of doing that.  So let’s start with that first.  You see in blog terms the end part of your URL in called a “slug.”  SubText calls this a ‘friendly url’ and other engines may call it something else.  Here I’m going to call it a slug.  My colleague Jason Mauer has a custom blog engine he uses where he’s implemented almost every blogging API in his set.  I’ve been geekly jealous of his API for some time…now it is time to change that.

I’m not going to go into the philosophical reasons why I want a different URL slug and why I want different ones.  We can debate that over a Mt. Dew some time if you’d like.

SubText uses the MetaWeblog API by default.  The developers chose to implement the spec of MetaWeblog (as they should have) and thus the slug is not a part of the newPost spec and the Post struct used to identify the structure of a post.  So my modification was a few steps.  If you are familiar with the latest source (1.9.5b) of SubText, I’ll be referring to line numbers in there.  First, I had to modify that Post struct for the MetaWeblogAPI implementation.  Now some may shirk that this is a no-no…and I might agree…so if modifying something that isn’t going to conform to a spec that really isn’t full anymore, then move along.  I modified about line 63 and added the following:

public string wp_slug;

I actually could have used wp_slug or mt_basename, both of which mean the same thing and both of which are sent to the API by Live Writer…so I just picked one.  Now my struct has the information when it passes it along for creation/edit of the post via Live Writer.

The next step was to modify the implementation of the post.  In MetaWeblog.cs at about line 234 I added:

if (!string.IsNullOrEmpty(post.wp_slug))
{
    entry.EntryName = post.wp_slug;
}

I also added this to the editPost method to ensure compatibility on edit.

The final step was to modify my wlwmanifest.xml file to announce to Live Writer that I now support this feature.  This is done by adding to the <options> node of this manifest:

<supportsSlug>Yes</supportsSlug>

Then do a refresh of the account settings in Live Writer.  When you do that, in a new post click the little ‘up’ arrow just underneath the editing area and you should now see a Slug field:

Now I don’t have to post a draft and login to change!

New Categories

The thread actually started with wanting to create new categories during a post.  SubText is one of the engines that doesn’t expose this API directly just yet, so some altering had to be done.  Here’s what I did.  I chose to mirror the WordPress newCategory method to do this. 

First I added IWordPressApi.cs to Subtext.Framework.XmlRpc.  The complete code within it is:

using System;
using CookComputing.XmlRpc;

namespace Subtext.Framework.XmlRpc
{

    public struct WordpressCategory
    {
        public string name;
    }

    public interface IWordPressApi
    {
        [XmlRpcMethod("wp.newCategory", 
            Description = "Adds a new category to the blog engine.")]
        int newCategory(
          string blogid,
          string username,
          string password,
          WordpressCategory category);
    }
}

I then went into MetaWeblog.cs and implemented that interface with:

public int newCategory(string blogid, string username, string password, WordpressCategory category)
{
    LinkCategory newCategory = new LinkCategory();
    newCategory.CategoryType = CategoryType.PostCollection;
    newCategory.Title = category.name;
    newCategory.IsActive = true;
    newCategory.Description = category.name;

    newCategory.Id = Links.CreateLinkCategory(newCategory);

    return newCategory.Id;
}

I chose to ignore the slug/description fields (again, thus ignoring the spec which isn’t ideal) at this time, partly because I was getting errors and partly because I decided that I didn’t need them anyway.  I don’t use the description field in categories in SubText, so I just set the description to also be the title.  I also had to modify the wlwmanifest.xml file with:

<supportsNewCategories>Yes</supportsNewCategories>

and refresh my Live Writer account profile to pick up the changes.  The result is now my category options in Live Writer include an “add” feature:

Done with both of those.

Future Posting

This is something I started to look at and added the information to the MetaWeblog API, but it seems that SubText doesn’t filter out future posts in the UI – or at least my quick scan didn’t reveal it did.  I’ve moved on away from this one since I don’t future post right now, but I’ll come back to it in a while.  What I did do, however, to prevent me from thinking SubText supported this was modify my wlwmanifest.xml file to include this definition in the options:

<futurePublishDateWarning>Yes</futurePublishDateWarning>

This way at least if the idiot in me *thinks* I can do it, Live Writer will warn me.

So that’s it!  These little adjustments make my Live Writer + SubText experience AWESOME.  Live Writer truly is one of the best tools Microsoft puts out (aside from Silverlight of course).  I’m going to submit these modifications to the SubText team and see what sticks.  I assume none will since they are admittedly partial.  But I’ve been suggesting on the dev list that SubText expose a WordPress API and I have a feeling I’ll need to start working on that for the team.

Hope this helps some of you!