Develpreneur: Become a Better Developer and Entrepreneur

Rob Broadhead
undefined
Dec 21, 2018 • 30min

Cross Platform Mail Client - Free and Low Cost

There are those that say email is dead and texting is the most popular form of communication.  However, those people are also the most likely to have an inbox with thousands of unread emails.  For most of us, the mail client is one of our most used applications.  While these applications have almost become a commodity, there are still some important distinctions among the top players.  There are also some new kids on the block worth a look. Spark URL: https://sparkmailapp.com/ This is a nice front end for those of us that have several different email accounts to keep track of.  It has mobile application versions as well so you can feel like you are always in the same solution across all your devices.  It is quick and easy to learn as well as a nice way to organize emails across accounts. Outlook URL: https://products.office.com/en-us/outlook/email-and-calendar-software-microsoft-outlook This is Microsoft's default client and very popular in the business world.  It is a good enough client and provides easy ways to import as well as export email data including attachments.  The calendar features are highly useful in a company that uses exchange and there are countless integrations available for it. Gmail URL: https://www.google.com/gmail This is a browser client, but still one of the better email clients out there.  You can find mobile versions to make it easier to work with this on any device.  It also has a lot of mail organization and filtering features that make it almost fun to use.  It is free and includes a lot of cloud storage space so it is perfect when you need a stand-alone email for personal or side hustle communication. Blue Mail URL: https://www.bluemail.me/ This is in beta currently and a free solution.  The version as of recording this episode is slick looking and good for switching among accounts.  However, it is still a bit light on features so this is more worth watching at this point instead of adapting it for an organization. Thunderbird URL: https://www.thunderbird.net/en-US/ This is a mail client with staying power.  It has been around for a long time and provides all the features you expect from a functional mail client.  It is starting to show it's age a bit in the UI and it can be a bit slow when you start to get very large mailboxes.  That being said, it is hard to go wrong with this and it does run on most platforms natively. Postbox URL: https://www.postbox-inc.com/ This is not free (it costs $30) and although it has a nice UI I am not generally not impressed.  While this is easy to install and use that are better options that are free IMHO.  It does have templates and responses features that can make it the best option if you have an account you tend to send the same messages out of regularly.  This may be perfect for handling your sales or support email accounts. Polymail URL: https://polymail.io/ This is paid and starts at $10/user/month.  While a good client generally, it is best for teams.  It includes a calendar, analytics around opens and responses, and also good tracking of conversations.  There are also some features that are much like ones we saw in a few of the CRM tools.
undefined
Dec 19, 2018 • 14min

Software Design - The Command Pattern

We continue our look into the behavioral patterns with an examination of the Command pattern.  This is another one of them that will seem very familiar.  In fact, you have probably made use of this in one way or another in your code. The Command Pattern Defined As always, we will start with the "Gang of Four" intent to set the stage for our discussion. "Encapsulate a request as an object, thereby letting you parameterize clients with different requests, queue or log requests, and support undoable operations." This intent is short and sweet both in the description and in implementation.  The goal is to create an object that can be passed around as a function.  When we do this, we are allowed to do things like performing a callback, transfer an action to another time or system.  This can include performing an undo or other transaction types.  A GUI menu is a perfect visual representation of this idea.  Think of clicking a menu item as a command.  The command is executed based on the object (menu item) that it is called on. Applying The Pattern The implementation of this pattern is an interface that provides an execute or run method.  In other cases, a command pattern can be implemented through a class.  In this case, it takes a receiver that can perform the action.  The second option is a way to allow things like queueing up commands.  It is also useful for storing them for execution at a different time.  This may seem like an obvious extension of an object-oriented design by being able to abstract functions from classes, but it still has enough wrinkles to make this a good pattern to know. Java, PHP, C#, etc. As mentioned before, there are a couple of ways to implement a command pattern.  The good news is that this tends to be simple enough that any language implementation will look almost identical to any other.  The languages that make heavy use of callbacks may be better places to find examples of how to implement this pattern.
undefined
Dec 17, 2018 • 18min

Amazon Mobile Services

