

Develpreneur: Become a Better Developer and Entrepreneur
Rob Broadhead
This podcast is for aspiring entrepreneurs and technologists as well as those that want to become a designer and implementors of great software solutions. That includes solving problems through technology. We look at the whole skill set that makes a great developer. This includes tech skills, business and entrepreneurial skills, and life-hacking, so you have the time to get the job done while still enjoying life.
Episodes
Mentioned books

Oct 31, 2018 • 18min
Software Design - The Composite Pattern
The Composite Pattern is one that is not taken advantage of as often as it might outside of frameworks. This is an approach to design that allows you to treat a family of objects the same. It is a quintessential reason for and use of an interface. The flexibility is critical to being able to handle groups of different objects the same way any individual one would be treated. The Composite Pattern Defined As always, we will start with the "Gang of Four" intent to set the stage for our discussion. "Compose objects into tree structures to represent part-whole hierarchies. Composite lets clients treat individual objects and compositions of objects uniformly." I think it may be most comfortable to focus on the second sentence in defining this pattern. The tree structure feels a bit like an implementation detail rather than an abstract pattern. The tree structure reference is often (if not always) seen in utilizing this pattern. It usually breaks down to a concept of a container that holds other containers or primitives. Graphics are a perfect example. You have pixels, but then those can be combined into shapes or other container structures. Applying The Pattern The key to this pattern is an interface or top-level class. It is more flexible to use an interface for this implementation, but you may find cases where a top-level class reduces code and allows for re-use. The objects that implement the interface will either perform the action on themselves or have a way to execute the function on a collection of objects. For example, a square can be seen as a collection of four lines. When you "draw" the square it will tell each of the four lines to draw themselves. Each line is likely a collection of points. Therefore, each line will instruct its points to draw themselves. A point ends up doing the real work; everything else is a delegation. This simple example can be extended to consider a square that also draws its center point. That would be a collection of lines and a point. Although it seems simple, the ability to mix and match primitives and collections has a broad range of uses. Java, PHP, C#, etc. All modern languages support an interface and thus look very similar in implementation. You create an interface that contains the methods you want to be shared and then create the classes that implement it. The implementation of a method in a class can either be handled within the class or passed through to objects it contains or controls. We will see some other patterns that are similar in that they make it easy to apply functions across a heterogeneous collection.

Oct 29, 2018 • 25min
AWS Security Services (Part 1)
The compliance, identity, and security services of AWS covers a large number of offerings. Therefore, we will review these in a multi-part series of episodes. The power and infrastructure provided by choosing AWS for your cloud provider become apparent with these tools. We have a lot to cover in this first part. Access and Identity Management This should be the first step in your use of the AWS services. AIM is a framework or set of features to help you define users, permissions, roles, and manage them. Nearly every function points back to AIM as the way to set up and configure access as well as security for that service. If you do not have at least a fundamental understanding of AIM, then you should start there before looking further in the security-related services. Single Sign-On No one likes to log in to every application they launch. Thus, single sign-on is practically a must for any organization that requires users to access multiple applications on a regular basis. Unfortunately, that covers nearly every organization in the modern landscape. Never fear, Amazon understands that need and has made single sign-on relatively easy to implement and embrace for all of your AWS solutions. Artifact The Artifact offering is a repository more than a service. This is where you go to get the Amazon official documentation about their platform, SLAs, and recent audit reports. Most small companies will not have need of these documents. However, a security audit will require these to be available, and it never hurts to review them, so you know exactly how secure and reliable AWS is. Shield This is not the group out of Marvel comics. The Shield service has a standard offering that is free and helps guard your systems from distributed denial of service attacks (DDOS). The paid version includes analytics and reporting to help you assess and defend against attempted attacks. This is an excellent service for those of us that always worry about how secure and protected our systems are. Macie The AI and machine learning features that Amazon has embraced are starting to result in a bevy of new services. Macie is one such service. This tool helps you search and classify your data to help avoid releasing personally identified information (PII) to external sources that should not access it. If you are trying to assess how vital PII protection needs to be to your organization, then this is an excellent place to start that research. Directory Services The directory services offering is your path to moving Active Directory out to the cloud. For better or worse, AD is a part of most organizations' access and permissions management. Amazon recognizes this and provides this service to help you keep all that work as you move to the cloud. Organizations Another of the security services that is easily understood from its name alone, Organizations provides you with the ability to relate AWS accounts to each other. This makes it easier to share permissions and also to roll up billing as needed. It is free to use and worth a look as your AWS needs grow. Web Application Firewall (WAF) This is an application level service to protect your solutions with a firewall. Rather than lock down access on a server basis, this works with the dynamic nature of cloud systems to allow you to secure offerings at the best level to manage.

