Photo A Day

I’ve been toying with an idea.

Creativity, to me, needs to be exercised. Creativity is a craft. If you don’t practice it, you go stale. This applies to any form of creativity, whether it be making shoes (a true craft) or programming. Focusing is a challenge with with everyone I know struggles. Let’s focus on being creative every day of a full year by doing something fairly simple.

Here is your challenge:

  • Take photographs (non-selfies, none of people–too easy and self-centered)
  • Take your best one and post it online. (Twitter, Instagram, or Twenty20) Use the hashtag #photo365
  • Do this every day for a full year. This step requires dedication and focus.
  • The last day must be of the exact same thing you photographed on day one (not just another example).
  • No filters or post processing.
  • You must take and post a photo every day.
  • You can optionally comment or blog about your photo.

This is my plan for 2016. I’ll be positing a photo each day of 2016. Feel free to join me.

Diversity in IT Conferences Needs to Improve

Disclaimer: These are my observations and are not be indicative of all situations.

Over the past several months I’ve been lucky to attend different conferences and user group meetings. These have been an interesting mix of “old” and “new” technologies, small shops, and huge corporations, and open as well as the legacy worlds of IT. Looking back on the events, two aspects struck me as significantly different after the fact.

1 – Diversity.

In all cases, old and new, there was generally a very good mixture of ethnic backgrounds at all the events. What was not as good was that there were distinct differences between the events in terms of gender, race, and surprisingly age diversity.

This is what I observed.

The bleeding edge, new technology events tended to have more women presenters, attendees and contributors. The new technology events also tend to be more racially integrated, but honestly, this isn’t much. The crowd is much younger overall.

The old-school, huge company events do have a decent mix of ethnic backgrounds. Female presenters and contributors are minimal and on the fringes. The racial mix is pretty non-existent. The group tends to be older age-wise overall as well.

Why?

I see two issues that cause this dichotomy. First, young people are drawn to “cool” new tech whereas older people tend to be more conservative and like the safety of the known. “…old dog, new tricks…” Second, the old-school events were, generally speaking, attended by larger corporations and few if any startups. Large companies tend to be more conservative and staid, smaller companies and startups tend to take more chances in product, process, and employment. Large companies have been around longer, so there is an aspect of historical inertia in employment and knowledge as well as people staying with the company longer (aging with the company).

The Solution?

This is a multifaceted problem. The root cause, to me, comes down to whom a company hires. All companies need to do a better job of hiring women and minorities. More importantly, all companies need to do a better job of training enough people they hire to the point that they aren’t token presenters or attendees. Companies need to do a better job of hiring people of various age groups, and more importantly, encouraging them to want to enter that work environment. The older need the young, the young need the older.

2 – Purpose

The second aspect that was different, was the overall purpose for the events. The new technology events were organized more as training and learning events across a wide variety of topics, both technical, business, as well as people-focused. The older events seem geared to marketing events that try to sell a story around a specific industry or problem set. The younger events seems to be more broad-based, the older ones laser-focused. Granted, there are always vendors and exceptions, but the difference in content tends to be drastically different.

Why?

I’m not sure. I think it comes down to historical inertia of the larger companies again and a business mentality of “If you’re learning and not selling, you’re wasting money and not being productive.”  Young companies want to be first, older companies tend to have more to lose if they are the first.

The Solution?

All companies need to do a better job of “indoctrinating” new employees to the cultures of conferences and user group meetings. Don’t just send tenured employees or sales reps to present or attend. Not all employees are in marketing or interested in marketing. A broad spectrum of topics makes the event more representative of your company and your customers. The event becomes more important, and more interesting.

Conclusion

Conferences  and conference attendees and presenters can always learn and improve by getting out of their comfort zone. If you go to a given conference, branch out and attend a conference that is totally unrelated to the one you always go to, even if its in a different industry.

Companies and user groups need to objectively look at the people that show up and ask, why aren’t others interested or showing up? Or, why do I keep seeing the same faces and presenters each year?  Once you determine what demographic is missing, make an effort to invite them in.

Diversity in conferences needs to improve. Not just racial, ethnic, and gender diversity, but also diversity in age, content and approach.

Apple Swift Optionals Syntax Rethought

NOTE: This is pretty stream of consciousness stuff. I’m just throwing out ideas.

In the Swift language an optional is a variable that can have an unknown value.  Let’s start with that. I’m not happy with the syntax of dealing with optionals, not that they exist since they have a real purpose.

First, what are the ways in which a variable can become unknown?

• Programming errors, such as forgetting to initialize an optional before trying to use it,