The Amazon mobile services group is one of the newer ones in their offerings.  However, that does not mean it is something you want to skip over.  These solutions are likely to be very valuable to your mobile application development efforts.  They will help you increase productivity and ease your integration with the AWS infrastructure when you use it for the solution platform. AWS Amplify This helps you build and deploy mobile and web applications.  Amplify is a development framework (libraries, components, etc.) and the CLI to help you build a mobile backend for your application.  It is compatible with React, iOS, Android, and Web-native applications.  This service frees you up to focus on your front-end and business logic rather than struggle through the integration points with AWS. Amazon API Gateway Prior post link is https://develpreneur.com/api-gateway-amazons-service-for-connecting-your-systems/ This service allows you to build, deploy, and manage API's.  Thus, it can be thought of as a layer on top of your API to make it easy to maintain a static interface from the point of client applications and services. Amazon Pinpoint We discussed this in the customer engagement tools.  As a reminder, it makes it easy to use Push notifications for mobile applications.  Thus, it is your easy way to communicate with app users. AWS AppSync Any mobile application will need to handle the issue of disconnected state.  You may not want the user to be able to access the application unless a network connection is present.  However, that can make it very limited and turn away customers.  The AppSync service provides an easy way to handle data synchronization across app and back-end through a framework and libraries. AWS Device Farm This allows you to test android, iOS, and web apps on real devices in a browser.  The devices exist in the AWS cloud and provide a cost-effective way to test a large number of devices.  The pricing is just seventeen cents per minute or $250 per month for unlimited devices/testing.
undefined
Dec 14, 2018 • 25min

E-Commerce Solutions - Free and Low Cost

E-commerce is one of the primary drivers of the Internet.  Although funny pictures of cats may seem like the largest draw, those pictures and social sites get their revenue from advertising.  That advertising is only valuable when it leads to purchasing and e-commerce is becoming the way we buy our stuff.  In this episode, we look at some excellent tools to get your electronic shop on the Internet and ready to take orders. Shopify URL: https://www.shopify.com/ SAAS, HTML/JavaScript Easy to use, all-in-one solution with plugins as well.  Not the cheapest solution nor the easiest to customize.  On the other hand, it is easy to get started with a product or two and provides options for everyday needs like fulfillment, recurring payments, and more. XCart URL: https://www.x-cart.com/ Open Source, PHP This product is fast but prone to needing customization coding and can be bug-ridden depending on how good the coders are.  It is a good solution for those with a few technical skills. WooCommerce URL: https://woocommerce.com/ WordPress, PHP WP plugin that is popular and has an active support community. Prestashop URL: https://www.prestashop.com/en SAAS or Install, PHP This application is another solution that can be brought up quickly.  However, there are a large number of add-ins and modules that you will likely want, and they often have a cost.  This is easy to grow into an expensive solution so you may want to nail down the exact requirements for your business before diving in. ZenCart URL: https://www.zen-cart.com/ Open Source, PHP Magento URL: https://magento.com/ Open Source and SAAS, PHP OpenSource and free edition with a large number of features. However, this is often slow and complex to get started. Maintenance and customizations can get expensive. OpenCart URL: https://www.opencart.com/ Open Source, PHP JigoShop URL: https://www.jigoshop.com/ WordPress, PHP A WordPress plugin with a good history (WooCommerce hired the developers away) and easy to install.  It has a few features that make it worth looking at although it seems WooCommerce may be moving into position as the best WordPress plugin in this category. Wp eCommerce URL: https://wpecommerce.org/ WordPress, PHP another WP plugin and simple but not as powerful as WooCommerce nor as popular If you want to check out some more potential tools, here is an article with a summary of these and others: https://ecommerce-platforms.com/articles/open-source-ecommerce-platforms
undefined
Dec 12, 2018 • 14min

Software Design - Chain of Responsibility Pattern

