Showing posts with label Software. Show all posts
Showing posts with label Software. Show all posts

Tuesday, November 20, 2018

Chatbots Transforming Consumer Support

Consumer Support automation is a niche in the market that chatbots are rapidly filling more especially in major chat products such as Facebook Messenger. In layman's terms you can now shop online with assistance from a chatbot as you communicate what you are looking for (Schlicht, 2016).

Schlicht describes a chatbot as a service that can live on a major chat product and can be powered by rules or AI through machine learning as an example. It mimics human conversation to provide customer services.

I took the liberty to test one myself; a chatbot for Fandango on Facebook Messenger. Kajabi (2018) explains how Fandango is an app you can download to watch trailers, read reviews of recently released films, and interact with other people who love motion pictures. The chatbot on Facebook Messenger allows users to do some of those things without leaving Facebook.

Below is a screenshot of my experience with the chatbot:


Rathinam (2018) invokes that one of the greatest disadvantages of chatbots is that they are expensive to integrate as they must integrate with existing software to function. Aside from this drawback they lower the cost of having actual humans interact with consumers.

He also mentions how chatbots are not entirely efficient because they lack the contextual knowledge to effectively account for all the complexities of language and will therefore require more advanced AI to iron out their inefficiencies.

It seems that current chatbots are only good for the basic queries for a business. You may still need to call the Customer Helpdesk for the more advanced queries. But this is where chatbots have room to thrive as AI also advances. 

Niko Bonatsos has said that "~90% of our time on mobile is spent on email and messaging platforms. I would love to back teams that build stuff for places where the consumers hang out!” —  Managing Director at General Catalyst

Hence chatbots are truly a niche market and we can expect to see growth in their development in the near future.

References:

  1.  Schlicht, M. (2016) The Complete Beginner's Guide to Chatbots [online] Available from: https://chatbotsmagazine.com/the-complete-beginner-s-guide-to-chatbots-8280b7b906ca [Accessed on 20 November 2018]
  2. Kajabi (2018) 20 Examples of Facebook Messenger Chatbots to Inspire You in 2018 [online] Available from: https://blog.newkajabi.com/chatbot-examples [Accessed 20 November 2018]
  3. Rathinam,  P.(2018) AI 101: The Basics of Automation for Customer Support [online] Available from: http://customerthink.com/ai-101-the-basics-of-automation-for-customer-support/ [Accessed 20 November 2018]

Thursday, October 25, 2018

Simple Macro in Excel

As a growing software developer I've begun to contemplate what I can automate to make personal tasks easier and convenient for me. For instance, between my cousins I am in charge of an account we hold to save money for family funerals. I have an excel spreadsheet with everyone's details, 19 rows and 4 columns. I wanted to find a way to highlight a row when it's someone's birthday to display to anyone using the spreadsheet.

Excel macros came to mind and I got excited to figure them out. I remembered at my first job the senior developers used them quite often so I thought "Why not teach myself?"

Before you can use macros you have to enable the "Developer" ribbon in Excel. Go to File >> Options >> Customize Ribbon and select the Developer option in the list box on the right.

Go to your worksheet and select the Developer ribbon then select Macros on the left. In the pop-up, type the macro name, select "This Workbook" option then click the Create button. The Visual Basic Editor will open but before you add code to that module, go back to your worksheet.

Select Macros again and click the Options button. Enter the shortcut key combination that you want to fire your macro. Ctrl + Shift + something else will reduce the chances of overriding any predetermined shortcuts in excel. Add a description and click OK.

Now click the Edit button on the main macro pop-up and it will take you back to the editor. Below is some code I wrote for my birthday macro. The code has to be in Visual Basic for Applications(VBA).


















The code first loops through the birth date column to remove any highlights. Then it loops again to find the day and month equal to the current day and month to highlight the row of the person whose birthday it is. If there are no birthdays a message box pops up.

This was a simple and fun macro to do on excel for the first time. They can get complex and you can automate almost any repetitive task you find yourself doing on excel.

UPDATE: I've improved the macro to show upcoming birthdays as well by highlighting the rows        in a different color.

Wednesday, October 10, 2018

The Importance of Unit Testing

