I decided that I needed a place to keep track of the tools/tips/techniques (can we call that T3?). Then I thought it would make a good blog post. Then I realized it’s been almost two years since I’ve posted anything. So here’s a post and something I intend to update as I use new tools.
This is mostly for my reference, but it might come in handy for someone else…
Xcode – The official developer environment for developing iOS and Mac Apps. There are some alternatives, but they seem like more trouble then they’re worth, and still needs to link into the core Xcode tools (like the compiler) to get things done.
Xcode also allows for plugins two of which I’ve started using recently:
Alcatraz – The one plugin to rule them all sort of thing. It has it’s own “network” which I usually try to avoid, but due to the more manual nature of most plugin installations, this seems worth it to keep it all cleaner.
VVDocumenter-Xcode – This is one of those things that does something so simple, yet can save you so much time. It will auto-generate the documentation skeleton for a method in a format the Xcode can read, so it’s one less excuse to not document your code. And we all can use one less excuse to not doc our code.
Sketch 3 – I use this for all my graphics needs. I used to use Adobe and Illustrator, and when I say “used” I mean “beat my head against”, for years. The pros that use these tools can make them sing and dance, but I’m not one of those people. In an afternoon with Sketch I was able to do more things quicker than the entire time I spent with the Adobe stuff. It works for me. From general UI/UX Prototyping to just playing with some graphics, it just feels right and I’ve only scratched the surface. There’s a growing community and it’s extensible with tons of plugins (or write your own). If you don’t absolutely need Adobe tools, I can’t recommend Sketch enough for your graphics needs.
PaintCode – This genius of a program lets you draw your graphics, and it will then generate the source code for you. Why would one need this? Well for doing complex dynamic UI elements for one, imagine having a variable gradient arc that sweeps from one side to another and changes colors, could you do that with static images? Or even just for icons that you use in the app, by doing it in code you can make it so you can change the size or the color (or even the shape) at run time depending on the needs of the user. It’s a little spendy, but it has paid for itself several times over in saving the time it would take of lots of trial and error code/compile cycles to get shapes right. If you do any kind of custom drawing in your apps, get this.
TextWrangler – A very good general purpose text editor. It’s code aware for all sorts of different languages, has great reg-ex support, and best of all: it’s free!
SQLite Professional – This is an SQLite database file editor, a must if you’re doing anything but the smallest Core Data operations. Great for checking that your data actually is what you think it is.
JIRA – An Issue and Task tracker that I have been using for years. More than once I’ve show a client how wonderful this is and have helped them bring it on site. I run a personal version for myself (only $10 for up to 10 users) or they have cloud options if you don’t feel like maintaining the server/database yourself. Free trials, give it a go. It can be overwhelming at first, but it’s incredibly customizable and can certainly be tailored to your needs and flow.
Evernote – I put this here because I’m trying it, again. Some people love it, some people don’t. I’m in between, but by all accounts, I’m not using it right. Some could argue that you should be able to use a tool how you want, that’s how you know if it’s truly useful. I can’t agree with that, you wouldn’t use a saw to drive a nail, does that make it not useful? So giving it another go…
House Projects
So a couple of house projects have been completed this year, and as usual, I meant to post when they were done, but better late than never, right?
Earlier this year a simple started out simple enough, but then progressed in classic “scope creep” fashion:
- Fill in the scrapes and dings and repaint the hallway.
- Well, since we’re repainting anyway, let’s found out what it might take to have the unused swamp cooler.
- Well, since half the ceiling has to come out, what would it take to take the rest out and put in recessed lighting?
So…we ended up with a new hallway, with no swamp cooler and recessed lighting 🙂 A bit different than the original version, but well worth it. We paid someone to demo the swamp cooler, and I mean demo, as it was so rusted out it came out in pieces. They fashioned and installed a cap for the hole left by the cooler. Angy and I tore down the rest of the ceiling, installed the cans, and put the new sheetrock back up. We tried our hand at doing the mud ourselves, but that turned out less then optimal. After a fantastic referral we had someone else come in to clean up our mess there and they were able to match the existing ceiling texture perfectly! There’s no way we could have ever made it this good:
As for the second project, it’s a work in progress since it’s pretty much the whole of the back yard. Angy has made fast friends of our landscape architect neighbor and she has given us some great ideas for a backyard redo. These include cutting/extending the beds so that they’re wider and have more curves. Restyling the pergola (and rebuilding, as it’s about ready to fall over due to shoddy construction the first time around), several ideas for doing a deck over the backyard patio, and the focus feature: a flagstone patio with a fire pit.
After a lot of research, a lot of work, and a fantastic KSL classifieds find for the fire bowl, we’ve got our focus feature! Like with the hallway, we got to a point with the patio where we were out of our league and it wasn’t fun to do the work ourselves anymore. So we decided to pay someone to finish it up and once again, we’re very glad that we did as it was completed far better than we could have ever hoped:
So, that’s house projects so far, there are more in the pipeline and the yard will be continuous for years to come I imagine. The biggest thing I’ve learned so far: when it stops being fun it’s ok to bring a pro in to get it done right!
WTF: iOS UIToolbar/UINavigationBar default tintColor is dependent on height?
I’ve been playing around with developing a custom iOS component and have stumbled upon something very strange. What lead me here was the idea that my component should have the same look and feel as the standard components provided by the iOS APIs.
So here I was coding along and testing things out and I wanted to add a UIToolbar:
UIToolbar *toolBar = [[UIToolbar alloc] initWithFrame:CGRectMake(0.0, 0.0, frame.size.width, 30.0)];
Very straight forward. But when I fired this up in the simulator the bar was tinted blue, not like the light gray that is showing for the other bars (UINavigationBars, specifically) that I’m using already and that I want to mimic. Ok, let me try with a UINavigationBar, since I’m using those already:
UINavigationBar *navBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0.0, 0.0, frame.size.width, 32.0)];
Blue again…WTF? Now at this point a reasonable person would say something to the effect of “Screw this, I’ll just set the tintColor myself!”, and that’s what I did. But I was unable to get the color set to the right values to duplicate the default colors provided. I was close, but there’s no reason I shouldn’t be able to outright copy it. Now I’ve got to know what’s going on.
After spending a fair amount of time trying to figure out what the default tintColor values are (in a default state tintColor = nil, so I couldn’t just look at an existing component) and failing I started seeing what was different between the default UINavigationBar that I was already using and the one I was creating. Well the obvious difference was the height, default is 44, I was setting it to 30. So I set it to 44:
UINavigationBar *navBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0.0, 0.0, frame.size.width, 44.0)];
DING! It’s the light gray tint that I wanted, but why? Well, I don’t know, I did more poking around and could find zero mention of a correlation of the height of the components and their default tint color. So that’s why I’m writing this, so at least there’s some mention of this. Perhaps someone will pick up on this and point out something obvious that I’m missing, we’ll see.
I did more poking around and found that if the height is 32 or less, then it was blue, if greater that 32 (well, technically, greater than 32.000001) then it was light gray. The only reason I could think of this being a Good Idea™ is that 32 is the default height for the bars on the iPhone. But then this tintColor change should be tied to what device it’s actually running on, not some arbitrary height value.
I have every intent of searching RADAR and filing a report, but as it is I can’t seem to login, so I filed a bug report for the bug reporting system, of course. I’ll update this post if I found out more info.
Decision Making Disorder
Those that know me know I have an issue with making decisions. This usually manifests itself for the big decisions, those that will take a lot of resources (time, money, whatever…). I do a ridiculous amount of research and bother people asking for their opinions on things, often ad nauseum. The end goal is to give myself enough information about a decision to feel good about whatever the decision is.
Lately that’s gone a bit off track. I’ve made decisions I’ve regretted, nothing major at all, but the fact that I made the “wrong” decision eats at me and it’s been difficult to let go. I just gotta deal with it, remind myself that it’s really not a big deal at all, let it go…
The other decision making disorder scenario is where I just don’t care. The typical setup is “
Then what? I profess to not care, but then when pressed I still don’t give useful feedback, I’ll waffle about but won’t actually make a decision. Lame. I guess I really do care then, but it’s hit me that while I don’t care what the decision is, I do care that it’s not the “wrong” decision. Much ado about nothing, really, we’re talking about such earth-shaking matters like what to eat, or what movie to see, or something of equal importance. So what if it’s the wrong decision, live and learn, right? A bad meal or a bad movie isn’t the end of the world, and at least you’ll have an idea of what to avoid in the future…
I gotta let it go, it’s ok to be wrong. Besides, if I really don’t care, then pick one, any one. It will at least be a useful answer given to the person that asked for my feedback in the first place. It’s the least I can do for someone considerate enough to ask my opinion.
Habits, Obligations and What Has to be Done
There are those things that you just do, habits. Good or bad, they don’t take a lot of thought. Either by routine or something less conscious, there are those things that we just do. Then there are those things that we decided to take on, the obligations, that we have to get done for one reason or another. These are the things that “should” be done, we’ve decided.
But what happens when the habits start to feel like obligations, when everything feels like an obligation? What happens when, for some reason, everything feels like must be done? Well, the first thing that happens is you feel worn out and tired. And then you feel annoyed and cranky. And then you start thinking about how your brain got to this place. And then…
Dunno, I’ll let you know when I figure it out.
Project? Check.
With one project done, it’s time to move on to the next one…or the next three…or…. It seems a never ending list. But we’re working at it, slowly but surely. The weather and season are going to be dictating what gets done over the next few weeks, some of which I’m not exactly looking forward to doing, but I am looking forward to it being done.
Some times that’s my only motivation thought and it seems like I should have more. But frankly, any motivation works, so I’ll take it where I can get it.
It's a Jeep Thing
Those that know me know I love my Jeep, whichever it may be. It started with a former roomie of mine having one. A year after I moved in, I had one of my own, a ’95 Cherokee Sport. Several years later I traded that in for a ’00 model. I held on to that for 9 years, but when Jeep introduced the 4 door Wrangler, I knew it was only a matter of time and an ’09 was acquired.
I had always had plans to build up “a” Jeep. The 2nd cherokee had all sorts of grand plans for it but got nothing more than a 2″ lift (Thanks for the help on that Matt!) and slightly larger tires. Funds and discipline were in short supply so it never materialized.
When I got the Wrangler plans started anew. Lots of research (surprise!) went into making the “must have” list. Earlier this year I started stalking the online boards to see if I could score the specific parts I wanted for a bit less than retail, and I’ve had pretty good success with it.
About a month ago I was getting ready to pull the final trigger on the build. I had acquired the wheels I wanted at steep discount and my tires had nearly 50k miles on them and had to be changed. So do I buy the same size tires again, or do I do the upgrade like I planned? Well to do the larger tires I planned meant that I had to have the lift to fit them, was I ready to put down the money and time to do that?
As I was pondering this, another thought hit me: the 2012 Wranglers had some major changes, most noticeably a new engine and transmission that offered a 40% increase in horsepower, yet had better fuel economy. Plus stylistic changes that were pretty damn nice. As the 2012 model year was coming to a close I decided to poke around on line to see what was available and the prices they were going for….oops.
Some of you know that I went through this a year ago. When the 2012 was introduced I was very tempted. I found one that I mostly liked and was days into negotiations with the dealer, but ultimately decided against buying at that time for a number of reasons. But then went on my way, quite content with my ’09.
Well, my ‘net searching found a Jeep that had every option I wish I could have had on my ’09, so I decided to take a look. As it happened it was in Provo, where I’m currently working, so it was easy. Too easy in fact, as they made me an offer I couldn’t refuse, and didn’t.
Waiting a year turned out to be the best thing that could have happened. While the exterior color I ended up with was #2 on the list (the one last year was my preference), the interior color and options were everything I wanted and the money saved was SO worth it. The short version is I paid significantly less than I would have last year, and got a significantly better equipped Jeep.
As I mentioned yesterday, the weekend was spent on a project with Angy: installing the lift on the new Jeep. It was by no means easy, but I learned a lot, which was the whole reason I wanted to do it. Near the end I was beginning to regret taking on the challenge ourselves, but a few days removed I’m so glad we did, there’s a certain personal satisfaction hat comes from doing something like that.
So…pictures:
Before… (not my actual Jeep but one just like it.)
…and after.
Best Laid Plans
This weekend was spent on a project that has been years in the making. Not quite yet ready for the reveal, and it won’t appeal to most folks I imagine, but it’s something I’ve been waiting and working for. A large part of it came with a very underestimated amount of personal time and effort from both myself and Angy. The best laid plans…
Speaking of Angy, having a good partner for whatever it is your doing can not be understated. Both in life, as with this specific project, she knew what to do to help with frustration, troubleshooting, and probably most important of all, she knew when to ignore what I was saying because I was too blinded by frustration and troubleshooting to see a different solution.
So a pubic shout out to my partner Angy…there’s so very much I couldn’t do without you!
Dead Bugs
So the bug that I was worried about turned out to be fairly easy to track down and squash, thankfully. However I don’t understand why it’s happening in the first place, but I think it’s probably because I don’t understand the Bluetooth 4.0 spec as well as I thought. More studying is ahead…
Bugs
The new project I’m working on is starting to mature in it’s functionality after a few months of poking, prodding and a whole lot of learning. I’ve been using the Core Bluetooth stack of the iOS API to talk to a custom piece of hardware and so far it’s been some fun discovery.
However, today I came across an interesting bug. Putting this software out for distribution to devices other than my development iPad was a bit of a chore, but once it was done I was feeling pretty good about things. Until I decided to run it on something other than my dev iPad. It installed just fine, but as soon as it detected the custom hardware, segfault! Tomorrow is going to be an interesting day as I try to figure out why two seemingly identical iPad 3s behave so differently.
Part of me is annoyed, but another part of me is looking forward to the challenge…I’m sure that will last all of a few hours before turning into a burning frustration.