Slack-pocalypse Now

Slack is reducing my productivity and is almost certainly having a material negative effect on my day to day performance as well as my job enjoyment. Things started so well with Slack and I and I still love the vision of reducing email but something’s change, something’s been twisted….

In the beginning the initial goal of Slack was to make team communications easier and cut down on useless (or at the lest nonproductive) emails. I am happy to say that for the most part that’s happened for us internally at Buccaneer; in fact, we have almost zero internal email threads in a given week that aren’t forwarding something from a customer-facing person to someone else and even then most of that is handled in Slack as well. That’s great!

Then Slack added guest accounts, single channel accounts, and the ability to have multiple accounts on one Slack client and what was a great internal communication tool became the customer service portal from Hell. I can see how the folks over at Slack thought they might reduce the strain of customer communications just as they had internal communications. Possibly they thought Slack chats might replace daily stand ups, weekly status meetings, or “checkin emails”. Sadly, they were mistaken. Due to the expectation of virtually immediate response on Slack, it actually makes these problems worse.

In terms of daily standup (which I will go to my grave claiming is pointless in a group greater than six) Slack is treated as “in addition to” rather than a “replacement for”. Same problem for weekly status meetings.

Though it’s the daily (or worse “build”) checkin email that Slack has truly perverted , twisting it into a nightmare that leaves me muttering “the horror the horror” at the end of every sprint. The beauty of the checkup email and email in general is that it’s socially acceptable to not reply immediately. Indeed, one of the best ways to respond to those sort of things for me was to wait until I had something positive to say or respond by EOB whichever came first. Just a few hours can make what might be a bad or awkward conversation into a good one and email allowed me to manage my time in a way that I could find those hours with no more (and sometimes not even) a “I’ll follow up with you by EOB”. Thanks to Slack, the conversation goes a little more like:

Get enough of these and you’ll be dreaming of the halcyon days of once weekly conference calls and formal EOB update emails.

Don’t get me wrong. I am not against open lines of communication but sometimes things take time and you want to craft a more sophisticated response than you can get when being barraged by messages. Of course from the sender’s perspective Slack is a form of instant messaging with an emphasis on the instant as in NOW part. Unfortunately, responding to even the most cursory of messages requires a context switch and any experienced developer will tell you that’s a productively killer.

What Slack needs is a more aggressive version of their current Do Not Disturb feature. One that not only warns the sender that you are not available but that actively says you are busy. This is something that HipChat, an Atlasssian competitor to Slack, has had since before Slack was even around. On HipChat if you mark yourself as busy, it puts up a red logo that looks like a traffic sign and actively warns any senders that they are probably interrupting you by messaging you. The difference may seem subtle if you aren’t like me and used HipChat for a long time before Slack, but in terms of communicating your status to your team and any customers in the system, HipChat is clear — away really means away, available really means available, and busy means leave me alone I am working.

What do you think? Is it just me? Find me on Twitter and let me know. Also, do fill out the contact form on this page, I am a 50% promotion for getting new hybrid app development projects started. If you’ve been thinking of getting an app for your business or even just have an idea you want to validate, there’s never been a better time to reach out!

Programming Pitfalls: Cors & Spring Boot

It’s no secret that I have been dipping my toes back into the world of enterprise Java development over the last moth or so. Thankfully, I haven’t been forced to go full Java EE. In fact for enterprise development I’m getting off pretty easy in the form of Spring Boot.

Spring Boot is an offshoot of the popular Spring framework and brings many conveniences from modern non-Java web development frameworks to Spring developers. It’s related to the Spring MVC framework but is more geared toward use in a mircoservices architecture. I’ll be working in it for a few more weeks and will get some more thoughts together at a later date but for now let’s go over the pain that is CORs. For those that don’t know, CORs is a browser feature that protects against cross-site scripting in JavaScript and the web would be a much more dangerous place without it. As always, security comes at a price and in this case that price is that web services that interact with an API on another domain or IP need to allow cross site access in their response headers or just about every modern browser won’t let the response through.

Ideally, you’d want to change your ‘Access-Allow-Origin header’ to the domains that your client applications will be hitting your API from but if you’re API is public or you don’t yet know what the final domain of your client app.

In Spring Boot this can be done with a simple Filter like so:

