AT&T: Here is how to solve your network congestion
Why is it that today in Phoenix and Scottsdale, Arizona when I go into a restaurant, grocery store, department store, hardware store or discount store, that there is no WiFi signal on my iPhone? Yet I look around and there are many iPhone users, using their iPhones. That observation alone is rather telling about the iPhone, but I digress.
Would it not be cost effective for AT&T to subside the buildout of WiFi in businesses if nothing else but to take the load off their cellular infrastructure?
AT&T could offer subsidies and services to ensure proper security for those establishments who don’t care about the internet and don’t understand that it is an amenity just like music and mood lighting.
There are likely some silly 20th century government regulations that prevent AT&T from implementing this type of solution.
Closing in on Two Years of Startup Success
What does that mean to the success of Software Ops?
Revenue is the foundation of a business’s success. I know that’s a magnificently hard to comprehend concept. I’m kidding. For someone who is living in the trenches of the App Store that has over 100 thousands apps for customers to spend their money on, having them spend money on my apps generates revenue for Software Ops. That in turn allows for development of new features and new apps, thus creating more success.
Expertise on iPhone Development and App Store
While I don’t know everything about developing on the iPhone and the workings of the App Store, people are seeking me out to help them with their development and business needs. This is a fantastic development for Software Ops future prospects.
I expect good things for Software Ops in 2010.
This will not happen with MEO and Aerochive
When I decided to provide a backup feature for My Eyes Only™, I contemplated providing a cloud solution. On some levels it would be easier for our customers to simply have an online solution for data backup. Massive data loss was one of the risks I considered if I chose a cloud solution. Ultimately, I deemed it too risky. In addition, there is potential for hackers to access the cloud data and open up all our users to the risk of stolen identity. It became very obvious to me that desktop solutions are better for our end users.
Having MEO user data stored on our servers, no matter how extensive the security, would be a big target for hackers. Having each user’s data stored on their computers, distributes the data, and lessens the risk to each user. Why? Because there exists no big datastore of critical data as a target for hackers and thus protects all Aerochive users. A hacker is less likely to target individual user machines to find data stored in Aerochive.
Aerochive’s data is fully encrypted and password protected. If a user smartly puts their computer’s data behind a firewall, then it becomes even more difficult for a hacker to attempt to get at the data.
Protecting your data on your computer
- Aerochive encrypts and password protects the data.
- Turn on your computers firewall to protect from Internet attacks. (Note that you will need to allow incoming connections to your firewall for Aerochive.)d
- Turn on your WiFi security.
- Make sure you password protect your Mac or PC even if it is a home computer. Somebody could steal it and have access to your data.
Your Jailbroke iPhone is at Risk
Jailbraking your iPhone is a risky thing to do if you intend to keep personal information on your device.
Front Page of the Arizona Republic
This story struck a chord with many who read it, some commentators called me an inspiration. I’m happy to be an inspiration. Because I have believed for a long time that being independent is the best way forward in the software industry. I say this after spending over 20 years working for the man. Being independent doesn’t mean being alone. To prosper I will need to grow my business and to do that I will need help. For now the best way to do that is to ask others to share the risk in hopes of sharing the rewards.
I can’t but help respond to this comment from MyHappy, if you can believe the name:
This is a great story. It lets you know that if you are really brilliant, able to write software code for new I-Phone apps, and you work 70-80 hours per week you can earn enough to feed your family... maybe. Oh goody, sign me up for unregulated capitalism...
There is nothing more gratifying then earning a living and taking care of my family, providing them a richer and happier life. It is the true American dream. I hope to expand my business and help other achieve their dreams.
Macworld Review of MEO
Three mice, not bad not great.
The reviewer, who is John Brandon is a 20-year veteran Mac user who used to run an all-Mac graphics department, didn't like MEO's graphics at all. Fair enough, but I think he overweighted style and underrated substance. MEO is very secure app that has an fantastic usability, ie, ease of use.
He also mentioned a weakness of not having customizable categories. I believe that is a true concern.
The good news is that if I choose, I can redo the graphics because I did use MVC in MEO. It be honest, some people love MEO an it's UI and others dislike it. UI is that way. What do I think? I like the metaphor I've created in MEO. The execution is could be better. I have held off massive changes in part due to expense of good graphics and the expense of writing graphics code to implement a different UI. Also, I've spent many man hours on security and data integrity. I believe I hit a home run on data backup and restore my desktop app, yet that was hardly mentioned. What I have works great.
Feel confident that MEO is a fine iPhone product.
iPhone Security and Encryption
While I don’t doubt that a hacker or the FBI, NSA or the CIA can crack iPhone encryption, how does that affect your security risk? Very little I suspect. Here is why.
To get access to your data a person will have to have physical access to your iPhone. I’m not sure if the NSA or CIA need physical access, but from the report above a hacker would have to get physical access. Your risk then is that your iPhone would need to find it’s way into the hands of a hacker criminal with access to the tools described in the article. Can that happen? Sure but what are the odds? Following is a story about common criminals, the kind you do want to protect against. Read More...
My Eyes Only breaks the top twenty in Business
We understand that there is much more to do. The list is long an extensive. Many are direct customer requests and others are fantastic ideas that someday will make MEO useful beyond our customer’s current thinking.
Notes: Take notes and keep them private
MEO Roadmap
You will be happy that you’ve select MEO to protect your important personal information.
iPhone Key Chain and Distribution Profiles
I decided to “clean up” my distribution process and use one distribution profile for my two existing apps instead of using the original distribution profile that I had used for the initial release and 4 updates. I didn’t know that this would have a negative affect on the ability of MEO to access Key Chain items that had been placed into the Key Chain by previous versions of MEO.
An application that has placed items into the Key Chain can’t retrieve those items if a follow-on version is signed with a different distribution profile.
This behavior isn’t documented anywhere that I can find at the time of this post. I like this feature and shows that Apple is building strong security into the iPhone’s Key Chain, but please document it so we all understand the behavior.
I did find this instruction on the Distribution tab of the iPhone Program Portal, but I had not known this information was documented, because I had released many updates of MEO before this information was posted. I do believe item 1 below is key and should be made more visible to all iPhone developers.
Updating your ApplicationThe App Store uses three pieces of information in your application to identify a submission as an update to an existing application. When you are submitting an update of your application to iTunes Connect for App Store distribution, make sure to:
Use the same Distribution Provisioning Profile to build each new version of your application
Increment the CFBundleVersion and CFBundleShortVersionString values in your project Info.plist file. Note: Version numbers must be period-delimited sequences of positive integers (1.0 to 1.1, or 2.2.1 to 2.2.2).
Some may ask, “did you test your software before you shipped?”. The answer is yes. But you must understand, that I tested with a development profile that I hadn’t changed. The binary that I signed with the new distribution profile is correctly accessing the Key Chain, but the iPhone OS is denying access to the items because of the different distribution profile. The code is correct; my build process was incorrect.
There was, and still is, no way for me to find this “bug” prior to MEO being released to the entire world. iPhone developers can’t test the final released build before it is released to the public. This is a BAD process and that I suspect has hurt other developers.
I suggest the following.
1) Developers submit to iTunes.
2) iTunes approves for release, but doesn’t actually release it.
3) Developers can download and test what iTunes has approved.
4) Developers then OK, the release, and it hits the iTunes store.
If the developer finds a problem with the binary, the make the fix and start over at #1. All the while, the existing version of the app is selling in the App Store.
Advanced Password Management
We have added the most complete password management for a mobile personal information keeper.
Here are the new capabilities:
- Password Reset - Reset your password and feel confident that your secret data will not be compromised.
- Password Recovery - Add a password recovery question and an answer that only you can answer. Answer correctly, and you will be allowed to reset your password.
To add a password recovery question and answer, you will need to go through the process of resetting your password, in the Settings -> Pasword Settings -> Change Password and Hit button.
Backup your iTunes App Backups
How to Restore from iTunes Backup
When your device is attached, right click on the device and you will see the following options. Select “Restore from Backup...” and all the data backed up onto your iPhone will be restored from the last time it was synced/backed-up.
See our support page “How do backups work?” section for more details.
Version 1.1.1 Released
Number 1 Customer Request - An option to request password at startup. If you want to keep all your information private, go to Setting -> Password Setting and Request Password At Start -> change it to Request Password At Start
Added an “Other Card” in the credit card category for cards not already in the list
Added the icons for the cards in the credit card category list
What’s Fixed
-In the Logins, if you have a URL that starts with “https” it now will link to that URL if it is valid.
Fixed credit card customer server phone number entry issue with the form of xxx-xxxx.
The new Settings screen includes Password Settings
The new Password Settings screen allows you to select when you want to have MEO ask for your password. Read More...
Version 1.1 Submitted: Update
I’m a bit behind on the blog, but version 1.1 has been out for over a week and I believe that the majority of my customers have upgraded.
My Eyes Only™ Hits the App Store
Avicom to the rescue!
If you find that softwareops.com is a great looking site and that My Eyes Only™ has a very iPhoneish icon then I will give credit to Avicom for their creative design. Also, the backgrounds for the information screens for MEO were also created by the talented staff at Avicom. So, if you’re looking for creative support for your application or web site, click on the icon above and find out more about Avicom.
App Store Reviews
First I want point out that I want constructive criticism from users who have actually purchased My Eyes Only™.
The Freetards
Where to start with this. The freetards have polluted the App Store. This is a disgrace to the wonderful App Store. Using the word disgrace is an emotional response and I said I would use logic. Well, there is just no logic to the freetards. It is a religion filled with emotion.
Report Your Problems to the Company
It theory, this should not be needed but if you run across repetitive problems that you did have in the first place, then reboot. Here is one comment that was fair but, put the blame in the wrong place. This was for an application that I’m interested in purchasing.
I was just about to post this great review about how the application is easy to use and turns you free time in great fun, when I started to have stability issues with it. At the moment the program does not run at all, clicking ok the icon does nothing but shows the splash screen (which it already annoyed me because it takes time from starting the application) the quits.
Well I had the same problem with my iPhone and I was stumped. But, by happen stance I decided to re-download my apps from the store. Did you know you could do that? Well that cleared up my problem.
Reboot Your iPhone
I was testing MEO and I found a bug that I could reproduce. Those are the best! I did it 5 times while having lunch so I had it nailed. Well, I decided to reboot the iPhone, just to see what would happen. Well... I could not reproduce the problem. In fact, I spent an hour and a half trying to reproduce the issue and finally gave up. It most likely wasn’t my problem.
Don't Make Me Enter My Password...
You see, one thing I learned early on is that you may not actually have all the information stored in MEO that you though you did. So, allow me browse a bit to see if that infomation I need is in MEO ..... then just as I have zeroed in on the info you’re looking for..... and I’m just one simple touch away from what I’m looking for.... the darn MEO application makes me enter your stupid password!
PERFECT!!
Last Minute Eye Candy Change
So when you select the edit mode you would expect the text to remain white, but in stead you get shade of gray. Why would I mess with such a wonderful scheme?
The reason is because of the magnifying tool.
Well, where’s the big problem here it looks just fine, right? Well, the magnifying tool is “smart” enough to respect the color of the text. Thus, the beautiful white text was invisible on the white background. Not such a good thing. I had to scramble in the last day before shipping and select fonts colors for my various fields so they would show up both in the field and in the magnifying glass. What I have is a compromise but what I have now works.
Oh, BTW, I figured that if the magnifying glass respected the font color, it probably respected the background color. Well, no.
Entering information into My Eyes Only™
What I did for MEO is to design appealing visual layouts with elegant graphics as a back drops for simple edit fields. Then I used the power of the iPhone keyboard to move from field to field. In addition, if some fields had fixed lengths, as in a credit card number or social security number, it just moved to the next field automagically. I also highlighted the current edit field to help the user see what was being edited. (I credit Dan M. for the tip.)
In addition, when you are done entering the last field that is visible, when you go to the next field that is out of view, it scroll into view. Very cool! And useful I might add.
Submitted to the App Store
In reality it will be the beginning of the beginning. Everything I’ve done so far, was just the prelude to the beginning.
Help from DTS
To break me out of the bind I was in, I decided to use one of my DTS tickets and asked for support. Now in the fairness of full disclosure, I asked for support regarding the KeyChain APIs about 6 weeks before I received the help. But, help was quickly sent my way once I was accepted into the iPhone program. It was like the damn broke. I got accepted into the program and then the DTS support showed up and it was exactly what I needed to keep me moving.
With the help from DTS, my biggest technical concern is now being worked on with success. It will soon be behind me.
Interesting iPhone Apps, I've Seen: The creativity level is high
These are all real concerns, but what I've seen, is that I bet I won't have too much to worry about. Why, because the apps that I've seen, are nothing that I would have thought of, nor what I would write. And that is because the ones I've seen are so creative that I just couldn't have created them. I will be sending out some links when I can, to show you the creativity.
Sure, there will be duplicate apps on the iPhone and perhaps even duplicates of what I'm building. But, I believe I will be OK. More importantly, the iPhone users will be blown away with what they are going to have in their hands, literality, in the near future.
iPhone Program Hell
Given the number of folks out there without early access, I feel that I have to step up to the plate and deliver a high quality, application that meets the high stands of an iPhone application.
Snow Leapord: Performance is a Feature
While I agree that stability should be free guess what? It is free. That is what all the third digit updates are about. And in some cases new features are added and performance is improved for free. I think Apple is holding up its end of the deal. But what about pure performance improvements?
Performance is a feature of a working system. It takes a great deal of effort to identify, assess, engineer and test performance improvements. In fact, a proper product organization considers performance a feature. It needs to identify where performance is key to a product, plan for time to investigate performance improvements, implement the performance enhancements and then test. Then, when performance has been achieve, it needs to be marketed just like any other feature.
I give Apple product managers and sr. management credit for standing up and saying that performance is a feature, and treat it like any other feature. It’s a Think Different kind of move.
Now That Was Easy!
I first build the xCode project for My Eyes Only with Beta 1. I used that project through all the beta releases including beta 6. When I got device access and provisioned and iPod Touch, by following the multi-step instructions, I was ready to compile and run on the iPod. When I compiled with to the iPod target it didn’t compile. Sad Face. But if I build a new Cocoa Touch project in xCode, compile and run, well like magic it ran on the device. That was just so cool! But I still have a problem, my project didn’t compile.
I’m the kind of person that looks for the easy way out, especially when time to market is key. As a wannabe Indie, I need to get product into the market. So I thought to myself, I can struggle through the compiler errors or perhaps try make a new project from scratch and add all my file and compile and run and see what happens. So I did. And it worked!
WOW! Was I jazzed. I mean, it just worked like magic. My application that had been running on the simulator ran on the Touch without a single line of code changed. Did it work because I was some kind of genius engineer? No. It just worked because Apple has some genius engineers, and development manager and project managers and product managers.
The bar is high.
Getting with the Program
I owe thanks for another Indy developer for pulling some string for me and getting help from Apple evangelism. I’m not going to name-names at this time, but those who have helped know who they are. I will give credit after July 11th.
I’m grateful for you help.
Deselecting a UITableViewCell within a SelectRowAtIndexPath
- A user shows a UITableView and selects a row.
- The Row highlights to indicate the user made the selection.
- The UITableView scrolls away.
- The user shows the same UITableView again, this time the same row is selected.
- Sad Face for me the programmer
Note: I believe this is only happening with UITableView that is created from a nib file.
So what is the big deal, just use deselectRowAtIndexPath: and it is deselect the row. Well there is a catch, or not if you are smarter than me. The catch is you need out use deselectRowAtIndexPath:indexPath animated:YES and heres why; If you set animated:NO then the row never get highlighted and the user may not really know which cell was selected. But if you use animated:YES then it deselects during the animation, right after it does the selection during the animation. Makes sense? Well not really, but the good part is that the next time the table view is shown the selection is gone, as I wanted.
Sad face gone.
Here is some code to ponder. This is a TableViewDelegate and I'm using the tableview as a modal view.
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
// do some stuff
[self.navigationController dismissModalViewControllerAnimated:YES];
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}
Apple Has Set The Standard
This is a challenge for any application developer because we are all new to the platform. If you are a seasoned Cocoa developer you have a leg up on the mechanics of iPhone development, but what do you really know about hand held devices? What about other mobile software developers? Sure they understand the concepts of mobile computing, but the development environments are totally new. Then there's that WOW factor thing. Windows mobile applications just don't have that, so those developers will need to get into the groove of iPhone development. If you are starting from the ground floor, you have to learn how develop for mobile devices and learn the Apple way of software development. What could be more exciting!
With this said, I believe that the initial round of iPhone and iPod Touch applications that will be available at the "grand opening" will be nothing short of stellar. By bringing on third party application developers, Apple has stacked the deck in goal to dominate the mobile device market.
iPhone Development: Beta 4
Many of the API changes are of the properties type. That look like this:
Modified CLLocation.altitude
|
|
Declaration
|
|
Old
|
@property(readonly)
CLLocationDistance altitude
|
|
New
|
@property(readonly,
nonatomic) CLLocationDistance altitude
|
While there were a large number of these changes, I suspect they are starting to lock down their APIs in much of the SDK.
Without digging too much into this method, I think I'm going to like it: -[UIViewController initWithNibName:bundle:]
I also want an example of how to use the Proxy Object in IB.
My application didn't compile because they removed UIModalView. But added UIActionSheet and they updated their sample code so it will only take me a few minutes to get back online.
iPhone Development: Beta 3 and Interface Builder
But then, while looking at the updated examples, what did I find? But the use of xib files and IB. I was very excited because one example was exactly how I needed to use IB for my IPhone application.
The moral of the story? Don't get ahead of Apple's SDK engineers or you will endure much pain.
iPhone Development: UITableView nib Hell
The gist of the problem is, once the UITableView has been displayed with some cells, when I try to change the state of the cell by using UITableViewDelegate protocols, implemented in my UIViewController for the table view, noting happens. If I try to deselect, reload the data in the view with new data, it just doesn't show up.
For example, making this call doesn't actually visually deselect, but does actually deselect internally, meaning there is not selection in the UITableView.
[(UITableView*)self.view deselectRowAtIndexPath:selectedRowPath animated:animated];
If I want to reload the view with a different set of cell data and I do the following.
- (void)viewWillAppear:(BOOL)animated
{
self.title = [self categoryToShowInTable];
[(UITableView*)self.view reloadData];
}
All the table vie delegates get called such as cellForRowAtIndexPath, but the view as displayed doesn't show the new items.
It almost seems to me that I have something very wrong, and it is causing me this behavior. If that is the case I'll update this entry with the solution.
iPhone Development: The Whole Delegate Trickery
@interface CategoriesViewController : UIViewController
So, I declare my view controller and add in a few protocols and I'm in business. Well, have access to the "business" anyway. I don't know how this is done in the OO runtime world, where it came from, (Smalltalk?) but I sure do like it.
NSTreeController Development: Walking the Tree
The method arrangedObjects is very useful, see here: – arrangedObjects Notice that it returns a proxy root tree node containing the receiver's sorted content object. Those are some very important words and hard to explain, so instead of trying to explain, I''ll show.
NSArray *treeNodes = [[self arrangedObjects] childNodes];
So, arrangedObjects returns a proxy root tree node, so just pass that into the childNodes of NSTreeController, another useful 10.5 method, and you get all the children of the treeNode. Since I used arrangedObject, I get the top of the tree so that I can with it as I please, mostly.
Anyway here are some category classes that allow you to walk the tree using any controller selector as a callback. This example is not perfect, it is a work in progress, but useful none the less.
The code below is defined as a catagory of NSTreeController, in a garbage collected environment, so there is no memory management.
//
// NSTreeController-Extensions.h
//
// Created by Joe Michels on 3/8/08.
// Copyright 2008 Software Ops LLC. All rights reserved.
//
#import Cocoa/Cocoa.h
@interface NSTreeController (NSTreeController_Extensions)
- (void)visitAllNodesStartingWithNode: (NSArray* )treeNodes useSelector: (SEL)inSelector
withObject: (id)inObject;
@end
//
// NSTreeController-Extensions.m
// TeamPlayer
//
// Created by Joe Michels on 3/8/08.
// Copyright 2008 Software Ops LLC. All rights reserved.
//
#import "NSTreeController-Extensions.h"
#import "ProjectsController.h"
@implementation NSTreeController (NSTreeController_Extensions)
- (void)visitAllNodesStartingWithNode: (NSArray* )treeNodes
useSelector: (SEL)inSelector
withObject: (id)inObject
{
// This is a recursive decent routine. It will walk the tree visiting each node
for (id item in treeNodes)
{
NSLog( @"Visiting tree node: %@", [[item representedObject] valueForKeyPath:@"name"] );
[self performSelector:inSelector withObject:item withObject:inObject];
//check for a decendent
NSArray *childNodes = [item childNodes];
if ([childNodes count] > 0)
// we are recursing
[self visitAllNodesStartingWithNode:childNodes useSelector:inSelector withObject:inObject];
}
}
@end
Let's make a call using the above code.
- (NSArray* )itemsForScripting
{
NSLog(@"Getting projects for scripting, returned in array.");
NSArray *treeNodes = [[self arrangedObjects] childNodes];
NSMutableArray *itemsArray = [[NSMutableArray alloc] initWithCapacity: 2]; << 2??, whatever!
[self visitAllNodesStartingWithNode:treeNodes
useSelector:@selector(getOrderedListOfProjects:withArray: )
withObject:itemsArray];
return itemsArray;
}
You can pass nil for the object as in this code snipet:
NSArray *treeNodes = [[self arrangedObjects] childNodes];
[self visitAllNodesStartingWithNode:treeNodes
useSelector:@selector(findAllMatchesInNodes:withObject: )
withObject:nil];
NSTreeController Development: Inserting Objects for Scripting
First I want point out that I want constructive criticism from users who have actually purchased My Eyes Only™.
The Freetards
Where to start with this. The freetards have polluted the App Store. This is a disgrace to the wonderful App Store. Using the word disgrace is an emotional response and I said I would use logic. Well, there is just no logic to the freetards. It is a religion filled with emotion.
Report Your Problems to the Company
It theory, this should not be needed but if you run across repetitive problems that you did have in the first place, then reboot. Here is one comment that was fair but, put the blame in the wrong place. This was for an application that I’m interested in purchasing.
I was just about to post this great review about how the application is easy to use and turns you free time in great fun, when I started to have stability issues with it. At the moment the program does not run at all, clicking ok the icon does nothing but shows the splash screen (which it already annoyed me because it takes time from starting the application) the quits.
Well I had the same problem with my iPhone I was stumped. But, by happen stance I decided to re-download my apps from the store. Did you know you could do that? Well that cleared up my problem.
Reboot Your iPhone
I was testing MEO and I found a bug that I could reproduce. Those are the best! I did it 5 times while having lunch so I had it nailed. Well, I decided to reboot the iPhone, just to see what would happen. Well... I could not reproduce the problem. In fact, I spent an hour and a half trying to reproduce the issue and finally gave up. It most likely wasn’t my problem.
iPhone Development: Interface Builder -Read the Damn Release Notes!
What to do?
Since there was no iPhone example application using IB, I was on my own and started digging around. I first realized that the UINavigationController as setup by the nib loading process was missing a few initialized objects as compared to one initialized with initWithRootViewController. Hmm... OK, so I ditched the nib based UINavigationController with one I created and initWithRootViewController. "That should help", I thought. Ah... no. I better try to find more about IB and iPhone. So I reread the release notes and sure enough, right there in front of my face was the answer:
FAQ: How do I edit a Cocoa Touch view controller? ▪ Drag a view controller object from the library into the document window. ▪ In the document window, double-click the icon for the view controller object to open its editor. ▪ Drag and drop views, navigation items, and tab bar items from the Library onto the editor.
Well, OK. To be fair to me, when I first read this I was not thinking that I defined the UI by dragging and dropping views onto a view controller UI thingy. When I did, cha-ching! it worked.