This episode covers a pattern that is not as well known as some of the recent ones.  This time we look at the chain of responsibility pattern.  This is also our first foray into the behavioral patterns.  These may be techniques you have used without knowing they had a formal name or related pattern. The Chain of Responsibility Pattern Defined As always, we will start with the "Gang of Four" intent to set the stage for our discussion. "Avoid coupling the sender of a request to its receiver by giving more than one object a chance to handle the request.  Chain the receiving objects and pass the request along the chain until an object handles it." This intent is a lengthy one.  The key is in the second sentence.  We are going to send a request and objects either respond or pass it along the chain.  This is a highly common pattern in graphical controls and the related event processing.  We also see this in other areas like a try-catch block in some instances.  Generally, there is a hierarchy or priority we implement in the chain or move from a specific to a general case in determining the response. Applying The Pattern The implementation is an interface that provides a way to make a call on an object from an external source.  That interface method will often provide a return value that indicates whether there was processing performed.  That is not a requirement though.  There will also be some way to progress through the collection (or layers) of classes that form the chain. Java, PHP, C#, etc. Once again, a chain of responsibility is an interface.  There might be a case where a class and inheritance would work, but that often is too tightly coupled.  Remember that the intent is to avoid coupling.  Thus, the looser the relationships, the better.  Therefore, the implementation is roughly the same across object-oriented languages.  They all support interfaces and nothing special is needed whether you use C#, Java, PHP, or something else.
undefined
Dec 10, 2018 • 16min

AWS Application Integration Services

This week we look at a shorter list of services in the Application integration group.  The list may be short, but these are highly useful and valuable services for application developers.  These are excellent ways to integrate your applications (as you would expect from the name). AWS Step Functions Coordinate Distributed Applications The Step Functions free tier includes 4,000 free state transitions per month. All charges are metered daily and billed monthly.  This service provides a way for you to visually connect pieces of your application when the pieces are serverless or otherwise stand-alone functions. Amazon Simple Queue Service (SQS) Managed Message Queues Simple Queue service is a bundled solution.  It runs on a server and uses storage for the queue.   Thus, the two pieces combine for the pricing and utilization.  You can get started with Amazon SQS for free.  Accordingly, all customers can make 1 million Amazon SQS requests for free each month. Some applications might be able to operate within this Free Tier limit. Amazon Simple Notification Service (SNS) Managed Message Topics for Pub/Sub There is a free tier that covers your first million push notifications (publishes and deliveries) every month.  The notification service is similar to a queue.  However, instead of a push and pop approach, it is a subscribe/publish model.  In general, your application subscribes to a topic.  Then, when a message appears on the queue, the application receives it and can process accordingly. Amazon MQ Managed Message Broker for ActiveMQ The Amazon Message broker Free Tier includes up to 750 hours of a single-instance mq.t2.micro broker per month.  The storage starts at up to 1GB of storage per month for one year on the free tier.  All new AWS accounts are eligible to receive the 12 months of AWS Free Tier access.  As always, you can check out the AWS Free Tier page for details.
undefined
Dec 7, 2018 • 25min

Time Tracking Solutions - Free and Low Cost