@Component 
public class SimpleCORSFilter implements ContainerResponseFilter {
    @Override 
    public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) throws IOException {
        MultivaluedMap<String, Object> headers = responseContext.getHeaders();
        headers.add("Access-Control-Allow-Origin", "*");
        headers.add("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT");
        headers.add("Access-Control-Allow-Headers", "*");
    }
}

Notice the @Component above your subclass of ContainerResponseFilter, that’s what tells the the framework about this calls. What this calss does is add the values to the “Access-Control-Allow-Origin, “Access-Control-Allow-Methods”, and the “Access-Control-Allow-Headers”. In the example above, we are going with the most open settings possible. You likely will want more secure / conservative settings unless your service is intentded to public. This is an important point and it took me hours to figure it out –It is important that this file be in the same package as your “Application” class (the class that has the SpringApplication.run) in it.

I hope this helps somebody! If you found this post interesting reach out to me on Twitter.

Apps, Bots & Cloud Oh My!

Apps are the newest thing! Apps are dead, long live the cloud! The cloud is old hat, it’s all about bots and machine learning now! If you follow the tech press like I do, you might be led to think that we have come through some sort of supersonic period of technological creative destruction. It’s certainly true that we’ve seen a good deal of innovation, since the release of the iOS App Store in 2008, but it isn’t entirely accurate to draw a linear progression from apps all the way to bots in terms of direct technological replacement. Apps, Bots, and the Cloud each bring something to the modern way we approach software presently.

Apps: It’s hard to overstate how much Apple releasing the App Store changed standards in the wider software development industry in terms of user experience and visual design. Simply put, the popularity of iOS devices and apps raised the minimum bar for what is acceptable UI for even line of business applications and elevated the role of designers from Photoshop jockeys to having a head seat at the table on most development projects. Of course, with the good also comes bad – I’ve sat in more than one meeting at large enterprises where two designers derailed a meeting by having passionate but ultimately futile debates over Helvetica / Helvetica Neue and different shades of blue.

