New Developer’s Journey

At the starting line of the race ...

On your marks, get set …

So, I have been thinking that it is time to start sharing what I have learned, and I feel that I have some valuable experience for those that are starting their journey in independently developing software – being a new developer. I want to share what I learned over the years of my own travels down this path, but be clear that I consider myself still learning about this!

 

There is always something new to learn, and after years at this thing called project management and “freelancing”, I am constantly finding new ways to manage my independent work, and my life for that matter!

 

I will be sharing more about what I’ve learned, a little on how and where I’ve learned it, and what I might have done differently if I was to start over. Since I started out broke (as in rolling pennies for gas money broke), I learned really quickly how to find the free or no cost options for the services out there; I’m still kind of broke, but now it’s only “rolling quarters” broke ;-). So, I will be promoting the services that I have used and that I think will help you. Keep in mind that where possible I will be sharing the free option details or free alternatives for the services I use or find value in, but there are a few cases where you can’t get around having to pay (like an Apple or Google developer account) so I will be sharing the why in those cases. If I do share a link to a paid service, it will most likely be an affiliate link so if you do sign-up for the service, please use my link because I’m still broke! ;-P

 

I hope you join me in a cathartic examination of my journey, what I’ve learned, and what I might have done differently. I want you to be an active participant in this journey, share with me what your thoughts are along the way and I will give feedback on what you share!

 

Let’s get started, shall we?

How to Fix Bluetooth Network Unavailable on OS X 10.10.4

UPDATE:

In the comments a new workaround has been identified since my solutions don’t seem to be working anymore. Try making sure the hotspot is turned on on your phone! It’s a weird one, but it works!

The best way explanation I can come up with is because of the way hand off works in the Apple world, turning on the hotspot on an iPhone (Bluetooth being key for handoff to work properly) it triggers an update call to the Bluetooth stack. If anyone has any insight on my theory I’d welcome it in the comments!

Thanks for all who’ve commented with more info!
I love MacID, before I started using it I didn’t have a lock screen enabled nor a password. Bad, bad, bad; I know. Especially since this machine is my dev machine, and I obviously have the source code and design documents on it for all my projects. After a change in my circumstances that left my MBP in a situation that someone else could have accessed the computer (fortunately that didn’t happen) I enabled the lock-screen and started using a strong password; a bit of a pain in the ass. That’s when I found MacID, and soon forgot I had the lock screen enabled because I didn’t really even notice it.

After updating my MacBook Pro to the latest and greatest OS X 10.10.4, I had lost the ability to pair my iPhone 6+ using bluetooth. This, unfortunately, disabled MacID and left back at having to enter my password each and e-v-e-r-y time I opened my MBP!

 

Well, after a lot of digging and trying different solutions, I finally fixed the issue!

 

The Problem:

NetworkUnavailScreenCap

When attempting to reconnect by bluetooth from MBP to iPhone 6+ (both updated OS) I was greeted by the notification above. Poopie.

Handoff still worked, along with Airdrop. No MacID though.

The Solution:

Following several suggestions from around the web, even asking the MacID developer for help, yielded no success.

Now, I want to take a moment and point out that even though the gentleman behind MacID had no obligation to help me out, he still tried! And, he was speedy about the offered help as well!

So along I went, without the use of my MacID, depressed and forlorn. Until today!

This is what worked for me and my setup, this may not work for anyone else but is here for reference and a hope that someone else will be helped by this info. If it helped you out, then leave a comment/let me know here.

  1. Turn off bluetooth on the Mac
  2. Delete the iPhone pairing (I’m not sure if any other pairings will need deleting as the iPhone is the only pairing I have on my MBP)
  3. Delete the bluetooth plist file:
    1. Open the Finder app
    2. Navigate to the preferences directory by pressing CMD + SHIFT + G and typing /Library/Preferences/
    3. Trash the file com.apple.Bluetooth.plist
  4. Shutdown your Mac
  5. Power on your Mac and immediately hold down CMD + OPTION + P + R until you hear the startup sound three (3) times
  6. Open the bluetooth preferences and repair the iPhone

All is fine now, I had to set up MacID again as I had removed my iPhone there as part of a failed troubleshooting attempt.

 

Now all is right in the world!

 

If this worked for you, or lead you in the right direction, I would like to hear about it! If you find an error or missing step, do let me know and I will update this post.