We all need to measure how much of our life is spent working.  Thus, time tracking is one of those features that we all can make use of.  The good news is that this is a problem that can be solved at a low cost and in less intrusive fashion than in the past.  There may be a few "do you want to allow application X to do Y" questions to answer but otherwise, these tools can be quickly installed and utilized. Clockify.me Address: https://clockify.me/ This is free to get started and easy to set up.  I registered, created a project and was tracking time in minutes.  It is team focused, so a lot of the features make it easy to add team members and see their time as well.  The free option allows for unlimited team size and some fairly useful reports.  Thus, this could be perfect for a team just starting that wants to start tracking time. Toggl Address: https://toggl.com/ The free version of this solution provides good time tracking and features to help you stay on track.  It will detect sleep or inactivity and stop without you having to figure out when you got pulled away from your desk.  The paid versions add features and reports mostly useful in team environments.  Thus, the $9 and $18 per person per month prices are steeper than some of these other solutions.  Toggl is a popular and easy to use solution worth a look. Get Harvest Address: https://www.getharvest.com/ This is free for one person and up to two projects.  The paid version runs $12 per user per month.  The reports and tracking features for Harvest are among the best.  It includes integrations with browsers and tools that make it easy to slip into your regular work processes.  Although the free version can be a bit limiting, it may be perfect for a side hustle where you are only working on one or two things at a time.  Larger teams will find this a good solution for tracking hours and reporting on the same. My Hours Address: https://myhours.com The free option for a single user is perfect for common consulting hour tracking.  The next step up is a mere $6/month and adds reports and other features although the free version may often be all that is needed.  This provides one of the easiest ways to switch back and forth among projects and clients for time tracking.  That has proven to be a need when I find myself on multiple projects per day as I often do. TopTal Tracker Address: https://tracker.toptal.com/tracker/ This is the timer provided by Toptal for users of their system.  However, it is also provider agnostic so you can use it for tracking time against other sites as well.  It lacks some of the tight integrations timers like the UpWork one provides (regular screenshots to prove you are working) but is simple, free, and easy to use.  It requires a desktop application which is a potential downside.  On the other hand, the reporting is all web-based, and they are clean reports that are easy to read and use for billing purposes. Tracking Time Address: https://trackingtime.co/ The free version of this covers teams up to three members and then it moves to $4.99 per user per month ($4.16 billed annually).  It has a great start that allows you to get tracking time on a project in under a minute.  The reports are what one would expect, and it helps that the estimates for a task are always asked up front.  It helps push you to estimate, and then your reports will highlight how good (or bad) those estimates are upon completion. Rescue Time Address: https://www.rescuetime.com/ A free option is available forever, or the premium is $6/month if you choose the annual payment option.  This tool is not as much a project time tracker as it is a detailed application and browser activity tracker.  If you want details about how you spend your time, then this is what you are looking for.  It provides some excellent reports and graphs while the premium version helps you avoid distractions. Focus Me https://focusme.com/ The cost is $2.50/month annually, and there is a free trial. This solution is not as much a time tracker application as one that is for time management. Think of it as a Pomodoro timer on steroids that helps block you from activities that are distractions. It does provide a sort of micromanagement report of your time which can be helpful if you bounce around a lot.  It is application/website focused and does not allow you to link work to a customer or project.
undefined
Dec 5, 2018 • 13min

Software Design - The Proxy Pattern

We continue a look at the structural patterns with a look at the proxy.  This is much like the flyweight we reviewed in the last episode.  However, it has a different focus.  The flyweight can be used to implement a form of proxy but is a solution to a large number of instances where this is a different goal. The Proxy Pattern Defined As always, we will start with the "Gang of Four" intent to set the stage for our discussion. "Provide a surrogate or placeholder for another object to control access to it." That, once again, provides a short and simple description of our pattern.  The proxy saves us from having to instantiate an object before we start using it.  The proxy acts as a class as needed, but it passes communication back and forth between the caller and the object.  This approach provides us with ways to access an instance remotely or without moving around the full object. Applying The Pattern The implementation is a class that implements key interfaces and has core attributes of the one it works with.  There might be pointers and references to more complete values or implementations hidden under the covers.  With this pattern, we do not need to worry the user about those details.  The caller will see this as the same as the primary class.  We can even fully retrieve values as needed in a just-in-time manner.  Thus, a proxy allows us to minimize memory footprints while providing complete functionality. Java, PHP, C#, etc. Once again, a proxy is a class.  There might be a case where it and a parent class alone would be useful.  However, you typically will find that there is an interface or maybe interfaces involved as well.  These facts make the implementation the same across object-oriented languages, and nothing special is needed whether you use C#, Java, PHP, or something else.
undefined
Dec 3, 2018 • 22min

AWS Machine Learning Services