Bots: We are way too early in the technical life-cycle for bots to make any sweeping statements about their influence on software development as a whole, but if taken through the lens of apps, they can be seen as almost a reaction to the design-heavy / design-first focus that apps have taken. This can of course be seen in their minimal UI but also in the purity of their focus on functionality above all else. Ultimately, the promise of bots is to remove that one to one relationship between user actions and software actions that apps focus on; ideally, the bots of the future will predict what you want to suggest it to you / do it for you unlike apps where you have to initialize all actions. Unfortunately, bots are little more than glorified text interfaces running some clever scripting on the cloud. We’ll need to see some pretty significant advancement in bot functionality before they are really useful and so far the top tech vendors are taking radically different approaches:

  • Microsoft: Microsoft wants you to build bots on their Bot Framework and hopes that you’ll tightly integrate with Azure or at least Skype. While there are definitely problems with their approach (for instance splitting the community by having both a C# and JavaScript SDK) it is likely the most interesting for third party developers that want to develop on one of the big vendors’ tooling. Still, I’ve been burned by betting on new Mircosoft platforms before (I was one of the fools who made an investment in Windows 8 / RT) and I’ll need to see some re-assuring signs that Microsoft is going to continue active development and support on this before I jump in with both feet.
  • Facebook: Zuck and Co have one question for you – ‘what is it going to take get Facebook Messenger to be your default messaging platform?’ Facebook’s bot implementation is the most disappointing, since it’s one of the more interesting technically (their implementation of Wit.AI shows a lot of natural language processing potential) but is ultimately rendered useless (and frankly silly) by the huge strategy tax of being tightly coupled to Facebook.
  • Apple: What hasn’t been said about Siri that hasn’t been said about a 1992 Honda Civic? It’s relatively reliable if you know what it’s good for but lacks much of what would be desired at this point. WWDC is in couple of weeks and if Apple doesn’t deliver, then they’re likely to be an also ran in the bot space. My money is on some improvements to Siri, but Apple is likely to philosophically opposed to data mining and opening this sort of data to third party developers to make any bot framework they may provide anything more than a minor curiosity for the most hardcore of Apple loyalists. Apple will likely be left with little choice but to use it’s control of the iOS platform to either not allow competing bots on their platform or (far more likely) allow them but now allow them to integrate on a system level greatly degrading their usefulness to iOS users.
  • ‘Google:’ In place of a queen you will have a colorful gender-neutral ‘G’, not dark but productive and intuitive as the dawn All shall love Google and despair! Apologies to Tolkien but Google’s shown what is easily the most impressive bot to date and it’s name is simply Google. While it’s heartening to see such impressive predictive reasoning on a bot, it’s also a little scary in terms of the privacy implications and what it means for the greater bot ecosystem. Simply put, Google is in the best position to make the best bot of anyone in the industry and probably of anyone in the world in terms of targeting the mass-market consumer user-base. Ironically, Google’s aptitude in bots and related technologies will likely stifle innovation, since Google will be able to do a better job for cheaper (since they won’t charge at all) which will likely push many smaller potential competitors out of the market. At IO, they did say there’d be some sort of developer access, but right now they’re just making the best bot themselves and that’s a little disheartening as a small software vendor.

In part, it’s hard to see what bots really mean for the industry since there are different approaches being taken for them; for instance, they will likely be far more useful for Android users than for iOS users initially. Still, the common thread here is using personal and cohort data to predict what actions you might want to take via a simple voice or text interface.

The Cloud: Bots may be getting all the tech press but they’d be nowhere without the cloud. Or would they? What is the cloud anyway? Well, do you remember Thomas Watson of IBM fame who said: “I think there is a world market for only five computers.” On the face of it that’s laughable wrong but in more practical terms of what computers used to be defined as, he’s basically right. Instead of computers we call them “clouds” (think Azure, AWS, etc) and we are basically renting usage from them which will sound awfully familiar to anyone who has ever rented time on an mainframe in the 80s. Don’t get me wrong I am well documented as being bullish on cloud technologies (i.e. Docker) but to be honest the most interesting and impact-full innovation of the cloud for most people’s day to day use is the pricing model. That’s right. The main reason the cloud has had such a positive impact on the software development industry and the greater world as a whole is that it’s cheap. Cheap computing power allows even small companies (like mine) to invest and try new product ideas out with very little financial investment in infrastructure.

So we’ve taken a look at apps, bots, and the cloud but what is the point in all of this? Well, all of these things go together. You see bots aren’t replacing apps or the cloud. There is no linear progression. Bots and whatever come after them are and will likely continue to be built on the cloud and possibly viewed via or at least supplemented by traditional mobile apps. In fact, my bet is that for a few years the key to successful software products will be to blend all of these technologies together in natural ways.

Questions? Comments? Uncontrollable rage? Reach out to be on Twitter.

Brutal Bots

Bots are the new hotness that Microsoft, Facebook, and others hope will be the next tech phenomenon, supplanting the maturing app market. It makes sense that Facebook and Microsoft would be looking for the next big thing, since they largely missed out on the app gold rush and were relegated to the role of software provider on Apple and Google’s platforms. At their most basic level, bots are cloud-based text-driven software that have some modicum of natural language processing and AI capabilities and are designed to complete / automate tasks. In particular, they’re well suited for tasks that involve tying one web service to another — for example integrating Skype with Slack or Facebook Messanger with 1-800 Flowers’ ordering service. Granted your desire to order Dominos may not be nearly as keen as Microsoft would have had us believe during their recent Build conference in which they featured a bit for just that purpose, it shows the real impact of bots — automating low level clerical task. Put more bluntly, white color job elimination.

It may seem overblown to say bots are coming for your white collar and that’s likely because right now their coming for your assistant’s. If you had a bot that could manage your calendar do automated customer outreach and some basic bookkeeping / reporting why have an assistant at all?

Not only do bots have the potential to do your assistant’s job but a bot doesn’t come with all that pesky liability. Think about it. Bots can’t be on payroll, so you avoid the wage and all payroll taxes. Bots don’t get sick. They won’t ever need parental leave or berievment time. They will never look elsewhere for better paying employment or try to renegotiate their wage after you’ve invested in them. They can’t file a complaint if they feel they are being treated unfairly. And for all the Silicon Valley bros, you can sexually harass a bot all day long and be totally safe from a lawsuit as well as the corresponding bad press.

This may all seem a bit brutal but as someone who employs people in one of the most employer hostile states in the country, I often have to look at a candidate and weigh the various risks holistically before making a hiring decision and the reality is for low value clerical work, I’d do well to avoid the expense and liability with a bot. Now, if only I could pick a bot framework….

Linux Adventure Pt 3 Skylake Hell

My adventure in the world of Linux continues and I’ve come to the point where I have purchased a Dell XPS 13 non touch and went ahead and installed Ubuntu 16.04 on it. It’s important to note that I did not spring for the Dell Developer Edition, since there was a sale on the regular (read Windows 10) version of the machine and since my intention was to immediately upgrade to 16.04 once I got the machine.

My first day working with Mate, things were great, but there was a lurking problem hidden by the fact that I was running my XPS to an external monitor that entire day. You see the XPS model that I have has the newest Skylake hotness in it. Unfortunately, Skylake has been problematic in terms of screen flickering issues on Windows 10 due to driver issues – the Linux situation is just as bad if not work. The screen flickers every few seconds and is basically not usable unless connected to an external monitor.

Because of this issue, I was forced to use the recovery tool provided by Dell to reset my machine back to Windows 10 and am using it with Windows without issue. This is a pretty disappointing problem but is not necessarily the end of my adventure. My plan is to simply wait until the community or Intel provides a driver that resolves the issue. In the meantime, I’ll be checking out Windows 10 as a development environment and try out that BASH on Windows stuff.

Let me know what you think on Twitter.

Swift on Android

SwiftRumor has it that Google may be considering making Apple’s Swift a first class language for Android development. Predictably, the internet has been pretty excited about this possibility. My lack of enthusiasm for Swift has been fairly well document, so I’m going to keep my comments to a minimum.  Swift on Android shares the same API problem as Swift on iOS and this likely has more to do with legal wrangling than technology.

Java and Objective-C are very object oriented languages and the Android SDK and Cocoa Touch APIs reflect that. Swift is a far more functional language than either of them. “Good Swift”, which I have been told is functional and not just “Objective-C in Swift” doesn’t really go so well with a OO designed API on Apple’s platform. Why should that problem not exist on Android as well? Maybe Google and Apple will rewrite their SDKs to be more functional, but that’s not where they are right now.

Oracle is suing Google and has been suing Google for Android’s use of the Java programming language, which Oracle acquired in its acquisition of Sun. The lawsuit is ridiculous and a destructive waste of resources, but that’s a pretty fair description of the US legal system, so it is likely to continue to be an ongoing concern for Google. If Google were to stop using Java on Android, that might put them in a better position regarding the suit and it’s pretty clear that the licensing on Swift would prevent any similar issue from cropping up between Apple and Google.

Yes, I’m admittedly bias, but it’s important to think about the practical and ulterior motives that Google might have for adopting Swift and not just blindly jump aboard the hype train. Swift is a decent programming language, but it’s not the right solution to every problem and we should only make changes when it makes sense to do so. Let me know what you think on Twitter or Google+.

Microsoft Tay Lasts < 1 Day

Microsoft Tay

Microsoft briefly released an AI chat bot on Twitter that was intended to be a test of sorts for their machine learning technologies. This bot was called Tay and was meant to have the personality and likeness of a teenage girl and much like a real teenage girl, she quickly found that the internet can be a less than savory place.

Unfortunately, Tay didn’t back away in horror. She ended up joining some of the worst of Twitter conversations; yes, she even mentioned Hitler. Things got so rough that Microsoft felt compelled to delete all but a few of her Tweets:

Tay Tweets

Commentators are having a good time mocking Tay’s behavior and by extension Microsoft’s apparent failure. To be sure, the boys in Redmond are a bit embarrassed about some of things their “little girl” was saying on the figurative school yard, but it’s not exactly accurate to call this a technical failure. In fact, Tay did an impressive job of learning and assimilating the sentiment of Twitter.

Of course, there’s also some cause for concern. If machine learning technologies can adapt the negative behavior of hate speech, then what other negative behaviors might other AI systems that can do more than just tweet pick up? It might sound crazy, but think about the systems being built by the likes of Boston Dynamics.

Let me know what you think on Twitter or in the comments. Is Tay the mischievous little sister of the Terminator? Either way, I’m sure she’ll be back.

 

Linux Adventure Pt 2: Ubuntu Apps

UbuntuMy Linux adventure continues on my modest Dell workstation. I’m pleased to say that so far things are going very well and Ubuntu continues to bring new life to my otherwise underpowered workstation. After getting over a few hurdles, what’s really impressive about my experience working on Ubuntu daily is how uneventful it is. Still, there’s always some room for improvement and the most glaring pain point is the lack of decent apps available for the operating system. Ubuntu just doesn’t have a good app ecosystem compared to MacOS and the Software Center is little more than an embarrassment.

Developer Interest: The simple and most basic cause of this is that there just aren’t many apps available, since developers don’t see Ubuntu as a platform worth developing for. Unfortunately, that’s probably true to a point. A simple Google search for developers considering moving their app project over from MacOS or Windows to Ubuntu, doesn’t yielding very heartening results. There also is something of (what I believe to be a misconception) among some developers where they believe that Ubuntu users are unlikely to purchase software.

App Distribution: Canonical, the developer of Ubuntu, released the Software Center several years ago with the hopes that it would become the equivalent of the App Store on MacOS. Unfortunately, the Software Center was poorly implemented and little to no effort was made to draw developers to the platform. Failing the Software Center, developers are left to their own devices for delivering their apps and there’s little standardization on Ubuntu or Linux as a whole for that matter when it comes to the easy distribution and installation of GUI apps.

The advantage of Ubuntu and Linux operating systems in general is that there are steps that the community can take to resolve issues on the platform. For instance, the community could develop an open-source alternative to the Software Center and encourage its adoption. Of course, Canonical could accelerate the process by throwing their development and financial weight behind such an effort and making a clearer statement about where the platform is headed.

Let me know what you think? Do you see Ubuntu as a viable development platform? Reach out to me in the comments below or on Twitter.

 

UPDATE: I have been made aware that the Software Center launched before the Mac App Store. I appreciate the correction. This only makes Canonical’s failure deeper, since they’ve had more time to work this out. Maybe the GNOME store will be better but I don’t think being first is in any way valuable in terms of being a developer and considering developing commercial software on the platform.  

Re-Connecting the Coord

I was one of the few, the proud, the coord cutters. I lasted over year but a few months ago I called my cable provider and connected that coord right back. As much fun as it might havae been to be “part of the future” of content, it just doesn’t make sense if you actually like TV in any non-trivial way.

Politics
I’m a pretty avid follower of politics and this election season has brought all of the middle school insults and grandoise ideas that I love to hear. Sadly, if you don’t have access to the major cable news channels, then you’re pretty much going either be stuck relying on unreliable streaming connections or simply having to miss out on the live experience.

Netflix Exodus
Netflix just doesn’t have enough content that I and my family want to watch, so I found myself purchasing a ton of content on iTunes and found myself having to subscribe to HBO Now and Hulu to get my fill of content. Basicallay, I was spending as much as I was with cable without it.

Sports
There’s no good way to watch sports without a cable subscription. Sure some forward thinking folks at MLB have come up with a subscription service that allows you to stream games, however, you can’t stream anything in your local market.

In short, there’s just not enough live content and content in general for me and I suspect many other TV lovers to happily cut the coord yet. Now, excuse while I go see how poorly my March Madness bracket is doing.

Please connect with me on Twitter and Google+ for more!

 

The Year of Xamarin Development?

1423190333_thumb.pngXamarin may now be a viable tool for cost-efficient hybrid app development since it’s recent acquisition by Microsoft.

The current app marketplace is highly competitive and as the general startup market cools in

terms of funding, launch runway for apps is going to be even more important to early stage startups. Xamarin may allow cash-strapped startups to leverage code-reuse and the large pool of global C# developers while targeting both iOS and Android.

In general, developing an app natively for both platforms will nearly double the cost of client-side development and require a team to staffed with developers well-versed in Java as well as

Swift / Objective-C. Even with today’s outsourcing resources, the cost of this duplicated effort can stretch the budget of many startups.

Microsoft’s challenge will be finding a way to keep Xamarin attractive to mobile developers ontoday’s leading platforms by keeping up with the innovations and platform updates brought by future iOS and Android versions. They have to not only keep up with Apple and Google but also attract developers to develop apps for Windows 10, something that has to date proven near impossible.