One of the qualities of a good software developer is high attention to detail but nevertheless, errors can escape even the very best of developers. That is why testing and debugging is a huge part of the Software Development Life Cycle (SDLC). Software testing even has its own field of specialization; some organizations hire testers who are specialized in testing software, instead of assigning the responsibility to software developers. However, every software developer needs to know how to test their own code to produce quality deliverables.

Four Levels of Software Testing

The "Software Testing Fundamentals" website explains how there are four levels of testing in the SDLC namely: unit testing, integration testing, system testing and acceptance testing.

In unit testing, individual components of a software application are tested to validate that each component performs as designed.

In integration testing, individual components are combined and tested as a group to expose faults in how they interact with each other.

In system testing, the complete, integrated system is tested to determine if it meets specified requirements.

In acceptance testing, the system is tested to evaluate its compliance with business requirements and determine whether it's acceptable for delivery.

Unit Testing

The website also describes unit testing in detail. A unit/component is the smallest, testable part of a software application like a program, function, procedure or method. These units are tested using a software testing method called the "white box testing method", in which the internal structure of the item being tested is known to the tester. Unit testing is often performed by software developers themselves. Testing is based on an analysis of the internal structure of the component or system.

Some of the benefits of unit testing according to Ekaterina Novoseltseva (2017) is that it improves the quality of code, bugs are found at an early stage and it helps in maintaining and changing the code.

An Example of a Unit Test

Below is a method that truncates a string:

public static class StringExtender
    {
        public static string Truncate(this string source, int length)
        {
            //If source is null, return null.
            if (source.Length > length)
            {
                source = source.Substring(0, length);
            }
            return source;
        }
    }

The following code is a unit test built with MSTest on Visual Studio 2017:

    [TestClass()]
    public class StringExtenderTests
    {
        [TestMethod()]
        public void TruncateTest()
        {
            //arrange
            string source = "Original Source";
            int length = 0;
            string sourceTruncated = string.Empty;

            //act
            sourceTruncated = source.Truncate(length);

            //assert
            Assert.AreNotEqual(source, sourceTruncated);
        }
    }

The code that is added in the test method tests whether the original string has been modified to indicate that the truncate method has been implemented. When you run the test you will see whether the test failed or was successful. When the test passes it means the truncate method was executed successfully.

Interview with Lulu Ndhlovu

Lulu is a software developer with 4 years of experience working mainly with web applications. It was a delight interviewing her to gain insight into the importance of unit testing.

Q: Where did you first learn about unit testing?

A: In my first job at Boxfusion

Q: How often do you practice unit testing?

A: Not often I only did it once.

Q: How has it impacted your performance and quality of work?

A: It was very convenient because we were doing testing with Paypal integration so that's something important you need to make sure is working. We tested the methods that were necessary that needed to call the services for Paypal.

Q: Do you recommend unit testing to all developers and organizations?

A: Yeah. If you have the time in your project.

In conclusion, unit testing is the best way to ensure that components of your software application work individually. Every developer should acquire the skill especially for projects that cannot afford to have minimum security.

References:

  1. Software Testing Fundamentals (n.d.) Software Testing Levels [online] Available from: http://softwaretestingfundamentals.com/software-testing-levels/ [Accessed on 10 October 2018]
  2. Software Testing Fundamentals (n.d.) Unit Testing [online] Available from: http://softwaretestingfundamentals.com/unit-testing/ [Accessed on 10 October 2018]
  3. Software Testing Fundamentals (n.d.) Unit Testing [online] Available from: http://softwaretestingfundamentals.com/white-box-testing/ [Accessed on 10 October 2018]
  4. Novoseltseva, E. (2017) Top 8 Benefits of Unit Testing [online] Available from: https://apiumhub.com/tech-blog-barcelona/top-benefits-of-unit-testing/ [Accessed on 10 October 2018]

Saturday, August 18, 2018

Firebird SQL

Here's where we see the beauty of open source software. "Open source software", according to Opensource.com, means that the software's source code is freely accessible and can be inspected, modified and enhanced by any programmer, plus it's freely shared so anyone can use it for free without worrying about license fees.

Firebird SQL is a relational database management system much like the Microsoft owned SQL Server, except it's open source. Yay! Proprietary software is opposite to open source software in that the creators have exclusive ownership of the source code and it's not free.