Oct 26, 2018 • 26min
Social Site Management Tools - Free and Low-Cost
Social networking is all the rage. Unfortunately, all of those platforms that allow us to share our story can be hard to keep up with. When you want to reach out to customers on more than one platform then it is time to look at these social site management tools. Social Site Management Most of the tools we discuss start with the ability to post content to multiple platforms. While that is highly useful (and time-saving), it is just the beginning. The more advanced tools offer the ability to track responses, view analytics reports, and even manage all your social networking from one location. The List There is a broad range of solutions that fall into this family of applications. Thus, it may help to see a list of products that may fall into this category that we did not cover in the podcast. Here is a link to that list: Big list of possible tools: https://www.capterra.com/social-media-marketing-software/?utf8=%E2%9C%93&review_stars=4&users=&platform%5B1%5D=8&feature%5B1%5D=38280&commit=Filter+Results&sort_options= Buffer: buffer.com - This is a solid solution for anyone that wants to post to more than one or two sites on a regular basis. The $10/month subscription should also be easy to manage in any budget and pays for itself in time saved. Planoly: https://www.planoly.com/ - This Instagram focused solution is well-suited for visual platforms. It may not help a typical blogger, but if you use images and visual stories a lot then this tool will be a better fit than the other text focused tools. There is a free plan or you can bump up starting as low as $7/month. Agora Pulse: Slightly expensive at $39/month: https://www.agorapulse.com/ but it does have a free trial and has some very useful features for marketing and analytics. Meet Edgar: https://meetedgar.com This runs $25/month and is an excellent solution for evergreen content. It makes it easy to repost content and managing recurring touches. Sendible.com $24/month higher end buffer with more outputs and analytics Hoot Suite: https://hootsuite.com/ $29/month Co-schedule: This is more of a calendar and a full social content scheduling tool than just a way to post material. It makes it easy to track mentions and manage relationships. It starts at $40/month but also has a referral option that can reduce your costs to $0 Social Jukebox: https://www.socialjukebox.com/ $19.99 monthly

Oct 24, 2018 • 14min
Software Design - The Bridge Pattern
The Bridge Pattern is commonly configured but often due to templates and generators rather than understanding the true intent. Since it is more of a design than code implementation, it can be easily missed. Nevertheless, it is one we often have available and should probably take advantage of more often. The Bridge Pattern Defined As always, we will start with the "Gang of Four" intent to set the stage for our discussion. "Decouple an abstraction from its implementation so that the two can vary independently." This is simple and easy to see in code. How often have you seen (for example) an interface and then a class that is the implementation of it? I have worked on numerous Spring applications that follow this pattern where I may have a customerDAO and then a customerDAOImpl. While this could be confused with a way to implement a C header file (*.h), that is not at all the goal. If our design stays static, then we may not need to take advantage of the bridge (the relationship of the DAO and DAOimpl classes). On the other hand, this makes extending that code much more manageable than pushing the two classes into one and using inheritance. Applying The Pattern The key to this pattern points to another common one we will cover another time, the MVC. The application of a bridge allows us to address classes in pieces instead of having to jam a poor implementation into a design (or vice versa). A good example is an interface and an implementation as noted above. When we want to inherit from the interface we can extend it without having to drag along the implementation; we can also extend the class without having to adjust the interface. Think of it as an extra layer of abstraction. From a data perspective, this is similar to implementing a many-to-many relationship. When we have multiple implementations to tie to some classes, then a bridge is needed. Java, PHP, C#, etc. This implementation is accomplished through an interface that is paired with a class that implements that interface. The extension can be accomplished from either of those two classes. That gives us the bridge. This does not vary much from language to language as interfaces are almost ubiquitous. As we have covered before, we typically can use the interface keyword to define an interface and class for the other side of the bridge. If there is an option to place implementation within the interface (rather than leaving it completely abstract), then that must be avoided in a bridge. Our goal is to push implementation as far down the relationship as possible. Thus making it easier to plug and play the pieces along the way.