• Code setting it to an unknown value due to:

  • Bad code/memory access
  • External inputs
  • A real life representation of an unknown value (such as an unknown age).

This last really represents the interesting case since it moves us from binary logic to trinary:

  • Yes
  • No
  • I do’t know

Trinary logic lets code deal with the real world in more realistic ways and is similar to NULL values in SQL that can be queried. But, that’s beside the point.

Now lets look at some simple Swift code dealing with optionals:

Screen Shot 2015-08-28 at 9.23.56 AM

This is ok and people like this but I find it feels clunky having to test for unknowns everywhere with the if let idiom when the runtime should be able to do this. There is a lot of inline “boilerplate” that interrupts the logic flow just to handle the exceptional case. Handling unknown optionals inline breaks up the intent of the code.

What if we pulled handling unknown optionals into their own scope?  Let’s steal an idea from COBOL (yes!) and invent a new construct and call it wheneverUnknown.  wheneverUnknown would be invoked automatically by the runtime whenever [no pun intended] it detected an unknown value in an optional.  Think of this as try-catch routing except for unknowns and they are handled out of line from the main logic, which actually helps factor the code.

So what would the new code look like?  Here is a mockup.

Screen Shot 2015-08-28 at 9.21.39 AM

This, to me, seems more streamlined, simpler to “grok”, and is not inline.  A couple of things to note here.  The code after line 49 is only executed if the runtime encounters an unknown valued optional, so for all intents and purposes the logic ends at line 45.

The next thing to note is that we never handled the exception at line 45. This would be an example of forgetting to initialize an optional (bug) as opposed to the other two cases where we may not know the names.  How do we handle this bug? Let’s expand our wheneverUnknown  scope capabilities.  The wheneverUnknown examples in this function are scoped to the function.  Let’s do the same thing at the class level.

Screen Shot 2015-08-28 at 9.30.56 AM

Lines 33-36 is a similar wheneverUnknown that adds an any keyword which would trap any unhandled unknown and is class-scoped.  Actually, this could be moved into the function itself and would work similarly, but would be scoped to the function alone.

No, I have no plans to implement this.  The idea came up looking at a Twitter post and I got into a short interchange about this idea and really couldn’t get the idea across in tweets.  I just wanted to expand on the idea and clarify my thoughts a bit.

Enblue Apple Watch Stand Review

I have an Apple Watch. I needed something better to charge it than just the provided mag charger on a string that Apple provides. After looking around a bit I found a Kickstarter, Enblue http://enbluetec.com .

I ordered the Premium W3 http://enbluetec.com/premiumonew3/ which is a charging station for not only the Apple Watch, but the iPhone and iPad as well.  Today, I just got the box and set it up.

The box came with the stand and no real instructions.  This is what is included:

 

IMG_3075

This is the main stand with room and connectors for all three devices.  Nice brushed aluminum, and rubber-padded connectors.  The stand has a pre-wired Lightning to USB connector for the iPhone and iPad.  The Lightning connectors are on a “floating” bar that lets your device adjust nicely.  The USB ends are labelled with a red and green dot. I haven’t figured out which goes to which device.  I don’t think it’s important.

You use and provide the Apple Watch MagSafe™ charger for the Apple Watch.

The other main component that is included is a USB charger (to the right in the picture above) with 4 USB-3 sockets.  Between the two provided USB cables and the MagSafe’s cable this leaves one empty USB socket free. Nice!

The one thing that confused me “out of the box” is that there was a rattling noise from inside the stand–as if there were loose parts.  Sure enough with enough shaking I retrived 4 small screws and two tiny cross-panels.  I think these were supposed to be in the two small plastic bags (empty) that you can see in the picture.

Setup is straight forward–mostly.  It wan’t obvious how the Apple Watch cord was to be routed. It was obvious the MagSafe went into the provided plastic grommet.  This has a notch, and I guessed the cord went there.  But neither the USB nor the MagSafe connectors fit in the slot in the stand.  The arm that holds the Apple Watch looked like it had a panel but there was no obvious way to remove it.  I decided to gamble and potentially mar or damage the stand and used a screwdriver to pry the panel off.

Success! It turns out it is magnetically attached for the most part.  With the panel open, it was a simple process of snaking the USB connector of the Apple Watch charger through the stand and aligning the cord with the notch in the grommet.  Here is a picture of the open panel and cord.

 

IMG_3076

The magnetic latch is on the bottom of the arm in this picture. You can also see the extra parts in this picture.