Firebirdsql.org lists all the features of Firebird SQL which are compatible with the ANSI SQL standard which means you don't have to learn another standard other than SQL (Structured Query Language), which the WhoIsHostingThis website describes as the standard language for Database Administrators; you can continue using your SQL skills with Firebird. The server-side scripting however, is different from Microsoft SQL Server's Transact SQL as portrayed by the DB-Engines website. You will have to learn PostgreSQL which is not that much different so can be easily learned especially if you know Transact SQL.

This means a great deal for developers and developers in training and many organizations in that by using Firebird SQL they get the same benefits of SQL Server for free and can use it on a number of hardware and software platforms whereas Microsoft SQL Server supports only the Windows operating system and Linux as of SQL Server 2017.

References:


  1. Opensource (n.d.) What is Open Source? [online] Available from: https://opensource.com/resources/what-open-source [Accessed 18 July 2018]
  2. Firebirdsql (n.d.) Features [online] Available from: https://www.firebirdsql.org/en/features/ [Accessed 18 July 2018]
  3. WhoIsHostingThis [n.d.) ANSI SQL Standards [online] Available from: https://www.whoishostingthis.com/resources/ansi-sql-standards/ [Accessed 18 July 2018]
  4. DB Engines (n.d.) Firebird vs Microsoft SQL Server [online] Available from: https://db-engines.com/en/system/Firebird%3BMicrosoft+SQL+Server [Accessed 18 July 2018]

Friday, July 6, 2018

A Dichotomy Between Agile and RAD Development

Developing software requires a methodology to produce a quality software product on time and within budget.

There are various methods within the Software Development Life Cycle (SDLC) to select from and each can be selected according to the project's needs. But many organizations these days employ one method for all their software projects.

On the Version One website agile is described as an iterative and incremental methodology where the software team iterates through a project, delivers software incrementally, and continually plans and tests the software application.

On the other hand, RAD (Rapid Application Development) is described as being based on rapid prototyping and iterative and incremental development without any specific planning involved, by Tutorials Point. 

A prototype is a working model that is functionally equivalent to a component of the product (Tutorials Point).

Below are the advantages and disadvantages of Agile and RAD development listed on Tutorials Point.

Agile
Advantages Disadvantages
Is a very realistic approach to software development. Not suitable for handling complex dependencies.
Promotes teamwork and cross training. More risk of sustainability, maintainability and extensibility.
Functionality can be developed rapidly and demonstrated. An overall plan, an agile leader and agile PM practice is a must without which it will not work.
Resource requirements are minimum. Strict delivery management dictates the scope, functionality to be delivered, and adjustments to meet the deadlines.
Suitable for fixed or changing requirements Depends heavily on customer interaction, so if customer is not clear, team can be driven in the wrong direction.
Delivers early partial working solutions. There is a very high individual dependency, since there is minimum documentation generated.
Good model for environments that change steadily. Transfer of technology to new team members may be quite challenging due to lack of documentation.
Minimal rules, documentation easily employed.
Enables concurrent development and delivery within an overall planned context.
Little or no planning required.
Easy to manage.
Gives flexibility to developers.

RAD
Advantages Disadvantages
Changing requirements can be accommodated. Dependency on technically strong team members for identifying business requirements.
Progress can be measured. Only system that can be modularized can be built using RAD.
Iteration time can be short with use of powerful RAD tools. Requires highly skilled developers/designers.
Productivity with fewer people in a short time. High dependency on modeling skills.
Reduced development time. Inapplicable to cheaper projects as cost of modeling and automated code generation is very high.
Increases reusability of components. Management complexity is more.
Quick initial reviews occur. Suitable for systems that are component based and scalable.
Encourages customer feedback. Requires user involvement throughout the life cycle.
Integration from very beginning solves a lot of integration issues. Suitable for project requiring shorter development times.

References:

Version One (n.d.) The Evolution of the Agile Software Methodology [online] Available at: https://www.versionone.com/agile-101/ [Accessed 6 July ]

Tutorials Point (n.d.) SDLC - Agile Model [online] Available at: https://www.tutorialspoint.com/sdlc/sdlc_agile_model.htm [Accessed 6 June]

Tutorials Point (n.d.) SDLC - RAD Model [online] Available at: https://www.tutorialspoint.com/sdlc/sdlc_rad_model.htm [Accessed 6 June]



Sunday, July 1, 2018