Oct 22, 2018 • 18min
AWS Customer Engagement Tools
You may think of Amazon web services as all technology-focused. That is not the case. There are plenty of offerings to help you run your business. In this episode, we look at a perfect example of these business services via the AWS Customer Engagement Tools grouping. There are only a few services in this group, but they are extremely powerful and useful. Simple Email Service This is different from WorkMail. That service provides a server for managing your email accounts and directing email. SES is a service that acts as a sender and receiver for your emails. It is the purest form of handling email. The CLI makes this a perfect tool for sending email to and from applications, maintaining mail lists, and using email as a primary notification method for your solution. Connect This is a pay as you go, cloud-based, call center. It uses the same technology found in Alexa to direct your customers through a call flow and integrates with their data to help direct them as efficiently as possible. This walks you through setting up a contact URL, a phone number they can call, then the queues (IVR) that you want them to experience. This does provide 90 minutes of call time a month on the free tier to make it easy for you to do setup and testing. PinPoint This is high-powered customer notification tool. You can send email, SMS, or push notifications to users of your applications and this service also provides detailed analytics to help you determine how effective they are. Think of MailChimp with a greater ability to send and track notifications and engagement. I know, we suggest you look into services every week. However, these can provide a surprising set of features for your business. Even if you do not use these or currently need them, they are services that you should know are out there in the AWS space.

Oct 19, 2018 • 24min
Software Ticketing Systems - Free and Low-Cost
Bug tracking and software ticketing systems are used in every shop I have ever worked with. Some of these are decidedly low-tech solutions that are no more than a spreadsheet. Some of these solutions can help you do far more than just track issues. They can even help you raise the overall quality of your processes. Ticketing Systems Are Almost a Commodity Bug tracking and ticketing systems are ubiquitous. A lot of companies have even built custom solutions for their internal use. The problem space is that easy to address. As mentioned before, even a spreadsheet can be sufficient for all of your bug tracking needs. I know how easy it is to build these systems from personal experience. Over the years, I have built about a dozen various solutions. The ease of designing a solution makes the market for these tools one that is highly populated. On the other hand, the applications are often reasonably priced for the functionality they provide. The List The list for this episode covers a couple of different technologies, open and closed source, and it has solutions that work with a variety of database engines. These can easily provide a short list for your research or check out the larger list link to find a few other options. A good list of options: https://www.softwaretestinghelp.com/popular-bug-tracking-software/ Jira: The cloud solution is $10/month for up to 10 users and an unlimited number of projects. You can also get the on-premise version for $10/year and get free upgrades throughout that year. That version is also limited to 10 users. This is offered by Atlassian and very popular as well as powerful. Mantis: A hosted version is available for $4.95/month (5 users but only one project) at mantishub.com. There are other hosted solutions, or you can install it for free on-premise. It is customizable but has a slightly aging interface. Bugzilla: This is open source and uses PHP. It is highly popular with a good and active community. Redmine - This is a Ruby-based open source solution. It is very similar to Bugzilla in look-and-feel. There is a free hosting option at http://www.hostedredmine.com/. Zoho Bug Tracker: The free version limits you to 1 project and five users. You can step up to $40/month to support up to 25 users. It has a modern interface, good integrations, and professional features like notifications and SLA. GitHub Issues: This is simple, free, and perfect for project specific solution. It is included with every Github project. Bug Genie: The free version allows one project and ten users. You can move up to a paid solution for 10 pounds per month (this is limited to 5 projects and 25 users).