The AWS machine learning services are more examples of the newer offerings.  Nevertheless, these are growing fast and can help you embrace cutting edge technology.  Machine learning is a recent technology in general so the time you spend understanding these services may help you land that next job. Amazon SageMaker This service provides a method for building, training, and deploying machine learning models at any scale.  This is a great way to try out machine learning.  The time you spend here is good to use on your next resume update.  You do need to put some data on S3 to analyze and then check out the use cases.  There is a free tier for the first two months. Amazon Comprehend Quick and easy text analysis.  Send your text to this service to analyze it for keywords among many other ways to do so.  There is a free tier you can use to try it out and find out ways to organize and mine your content. Amazon Lex This service allows you to build voice and chatbots using the technology that drives Alexa.  There are some templates, and the interface makes it easy to get started quickly. Amazon Polly If you want to create audio from your content, then this is the service for you.  Try out the service a few thousand words at a time for free, and you can even download the audio in mp3 format. Amazon Rekognition The features that Comprehend provides for text is moved into the video world by Rekognition.  This service analyzes video and can highlight or recognize people, objects, and other details you might search for in a stream. Amazon Translate This service provides a quick and easy way to translate text between any two languages.  Much like Google translate, it is quick and provides an API that you can use to significantly increase your audience. Amazon Transcribe If you have ever wondered about transcribing audio notes (or a podcast), then this is the service for you.  It is quick and easy to customize for even highly technical terms.  The accuracy varies based on the clarity of the audio and background noise. AWS DeepLens This service is best understood by utilizing the tutorials.  It provides a way to analyze videos for objects, faces, and activities.  An essential difference between this and the others is that this is a piece of hardware and not just a service.  It provides a camera with HD and onboard analysis tools for real-time processing of video. AWS Deep Learning AMIs This service provides quick start machine learning on EC2 through the AMIs.  The configuration of a machine learning development environment can be tedious and time-consuming.  These AMI options offer a shortcut to get working sooner. Apache MXNet on AWS This is a machine learning framework Apache MXNet is a fast and scalable training and inference framework with an easy-to-use, concise API for machine learning. MXNet includes the Gluon interface that allows developers of all skill levels to get started with deep learning on the cloud, on edge devices, and mobile apps. In just a few lines of Gluon code, you can build linear regression, convolutional networks and recurrent LSTMs for object detection, speech recognition, recommendation, and personalization. TensorFlow on AWS This is a machine learning framework on AWS.  I think their description works best and avoids any ignorance about it on my end. "TensorFlow™ enables developers to quickly and easily get started with deep learning in the cloud. The framework has broad support in the industry and has become a popular choice for deep learning research and application development, particularly in areas such as computer vision, natural language understanding, and speech translation.  You can get started on AWS with a fully-managed TensorFlow experience with Amazon SageMaker, a platform to build, train, and deploy machine learning models at scale. Or, you can use the AWS Deep Learning AMIs to build custom environments and workflows with TensorFlow and other popular frameworks including Apache MXNet, PyTorch, Caffe, Caffe2, Chainer, Gluon, Keras, and Microsoft Cognitive Toolkit."  
undefined
Nov 28, 2018 • 15min

Software Design - The Flyweight Pattern

We continue a look at the structural patterns with a stop at the flyweight.  This pattern is one I find ignored more often than it should be.  In particular, the large number of data items we typically model in modern applications are often best handled through this pattern. The Flyweight Pattern Defined As always, we will start with the "Gang of Four" intent to set the stage for our discussion. "Use sharing to support large numbers of fine-grained objects efficiently." Short and sweet.  This intent is to model large collections in the best way based on data needed and memory considerations.  A flyweight is an object-oriented approach to data modeling that is practically an index.  We only keep up with the data we need for each element.  This approach reduces the overhead of moving around fully defined objects. Applying The Pattern The flyweight implementation is a smallish class.  The typical approach is for a flyweight to be based on a larger class.  Then it simply ignores many of the attributes.  It often will have the bare minimum of attributes required to implement common interfaces.  It might even provide a method to return a complete, and populated instance. If this sounds familiar, then that is because the flyweight pattern is often used to implement lazy loading.  The difference in lazy loading is that those objects sometimes have all of the class properties.  However,  they do not populate the values immediately.  A true use of this pattern does not carry that overhead.  This factor is critical when you consider the possibility of thousands, millions, or more instances of a class.  At that point, every property, every byte counts. Java, PHP, C#, etc. As mentioned before, a flyweight is just an approach to a class.  Thus, there is no need for a language to support any special object-oriented features.  Even inheritance is not a requirement for a flyweight.  When it is implemented it just needs to be able to handle requests that can be made on a full object.  This might even include going out to populate values that are not populated or retrieve a property value temporarily. In the end, the flyweight pattern is one you should keep in mind in situations where a large number of instances may occur at any one time.  Common examples of this include classes that model rows in a database, images in a library or even points on a map.

The AI-powered Podcast Player

Save insights by tapping your headphones, chat with episodes, discover the best highlights - and more!
App store bannerPlay store banner
Get the app