Getting Android Studio Working On Mac OS X Yosemite

So, changing from a Windows development platform to a Mac OS X platform has been surprisingly smooth. While it has only been a few days, the only glitch I have encountered is when I started up Android Studio 1.0.1 for the first time.

Java Not Found Error from Android Studio

The “Java not found” error from Android Studio

 

tl;dr

Go and install this to fix it. Read on to find out why it happened.

 

Fixing Android Studio

Unfortunately, I got the dreaded “Java not found” error, which puzzled me because, of course I had already downloaded and installed JDKs 7 & 8, and verified that when I run the command “java -version” I saw the report that Java 7 was in use. A real head scratcher. So a few minutes of digging around brought me to this question on StackOverflow. Following the first link (the “Update”) brought me to the Android Tools Project site, which has a nice discussion about the BETA and Canary releases and issues with those versions along with the JDKs. The key areas I found to be the silver bullet for my issue was the commands:

The key command needed to temp fix the issue

A code snippet from the Android Tools Project Site

 

Once this command completed, I was in business and on my way! Unfortunately, this method only works when opening AS from a terminal window. I like things to work the way they are designed to work, so further research found more entries on StackOverflow and elsewhere about this issue but none really seemed to solve the real issue. After reading through a few more SO questions, articles, and support documents (along the way uninstalling Java and then reinstalling Java) I ended up back on the Android Tools Project site. Specifically the section titled “IDE JDK”, in this section is the fact that Android Studio defaults to running the IDE with JRE 6 because of font rendering. This page says that Android Studio will prompt you to install Java if it doesn’t find it, obviously not! A little trip over to the Apple support site to install Java 6 will fix things right up!

I hope this helps others the way it helped me, but is found faster than I found it!

What I did with Twilio

A few months back, a client asked me to look at and improve the SMS messaging ability of their Java program. After seeing that they were using an email to SMS gateway (and associated throttling requirements) I researched the options, and came to the inevitable conclusion that the answer to making the SMS messaging capabilities better and more robust in my client’s application was by adding Twilio.

After a very short “introduction” period, I had a prototype up and running, my client was so impressed that the original specification was expanded (I didn’t mind because the Twilio APIs are really easy to work with). A short time later, the final draft moved to production and there have been no regrets; in fact I look for ways that I can use the Twilio offerings in other projects because it was so easy.

Now mind you, the application using the Twilio service is used to run a form of silent auction, requiring as close to real time notifications to end users as possible. The application sends an SMS notification to a registered bidder (after an opt-in of course) when they have been outbid; then if the bidder wishes, they can respond to the outbid message indicating that they want to raise their bid. That simple! All thanks to the power of Twilio. Future planned improvements include the ability of the application to automatically call winning bidders after the auction is over to let them know what they have won! Of course, Twilio offers voice functionality as well, and it’s just as easy to implement!

I am very happy that I had the opportunity to use the Twilio service, and it seems that my client is happy with them as well! In case you are wondering, my client is Crowning Touch Senior Moving Services, and they are really great people. If you are in the Roanoke, Va area stop by and say hi to Dan and Linda; they are great people, and tell them I said hi.

Fixing a power problem

After being uber excited to get a brand new Nexus 7 for Christmas, I quickly realized that there was a problem with my new gadget! I found that no matter what I did the battery showed 0%, even after spending several hours on the factory charger. After a couple hours on el Goog finding some similar issues it was starting to look like my new friend was doomed to experience the exchange Charlie Fox of a process.

Finally I found the iFixIt writeup for replacing the battery and I decided I would try re-plugging the battery. Once I opened the back cover I found the problem right away, the battery plug was not inserted into the socket all the way! A quick and gentle push on the plug, then snapped the back cover on and upon a restart the issue was gone!

So, if your N7 is telling you that the battery is dead no matter how much you charge or clear the battery ini, try (at your own risk) checking the battery plug.

Let it be said that I am in no way a tech repair guy or an electronics guru, just a few years of experience working with my hands.

Something Useful

I just discovered a simple and useful little trick to make navigating around a “Design” tab in Microsoft SQL Server Management Studio a bit easier. The problem for me is that I have had some trouble finding a good mouse that has two scroll wheels, one for horizontal scrolling and one for vertical scrolling, so I end up having to use the scroll bar across the bottom of a particular window area if I want to see what is to the right or left of the viewing area.