Once I reseated the panel back into the arm, I wondered what to do with the extra screws and cross panels.  The only place that made sense was securing one of the cross panels on the bottom.

IMG_3077

I tried once but lost a screw inside the stand (which I had to shake out again).  It wasn’t worth the effort and I didn’t see the panel really securing anything anyway. So I just left that bit off. It would have made more sense to have the cross panel across the wire channel.

Now all that was left was plugging all of the USB connectors into the power supply.  Here is the finished product.

 

IMG_3081

This is a really nice charging solution.  It is a bit pricey but it is solid aluminum.  The only way to improve this would be to have an option that worked as a MacBook docking station.  Or to include a simple instruction sheet.

 

 

 

Response to “A Call for Change In HP NonStop”

This is in response to: “A Call for Change in HP NonStop” – Randall Becker 

Agreed.

The following are my own opinions, and not a blanket statement. Also note, I am not affiliated with Hewlett Packard Company.

I worked at Tandem/Compaq/HP for about 30 years. The acquisition by Compaq and management switching to DEC was probably the start of the slide. Tandem was open. Compaq/DEC was more the IBM model in terms of management. There was a distinct shift in morale after the Compaq acquisition. Not because Tandem was acquired, but because employees were unable to do and work the way they had. I’m not saying HP should go back to the Tandem model.

The pool of intelligent, industrious, and creative people involved in HP NonStop is great (although shrinking due to age, downsizing, and morale). A lot of times their ability to perform at their best is limited by various issues. I won’t go into details, since I don’t want this to be a rant.

Employees (of all sorts, not just devs), need the ability to contribute. In most cases this amounts to doing what you have been asked to do at HP. The ability perform and contribute beyond what is asked of you is limited and at times discouraged (actively or passively). The justification amounts to one of a handful of arguments. The main ones are:

  • “We don’t do it that way/we have always done it that way.” [But no one can or will say why.]
  • “There is no demand, and we can’t work without funding/budgets.” [This even applies to volunteering.]
  • “Upper management decided we should…” [But when you ask who specifically, names can’t/won’t be named.]

The problem comes down to inertia and the inability or unwillingness to break from it. Jobs are at stake after all–mostly the lower management that fears the next “downsizing”.

Here are some suggestions: [yes I’ve told this to various managers at Compaq/HP through the years]

  • Allow, encourage, review, and reward suggestions for improvements in process and product. Review should not be done by the single manager you report to.
  • Allow for volunteer projects on employees’ free/down-time. Yes this does exist, and there are people who would love this. Only review when complete, don’t try to manage these or treat them as official.
  • Improve/upgrade tools, or allow employess to use their own as long as they are compatible and secure. Some of the in-house tools are archaic, but they are “approved”. There is nothing as frustrating to a developer who can’t use their favorite [therefore, most productive] code editor.
  • Decisions which have no impact on the end result, but affect the employee should be left to the employee, not become a management decision.
  • Improve morale.
  • Remote teams need to meet physically at the same location at least once a year.
  • Allow employees to take outside training (not just HP cross-chargeable training) and go to conferences. Pay for it.

Going back to the early days of Tandem and all the way through HP NonStop, the company has always been 3-5 years behind the development technology curve. Some at HP disagree with this statement.

Tech companies should lead, and not always wait for adoption rates to drive demand. Java and web are still considered as “new tech” in sections of HP NonStop.  When you’re behind the curve, it is difficult to motivate developers in COBOL, TAL, and Java when everyone they know working elsewhere is doing  Ruby, Scala and Clojure.

This is a chicken and egg problem at HP NonStop.  No demand, no funding, no change or advancement of the developers and products.  The customers don’t see new tech and so are happy with what they get from HP and don’t demand. No demand, no funding, no pushing the boundaries.  This also applies to in-house training and conferences. No demand, no funding, you can’t take outside classes or go to conferences unless you pay for them out-of-pocket.

Management needs to set the vision, and direction. Employees need to have the freedom and ability to implement them and in some situations maybe improve or steer.  Management is the navigator. The employees are the drivers.  Each needs the other.

 

My Thoughts On The Apple Watch

It’s been a couple of weeks since I got the “developer lottery watch”.  Here are my thoughts in no real order.

1 – Blue is not my color

I had ordered a black band on the Sports Space Gray, but when Apple announced their developer lottery, I cancelled my original order. I’m quite please by the brushed aluminum. It’s not as high-tech looking as the space gray, but it’s not as tacky looking as I had originally feared.