Simulation Software

Although many software organizations do not use software simulation in the life-cycle of software projects because it takes time, money and human resources, it is a good idea in that the project team can early predict the dynamic of the end product to know what elements will work and it is also good for showing the client how the system will work and look like, for their confidence.

iSpring Solutions describes software simulation as a model of your software that demonstrates its key functions and operations. 

As the economy is changing, a fast and flexible reaction to the market is required which is what Talumis explains on their website. To predict customer demands and future changes, software simulations are your best option.

Here are some of the uses for simulation software taken from anylogic.com:
  • Simulation modeling solves real-world problems safely and efficiently.
  • It provides an important method of analysis which is easily verified, communicated, and understood.
  • Across industries and disciplines, simulation modeling provides valuable solutions by giving clear insights into complex systems.
  • Simulation enables experimentation on a valid digital representation of a system.
  • Unlike physical modeling, such as making a scale copy of a building, simulation modeling is computer based and uses algorithms and equations.
  • Simulation software provides a dynamic environment for the analysis of computer models while they are running, including the possibility to view them in 2D or 3D.
  • Simulation in business is often utilized when conducting experiments when a real system is impossible or impractical, often because of cost or time.
References:

iSpring Solutions (n.d.) What is Software Simulation? [online] Available at: https://www.ispringsolutions.com/articles/what-is-software-simulation.html [Accessed 1 July 2018]

Talumis (n.d.) What is Simulation? [online] Available at: https://www.talumis.com/what-is-simulation/ [Accessed 1 July 2018]

Anylogic (n.d.) Why Use Simulation Modelling? [online] Available at: https://www.anylogic.com/use-of-simulation/ [Accessed 1 July 2018]

Thursday, June 28, 2018

Angular JS is Your Programming Framework

Angular JS is a rich, clean and high performing web application framework and is open source software.

It is used for dynamic websites to enable seamless navigation to create a better user experience in most popular browsers.

As for security, Angular JS does not pose a threat to an organization's IT infrastructure because its focus is exclusively on data representation.

https://www.awwwards.com/practical-uses-of-angularjs-create-a-single-page-application-spa-or-a-website-menu-in-an-instant.html

https://stackoverflow.com/questions/28017816/what-browsers-does-angularjs-work-with

http://blog.backand.com/angular-enterprise-dev/

Tuesday, June 12, 2018

What is Git?

Git is an open source, secure and flexible version control system which is popular and widely used by developers around the world.

When you are creating software projects, you have to consider a repository for your projects and version control systems are a way for you to save versions of your code to access anytime and also for multiple developers to work on the same project.

Follow this link to learn about Git and begin using it: https://www.atlassian.com/git/tutorials/what-is-git

Monday, December 11, 2017

Cryptocurrency

The internet has established a new economy through cryptocurrency. I found a good read about Cryptocurrency in the article, What Is Cryptocurrency: Everything You Need to Know [Ultimate Guide].

Many people are buying bitcoin to protect themselves from the devaluation of their national currency. However bitcoin is also best for dark markets. Bitcoin is here to stay because there is no policing over it by government.

Can we live on cryptocurrency? This seems to be the direction. As more markets transition to cryptocurrency the future of it looks bright. 




Thursday, June 22, 2017

CSS margins vs padding

I read an article about 2 months back about padding and margins in CSS which I did not understand completely previously but gained clarity through the article: https://www.sitepoint.com/set-css-margins-padding-cool-layout-tricks/

The padding of an element is the layer that begins from the outer edge of the content and ends at the inner edge of the border. And the margin begins from the outer edge of the border.

I've recently started creating my own website in php and knowledge of this was invaluable in developing the layout especially the menu.

It's good to know the difference between margins and padding as it saves alot of confusion when developing your front end. You will know immediately what is needed when adjusting the space between your elements or space between your content and border.

Saturday, March 25, 2017

Simple Program in Java that Reverses a String


So I decided to code a simple program today in Java because my laptop is down and I cannot access Visual Studio to program in C#, which is the language I'm used to.

The program reverses any string you input and displays it backwards.

I discovered something that Java doesn't have which C# does. C# treats a string as an array but Java doesn't. So in line 34, in C#, I could've typed "words[i] = str[count];". Which is syntactic sugar compared to Java. Yet C# is considered more complex than Java which you can read about in this link. Since I'm a novice in Java and have been groomed in C#, I guess I WOULD find C# must easier.