Well, in MS SQL Management Studio, holding the “control” key while using the scroll wheel scrolls the view left or right! So far I have found this only works is MS SQL Management Studio, and sadly not in Eclipse, so the search for a better mouse continues; but this is a good way to navigate around in the mean time.

Included Bugs

I spent the better part of a day and a half beating the keyboard with my head over a very frustrating problem: “WTF! Where’s that cookie I set?!” in a PHP project that I was working on.

See, the problem came from abstracting all the cookie related functions to a separate PHP file. Easier to maintain, right? Only if one remembers to place a “require_once” call before making the function call! Together with disabling error out put on the server, and not setting up proper debugging, lead to a lot of wasted time.

Once I realized what happened, I had to physically smack myself on the forehead!

The lesson here is make sure you double check all you includes and requires, that and don’t code sleepy!

Having an “wow” moment

I was watching “Gremlins 2: The New Batch” with my kids today, and it is really neat to see my kids enjoy a movie that I enjoyed years ago. Without the CGI and special effects that we have come to enjoy and are accustomed to in modern movies, its refreshing to see some creativity of old find a new home in the imagination of today’s youth.

Another thing I realized is that there are things that we miss when watching movies, tomorrow stars in their beginnings. Maybe I am dense or have been under a rock, but I didn’t know that Howe Mandel was the voice of Gizmo!

Cleaning a Web Service. . .

So, after spending a fair amount of time building and debugging/testing a web service that I have built for a client I have come to the realization that not only is NuSOAP poorly supported, it is a great concept that has failed at a complete execution. I think the real problem is that one cannot Google anything having to do with SOAP without tripping over NuSOAP results. There are plenty of blog posts, tutorials, and guides that cover many aspects of the framework’s use. Additionally, there are plenty of questions asked on stackoverflow and the “.NET” forums regarding the use of NuSOAP.

It is kind of saddening really, the framework has great potential, a large following, and probably be considered a “Swiss Army Knife” of a SOAP framework. The problem is that it has not been in active development for quite sometime (2010 was the last reference I found) and the guides and tutorials lack in some areas (complex return types, wsdl customization). The tutorials out there are great, written by some great programmers that have obviously given some sizable time into creating the tuts, but they all lack completeness. Using the tuts out there I was able to build up a rather complex web service in a short amount of time and get it working great, until I needed to provide a web method that returned a complex data set. On top of the issues with complex data types (that SNAFU will be saved for a later post), the service was built for the sole purpose of being consumed by a client add on to an existing Windows application that was written in VB.NET.

The great turn for the worst happened  when I finally had gotten the web service returning the needed complex types properly (P.S. – I want my 10 days back that I spent chasing the cryptic configurations) that I found out that NuSOAP does not return conformant SOAP XML messages. The conformance is for the 1.0 standard, not the current standard that .NET requires to properly deseriralize a SOAP complex type response. See the response by John Saunders here for the skinny.

The short of it all is that NuSOAP is not compatible with a .NET client. Sad really, and I hope that I get the chance to use NuSOAP in the future because it was kind of fun to build a service with this framework, even with all the short comings.

I hope that a future me comes across this post about the point in a project when they are getting ready to put the rubber down, maybe I will save them some time in building something that won’t work in the end.

The joys of XML . . . blech!

I normally love working with XML. XML is simple, clean, extremely flexible, and is generally fun to me, but trying to coordinate the SOAP messages between a PHP NuSOAP server and a client in a VB.NET desktop application has been one headache after another!

From poor documentation for NuSOAP, to trouble with complex return types, to reading the complex types in VB.NET this has been bordering on a nightmare! This is the last time I simply say “a two dimensional array is the simplest way to transport complex data!”

Once I get the current project to a good milestone I plan on writing in depth on my experiences with the whole process, the components, and the lessons learned. Additionally, I think I will try and put a section together that hopefully will help others figure out NuSOAP a little better, because I do think that the framework is really helpful. While there is a built in SOAP server in PHP 5, having the ability and get in there and monkey around with the SOAP server’s guts did come in handy!

Now don’t get me wrong, I still look forward to the next project that involves XML, just hope it isn’t tomorrow!