The problem is the sports band. The band itself is wonderfully comfortable. It’s the blue. The lottery didn’t give us a choice of band color. Blue for all! The color itself is nice, but it’s not for me. For some reason, it makes me think of a hospital wrist band, just more comfortable and thicker. I want the black band, or even the white one.

2 – Reverse band mechanics

I had a minor problem with how the sports band attaches. It seems backwards to all the other bands I’ve had. Normally the loop of a watch/fit band is used to help keep the watch in place as you fasten it. With the Sports Band, you have to use an extra finger to hold the band and watch in place and then attach it and finally pass the tongue of the band through the loop. Once I figured out how to do this efficiently I was ok, but it’s not initially intuitive.

3 – Taptics Are Great

I’ve read a few reviews where people were complaining about the constant and annoying taptics. Obviously, they just put the watch on and let it default everything. The first thing I did was go into the iPhone app and customize all my notifications, glances, and taptics. I didn’t spend time overthinking things but just turned on the items I thought would be useful. Now I get an occasional tap, and when I get one I know it’s important.

Taps are definitely more personal and not as intrusive as the phone ringing or vibrating. They are easy to ignore. On the other hand, to me, when I get a taptic tap, it has the same emotional response as someone tapping me on the shoulder.  It’s immediate. It’s personal. It’s not a remote sound. There is no sound. It’s just a gentle tap. Someone wants my attention. It’s great!

4 – Less time with the iPhone

Glances are underrated. Yes if you load up your watch with all the possible apps that support glances, you’ll be overwhelmed. I only have glances I know i want to look at often. My approach was: What do i spend most of my time with on the iPhone?  Those are the glances I loaded. This simple approach has kept my phone in my pocket more. I’m not pulling it out to check on something. Now I look at my watch and I’m done. I only wish the watch had a way to extend the time the screen stays on by a second or two. I’m sure the timer is a way of preserving battery life.

5 – The watch makes you more focused

An unexpected benefit of having the Apple Watch is that I seem to be more focused. The screen real estate isn’t swamped with widgets and “designer UI”. The screen has barely enough information to be useful. This is a good thing. You’re forced to focus on one or two pieces of information at a time. On the iphone, you’re easily distracted by non-essential information, other apps, the dock/home bar, etc.

Seeing one thing lets you focus on it and deal with it without distraction. This is great!

6 – I  don’t use the crown much

The scrolling crown is cool, but I don’t use it much to scroll. Finger scrolling works fine for me, despite having normal sized fingers. Yes my finger may obscure the screen a bit, but I’m more interested in what I see after I scroll than while scrolling. So I don’t use the scrolling feature of the crown very often. I mostly use the crown press.

7 – Force touch needs to be everywhere

I like force touch and the taptic feedback. The problem initially (and with new apps), is that there is no way to know whether an app supports force touch. This led me trying to over-force a force touch on apps that didn’t have it. Force touch needs to provide taptic feedback on every screen, not just those that support it. If you force touch an app that has no force touch functions, you would get a tap, as an acknowledgement but nothing would change.

8 – Response seems sluggish at times with 3rd party apps

This is Apple Watch OS (?) 1.0. It’s bound to have issues. It’s surprising it is as stable as it is. Occasionally though, I have run into a situation (3rd party apps) where hitting the “Dismiss” on a notification clears the screen, but the notification isn’t cleared. Tapping again a couple of times resolves the issue. My gut feel this is a problem with the 3rd party app code or how they are using Bluetooth. Apple built-in apps seem fine.

9 – Health

I’m surprised by how much I like the health aspects of the watch. The reminder to stand up may be annoying to some, but it’s great for me when I’m in my “zone”. The built-in exercise app has enough exercise options to keep anyone from a slug to a cheetah happy. It’s also gamified with badges and such to make it fun. There needs to be more of this. I’m finding I do exercise more than usual.

Two issues I’m hoping Apple will address in upcoming updates. The watch doesn’t track sleep, or water consumption. The first is a battery recharge issue, the second is easy.

10 – Battery and screen are fine

There was initial concern about the battery life and screen scratches. I’m finding with moderate to some heavy use throughout the day I get about 18 hours and even then the battery isn’t drained. I haven’t had issues with the screen despite an occasional bump against something. Most of the issues I’ve seen online are chips not scratches.  The screen is scratch-resistant, it’s not puncture or chip resistant.

11 – Needs more cowbell—err, watch faces

Not all of the included watch faces are as fully customizable as others. There aren’t as many diverse ones as I’d hoped. You basically get the ones that Apple demoed. I have a feeling this is just the beginning.

12 – Siri rocks