Oct 17, 2018 • 17min
Software Design - The Adapter Pattern
The Adapter Pattern is one of the easiest to understand and relate to the real world. We see adapters used every day and they have become a critical factor in our daily success. Almost every device we have utilizes an adapter in some way. The Adapter Pattern Defined As always, we will start with the "Gang of Four" definition to set the stage for our discussion. "Ensure a class only has one instance, and provide a global point of access to it." There are many names for an adapter pattern. However, they all imply the same thing. The implementation boils down to a translator between two parties. A commonly experienced real-world example is a power or recharging adapter. These accessories translate the power coming out of the wall to the input for the device. The software approach is not fundamentally different. Applying The Pattern It is hard to imagine software without adapters. In particular, the ideas of abstraction and implementation hiding would be impossible without an adapter. That makes this pattern a solution to one of the most critical requirements of object-oriented applications and flexible software of any type. The implementation of this pattern is a simple structure. There is an input/interface that talks to one object and it has an output/interface talking to another object. The details often are handled by a class being the input/output of the method and the adapter translates from that object to recognizable parameters. Those values are used to make a call and then the results are passed back to the caller. Java, PHP, C#, etc. The alternative of an adapter pattern is pulling values out of one object, translating them to a method on another class, and then repeating the process for the results. There is nothing special about the solution outside of an interface. The interface is what we are adapting to. Thus, if we want to create an adapter for an employee to treat them as a contact like a customer we need an interface of CustomerAdpater that takes an employee instance. Under the covers, the adapter translates the employee data to similar customer data for contacts and then implements the needed methods. It all boils down to a map or translation step although it can sometimes be a complicated process.

Oct 15, 2018 • 25min
AWS Business and Productivity Tools
This episode tackles the AWS business and productivity tools group of services. It includes Chime, Alexa for business, WorkMail, WorkDocs, and we add a quick look at WorkSpaces. These combine to provide a set of solutions for small to large companies that are not focused on tech workers. These services are aimed at handling everyday business needs like document storage and sharing, communication, and your workspace/desktop. WorkDocs This service is Amazon's answer to products like DropBox and Microsoft's OneDrive. It does not have the same level of automated synchronization with a client application as the other solutions. However, it is highly secure and a solution you can use even when you require compliance with PCI, HIPPA, or similar highly-secure standards. WorkSpaces The desktop computer is becoming a thing of the past. Laptops are everywhere, but even lighter solutions are becoming popular with virtual machines used for the traditional business OS needs. The WorkSpaces service makes this easy to manage and configure. The pricing may seem high but think about being able to have a modern and up-to-date OS for your staff without the need for desktop support resources. You also get the benefit of being able to avoid regular high hardware costs to replace outdated machines (and the related headaches from trying to dispose of old systems). WorkMail This is your one-stop shop for your email needs. It provides you a mail server (like Exchange) and tools to manage users. There are a lot of ways to handle email needs these days, but controlling your server has enough benefits to make this worth looking into. Chime Goto meeting and similar applications have been around for years. These tools allow us to have virtual meetings, share desktops, and otherwise communicate across diverse geographical locations. It includes features to communicate via text during a call and recording audio and video as well. It is priced better than most solutions and provides a robust platform for your virtual meeting needs. Alexa for Business The last of the AWS Business Tools we look at is Alexa. This service works with their Echo line of products and the Alexa voice recognition service. It is becoming more powerful every day and well worth a look if you have any thoughts about automating your office. If you have no such ideas, take a look anyway. It can change your view of automation in the modern world.