Below is my code. Please comment if you have an easier way to code this.




Friday, March 24, 2017

Software Developer Interviews

If there's one thing I've noticed about software developer interviews these days is that they are more challenging and unique with each company. You have to be at the top of your game; talented, intelligent and skillful, to get ahead of the competition and score the job you WANT.

Since looking for a job since October last year I've been to only 3 interviews. I nearly got the first one as I was flown all the way to Cape Town for the final stage of the interview. The assessment and interviews were technical and revolved around object-oriented programming and principles. This is my area of expertise and I felt confident progressing through the interview process so naturally until, boom! "Even though your background and skills are impressive, other candidates most closely matched the qualifications we are looking for".

Competition! Big businesses mean business!

I say that because in the past I've worked for two small software solutions companies. The interview for the first company I worked for was simple: Create a DVD store web app. I became the chosen one. Then in the second company I had to create an ER diagram for a simple database. I was the bestest. Where was the competition back then? In larger corporations, duh!

Since pursuing a bachelor's degree I've had bigger opportunities to work at companies many covet to work in. However, I've been struggling in my attempt at the interview processes.

The second assessment since job hunting did not test my programming skills and knowledge. It was a math aptitude test which we had to score 80% in. I got 55%. Math was never my forte. Today I wrote the third interview assessment from a different company which I would really like to work for. It tested my deductive and english skills and whether I can read charts and diagrams.

Although the questions were simple, there was a very short time to answer them. So in essence they were testing whether I could think quickly and respond correctly. Nightmare! I can't. I mean in one test I had to answer 49 questions in 12 minutes! Who does that?! But it did say not everyone completes all the questions. But they are still implying there are some who do! Again, who?! Must be some droid because they didn't test if I was a robot.

But from my theological studies, I have learned about the signature map of the soul which makes people unique. So some have singular intelligence and others don't. I can't compete with that. So most of us have to settle for the jobs we NEED. It's too bad the world honours those who are exceptional in their field for these are the ones who get rich. But I am content because my life is not about surviving in this world. My life is about covenant with God who enriches my soul adding quality to life.

Saturday, March 18, 2017

RESTful API


So last year I was involved in a project with a team consisting of 6 members from Pennsylvania State University and 3 members from Belgium Campus here in South Africa. We were developing an Unmanned Aerial Vehicle (UAV) from scratch which is basically a drone.

The American team consisted mostly of mechanical engineers and the South African team focussed on the software engineering aspect of the project and it was quite a bumpy ride. (I'm not so much a novice in the IT world but I've only begun to develop a keen interest in my career after 4 years of corporate experience and 3 years of studying for a bachelor's degree, that I decided to start a blog).

In our project, my other two teammates from the South African side were more knowledgeable and intelligent than I was when it came to software. So they were confident in developing an API to interface with the drone and the mobile and web apps we would develop.

Predictably, most of the workload fell on them while I struggled with Qt to run QGroundControl and also struggled with the installation of Android Studio because after developing a few screens for the mobile app, my team mates couldn't open the file and all my work went down the drain. Not to mention using bootstrap for the web template took me too long to perfect the website to a team mate's standard even though my sister assisted me.

I figured by starting this blog, I will be teaching myself something new frequently in the IT world and keep abreast of the latest technologies which is a requirement in this field.

So back to the video...

I found it very educational and the analogies used hit the mark. I liked the analogy of a restaurant wherein a waiter takes an order from the customer and fetches his/her food from the kitchen.

The customer is like a web app on the client side, the kitchen a server and the waitron an API. So basically an API is like a messenger between one piece of software and another, formatted to take specific instructions (orders) in a certain way and return data or a response (meal).

REST (Representational State Transfer) basically lets us use HTTP requests to format those messages sent through an API.

I'm currently applying for jobs now and many employers require from candidates knowledge of RESTful API's. I think this video is a good start to learn about them enough to show you have an understanding of what they are in an interview.

Now that I have the definition of a RESTful API under my belt I can "rest" assured that I will be able to define it in an interview.






How to Access the Metaverse

In February this year, Bernard Marr predicted that "in 2022, we'll see new, lighter, more portable VR devices, so instead of having...