I rarely used Siri on the iPhone or iPad. Siri on the watch is its sweet spot. It’s easier than tapping and is a good interface for scheduling and other things. Siri on the watch is silent, however. I’m hoping the future will provide an option to get her voice back.

13 – Um…camera viewfinder app?

This one has me scratching my head. Why would I want to use my watch as the viewfinder for the camera on the iPhone?  Your iPhone is in your pocket.  This opens up security/privacy issues as well.

14 – Calendar app annoyances

The built-in calendar app has a few minor annoyances. There apparently is no way to switch months, it’s fixed on the current month. Also, there is no way to include all-day events in the calendar’s glance. The only items that show up are events with discrete scheduled times.

15 – No watches, no bands

It’s been a while now since the Apple Watch was available for pre-order. It is still only available for pre-order. You cannot go into an Apple store and purchase either a watch or a band. I can understand the watches may be built to order, or pulled. But the Sport bands, at least are probably cheap to manufacture. They should be available by now.

So, after a couple of weeks, I’m pleased with the Apple Watch. Is it perfect? Far from it, but then again, neither was the first iPhone or iPad. It is, however, a high-quality item worthy of Apple, and one I’m glad I got.

Why HP NonStop Servers Should Embrace Reactive

THIS IS MY OPINION ONLY

If you’ve worked with reactive, you probably have never heard of HP NonStop servers, and conversely if you’re working on HP NonStop servers, you’ve probably never heard or “reactive”.

First, for anyone not familiar with HP NonStop servers, a little explanation.  HP NonStop servers were originally known as systems built by Tandem Computers back in the 70s.  You probably have never heard of either.  HP NonStop servers are a mainframe-grade server that has typically had a very niche market.  The servers are a fully fault-tolerant (not failover, not hot-standby) “never-go-down” systems.   They are used by many stock markets, ATM networks, 911 call centers, and pretty much any business critical environment where losing data causes loss of money or life.

The point of this post deals with another aspect of HP NonStop servers.  They are reactive and have been so since the 70s.  The weird part is that HP NonStop servers don’t realize or acknowledge it.  So what do I mean by “reactive”?

Reactive is the new hotness in IT. Back in 2014 a group individuals introduced the “Reactive Manifesto” http://www.reactivemanifesto.org to the world. In a nutshell, the Reactive Manifesto lays out a way to design, architect, and build software. Many large companies are adopting this approach. Programming languages and frameworks are arising and or are being modified to adapt to this way of doing things, Java, Scala, Akka, etc are just a few.

So what does it mean to be reactive?  Per the manifesto, a reactive system is: responsive, resilient, elastic, message-driven.  That last point should make your ears perk up if you are familiar with HP NonStop servers.  HP NonStop servers have been message-driven at the application and OS levels since day one.  What about the other points?

Responsive

“Responsive systems focus on providing rapid and consistent response …”  One of the primary goals of HP NonStop servers is to meet business-critical response time SLAs, in a mixed workload environment. If you’re not familiar with this term, it is the HP NonStop server’s ability to run OLTP, batch, DSS, and Data Warehousing on the same machine, in production, at the same time.  In fact, there is no technical reason to have a batch window on the machine. HP NonStop servers are responsive.

Resilient

“The system stays responsive in the face of failure.”  HP NonStop systems are truly fault-tolerant (more than fault-resilient).

Elastic

Systems can react to changes in the input rate by increasing or decreasing the resources allocated to service these inputs”   HP NonStop servers have the ability to adjust to loads by spawning and killing off processes in order to handle the load for a given business task.  This is the HP NonStop server’s TS/MP (Transaction Services/Massively Parallel) environment.

Message-driven

Employing explicit message-passing enables load management, elasticity, and flow control by shaping and monitoring the message queues in the system and applying back-pressure when necessary.”   As I mentioned, HP NonStop servers are fully message-driven, including the OS itself.  What this implies is that the system is a shared-nothing environment.  There is no real shared memory or global space.

So where am I going with this. Simply put, HP NonStop servers are fully reactive and have been so since the 1970s.  However,  the platform has not embraced this approach in its tools or marketing.

HP NonStop can learn a lot from the reactive movement that is actively espousing it. In some ways it is also competing with HP NonStop.

Conversely, the reactive movement can learn a lot from how HP NonStop deals with reactive in a mainframe (as opposed to mini-server clusters).

HP NonStop programmers can and should learn a lot about how actors work and how to better implement asynchronous environments.

HP NonStop servers and the reactive model are made for each other.

On a personal note, “I have been doing reactive since the 1970s.”