Oct 12, 2018 • 23min
Customer Relationship Management Tools - Free and Low-Cost CRM
Customer Relationship Management Tools are big business. You can see examples in vast and expensive solutions like SalesForce.com. However, not every answer is world-class and focused on the enterprise customers. There are also plenty of options all the way down to the free and low-cost arena. We will look at some of these contenders that not only can serve your needs. They also can be easier to implement than SalesForce. CRM Tools Are Broad in Features One of the most significant challenges in selecting a CRM is matching the requirements. There are a lot of directions a CRM can go and still be focused on customer management. There is the sales pipeline approach that focuses on analytics about your customers. On the other hand, your CRM can focus on contacts and building relationships through notes and regular communication. Do not forget you can also focus on sales and who bought what. This analytics can blur the line from CRM to ERP and other systems. We will still see some variance in the offerings at the level we are reviewing. However, these tend to have a core set of features that most small businesses will find valuable. These features include the ability to build a process for evaluating customers or prospects, contact tracking so you can keep up with what was said and when, and there is often email and other communication tool integrations. The List I tried to keep our list to a reasonable number of options. You can easily spend weeks or months evaluating CRM tools, so I highly recommend you get to a short list of less than five very early in your process. https://www.insightly.com - Pricing: FREE for up to 2 users with 2,500 or fewer customer contacts. The Paid plans range from $29-$99 per user per month. http://www.nimble.com - Pricing: They keep it simple and have only one plan. $19 per month per user. This has an unlimited number of customer contacts allowed. http://www.zoho.com/crm - Pricing: The Paid plans range from $12 - $100 per user per month. https://www.bitrix24.com - Pricing: There is an entirely free account (cloud based), you get five users and 5GB of storage. The vendor also offers an installed option for a one-time fee of $2,990, which gets you their small-business installed CRM (good for 50 to 500 users). If you need a system that has telephony and project management and don't need a lot of handholding or the most natural UI this is a good option. Overall, I found Bitrix24 to be powerful but a bit slow in responding to requests. On the other hand, they have great import tools. https://capsulecrm.co Pricing: Capsule is free for up to two users with 10MB of storage and 250 contacts. I found it to be easy to use and easy to learn. The mobile-responsive site appears easy to use as well although I did not spend much time with it. This is a simple interface and product but strong on the functional side. https://monday.com - Pricing: $25/month for up to five users. It is an elegant solution but more project management focused than a CRM.

Oct 10, 2018 • 20min
Software Design - The Singleton Pattern
The last of the creation patterns we will cover is the Singleton. This is a pattern that has a little controversy around it and may even be an anti-pattern. It is easy to implement, but the reason for needing one can trip you up. The Singleton Pattern Defined It helps to start with the "Gang of Four" definition and then we will dig into that. "Ensure a class only has one instance, and provide a global point of access to it." This is what we use when we need one and only one instance. An example might be the application settings or an instance that represents a real-world device (keyboard, mouse, maybe even a printer or hard drive). When we access values on an instance, they will be the same no matter which "instance" we utilize, and any changes will impact all code that uses it. The good and bad properties of a Singleton is that is a global instance. Applying The Pattern Global variables have been around as long as applications. The uses are countless, and some of those are even good programming practices. However, there are a lot of applications of global values that are due to laziness or at least sloppy coding. I will not go into all of the pros and cons of global values here (although they are touched on in the podcast). The pattern is simple to implement. You set the constructors all to private access and then create a "getInstance" method. When "getInstance" is called it either creates an instance and returns that, or it returns the current instance. You will often see the one instance as a private property of the class, or it can even be a static property in some cases. Java, PHP, C#, etc. Java uses singletons for some of the utility functions and to hold methods that need no properties. Of course, this can also be done with static classes and methods. That takes away some of the need for a Singleton. When your language does not support static methods and classes, then you may be forced to go the singleton route. A good use of this pattern is when you truly need to store values, and the object they represent will only ever have one instance in the scope of an application. A log file or logging system may be configured this way or a similar serial processing structure. User and session values may require a singleton. On the other hand, you may find yourself limited if you only allow a single session or user in the application. This works on a desktop application but is rarely going to work on a web application. Take a look at the arguments for and against using a singleton before you dive in with this particular pattern.


