Kyle Boehlen Blog Software Developer and Freetime Photographer Thu, 19 Oct 2017 05:04:23 +0000 en hourly 1 Kyle Boehlen Blog 32 32 Memories of a High School YouTube Channel Thu, 19 Oct 2017 05:04:23 +0000 Today a good friend brought my attention to some old videos we filmed back in High School and the memories rushed back.

The name of the channel came to use after a pretty funny incident. We were filming a scene for a little indie movie (unfortunately never finished, but a pretty entertaining trailer came of it) and we filmed a part where what we were trying to do is hitch hike, have a semi pass by without picking us up, and have the motor-home pull over to pick us up. Unfortunately, the semi decided to stop and give us a ride! After we had a laugh with the driver, we couldn’t replicate the scene the way we wanted so had to ditch it and head home. Although, we got a great name out of it, Accidental Hitchhiking Productions.

Looking back couldn’t believe that we made these all these videos with an iPad; filming and editing.  Some of them didn’t come out half bad for what we were using. Most of them were awful, but man were they fun to film.

One that didn’t turn out half bad at all was a video we did for a school project. Edited pretty smooth for something done in iMovie, and maybe it’s just me but still makes me laugh. Given our subject was ‘How to Rob a House’ the teacher that assigned the project didn’t find it all that funny. One of my biggest pet peeves about public education, why should a spoof on a subject that would be illegal if actually performed (we had absolute permission to use everything in the video) get in the way of a really good, creative production? It doesn’t always have to be “by the book” when we all learn differently?

It was a fun walk down memory lane 🙂

]]> 0
Why a Job in Technology Feels Like Parenthood Wed, 18 Oct 2017 17:23:23 +0000 I am the lone programmer for by current employer, and often I feel like a parent. Why?

For one, nobody will understand the work that goes on in the background. They ask for a program that will let the middle management put custom announcements on three daisy-chained TVs. So the database is built to store the entries, MySQL users added, session logins created for the managers, custom forms built, and it works perfectly. The response? “Cool, can you build a voice analytics tool for our call recordings now”? Nobody will understand the work that went into, the beautifully maintainable, documented, version controlled code that runs that ‘cool’ program.

My agents are my teenagers. I have experience to know how greatly a tool could help them, test it extensively, and release this gem saying “Here, isn’t this fantastic? This will help you so much!”. It sits. Nobody uses it, they said they wanted it, but nobody uses it. Why can’t they see how much this will help them? Why don’t they use this? Is this any different than the gripe of a parent who’s been in their kid’s shoes before?


So hey Mom and Dad, I see what you meant now; and those doing thankless jobs, whether it be technology or parenthood, you’re the real MVPs.


]]> 0
Why Cryptocurrency is the Future Wed, 09 Aug 2017 23:38:48 +0000 I’m sure you’ve heard of cryptocurrecy in the news, or on Facebook, even if you haven’t heard it called exactly that you’ve probably heard about one of the tokens such as Bitcoin or Etherum. For those of us that didn’t buy into Bitcoin right at the beginning we may not get uber rich off of it as an investment, so why should we care about it?

Let’s get the first thing on everybody’s mind out of the way first, how can this be worth so much if it’s just a virtual currency, it’s like using video game money right? Well step back a moment and think about the U.S. dollar, after we left the gold standard the U.S. dollar didn’t represent anything of “worth” anymore. It is just a bunch of paper, or numbers in a bank account, and the only reason it’s worth anything is because we have all agreed it is worth something and use it to tender trade. So yes, cryptocurrency can be a “real” currency globally respected for use in tendering trade. So if it is just a currency, what is the big deal and why is it so different from say the Euro or the USD?


What is truly exciting about cryptocurrency is not necessarily the token itself that is used, but the technology behind it. Tokens aren’t actually stored in any one central location, instead a blockchain stores all of the transactions between many nodes, or computers, in a decentralized network. If that sounded like Japanese let’s walk through it. If I send 5 Bitcoins to you, then that is recorded in blockchain which basically acts as a ledger of transactions. Those tokens are owned by your public key which you have control of, and the ledger reflects that transaction. So where is this ledger stored? Cryptocurrency runs on a public, decentralized, peer to peer network which means these amounts are not stored in any one place, but instead among many computers that people have offered up to use to edit and store this ledger. You may have heard of these people called ‘miners’. Why do they do this? Every time their computer calculates a hash, which lets a transaction take place and update the blockchain (ledger) they are rewarded in that cryptocurrency for their computers. Essentially paying them to use their computer as servers in this network. Since it is decentralized, one of these computers can be taken offline and the blockchain will still function.


So why should we trust cryptocurrency, don’t hacks happen all the time? Cryptocurrency is actually safer than say the USD for many reasons. It isn’t controlled by one governing body, which means it has to stick by a set of predetermined rules that can’t be changed. The U.S. Treasury for example, can print paper money on whim, but cryptocurrencies can not. Bitcoin will stop creating bitcoins after it reaches a predetermined cap, where Etherum will grow at a 8% inflation rate every year. Cryptocurrency is also smart, which means it can be programmed to act only in a certain way. For example if Bitcoin replaced food stamps it could be programmed to only allow it to be spent on food, and there would be no way to circumvent this. It could even be programmed to send any remaining balance left back to whomever it came from if not spent in an allotted amount of time. Etherum even supports joint accounts, where custom rules can be programmed in on the account. For example, say you, Jane, and I have a shared wallet. We could program in safeguards that allow it to only let money be spent from that wallet if 2 of the 3 parties agree. This drives compliance that can’t be circumvented. So what keeps people from just adding currency to their wallet or stealing currency from someone else’s wallet? Wallets consist of a public key and private key in the ledger encrypted in SHA256. The public key is used to send people coins and is public facing, but your transactions can only be added to ledger if it is signed by your private key, which is a huge random string that only you know. Cracking this private key would take billions of years, so unless you post your private key to Facebook this is much safer than using a bank of keeping cash in your real wallet.

The Future

So why would we switch to this system? Besides the fact that it is much more secure, it is much more efficient and this platform allows for massive growth. Rules can be coded into the chainblock, with If-Then logic, as well as ownership. For an example think about buying a car. A smart contract can be programmed to run on the blockchain that could say if you an alloted amount of tokens to a public address a car will be shipped to you, then the VIN could be stored in the blockchain with you as the owner, the car could then be sold again with ownership transferred automatically with no middle-man or need to register ownership of the vehicle. Another really cool platform being built on the Etherum blockchain is Decentraland. It actually spurred my research into cryptocurrency. Decentraland is a virtual reality project being built that will allow people to purchase parcels of virtual land that they can then program to do whatever they want. People can then explore this virtual world and see what you have put in your parcel of land. You could create whatever you want; rent out billboards for advertising, chat with people, create virtual poker rooms or a virtual movie theater live streaming videos you’re taking. It won’t be centralized and can never be taken down, or censored, and the rules can’t be change, nor can ownership be stolen from you.


Oh and of course, be sure to test out your wallet by shooting some ETH to 0xbb6c80fa90800602ae851400321935cbe359be6d 😉

]]> 3
ErlangC VBA Functions Sat, 22 Jul 2017 17:06:42 +0000 The ErlangC functions are built into every WFM system, but for those of us who are still doing many of our WFM calculations in Excel, calculating ErlangC functions such as FTE required is pretty much impossible.

I’ve provided here the most used WFM functions, in VBA, for anyone to use free of charge. If you do decide to edit it at least give me a shout out somewhere in your code 🙂

This text file contains the code for Factorial, Sigma, ErlangC, ServiceLevel, TrafficIntensity, and AgentsNeeded. Copy the text from the file, and past it in a new Module in your Excel VB Editor on your WFM spreadsheet (Alt+F11 -> Insert Module). You will then be able to use the functions in your Excel document. I will also post the code below at the end of the article for those who are just checking it out.

The main function used from this suite is the AgentsNeeded() function. Use it by interval and pass in your projected call volume, AHT, service level goal (as a decimal percentage), and service level time (how quickly you want your calls to be answered). If you have any questions on the other functions, feel free to contact me. If you would rather pass your reporting interval than change is statically, replace the first two lines of that function with the following:

Function AgentsNeeded(ByVal intCallVolume As Long, ByVal dblAHT As Double, ByVal dblServiceLevelGoal As Double, ByVal dblServiceLevelTime As Double, ByVal intReportingInterval) As Long

Const intReportingPeriod As Integer = intReportingInterval


If you found this useful, you may also be interested in the FifthSaturday() function.


‘Developed by Kyle Boehlen
‘At Ken Garff SCC
‘Last Updated 6/27/17 by Kyle Boehlen
‘Contains all of the erlang functions needed such as Sigma, Factorial, SigmaFactorialLoop, ErlangC, Service Level, Traffic Intensity, and agents needed.

Function Factorial(ByVal n As Double) As Double

‘Variable for answer
Dim dblAnswer As Double

‘Factorial function loop
dblAnswer = n
For i = n – 1 To 1 Step -1
dblAnswer = dblAnswer * i
Next i

‘Return answer
Factorial = dblAnswer

End Function

Function Sigma(ByVal n As Integer) As Integer

‘Declare variable to hold answer
Dim intAnswer As Integer

‘Sigma function loop
For i = 0 To n
intAnswer = intAnswer + i
Next i

‘Return answer
Sigma = intAnswer

End Function

Function SigmaFactorialLoop(ByVal dblTrafficIntensity As Double, ByVal intAgentsNeeded As Integer) As Double
‘Function is easier than using both sigma and factorial when calculating erlangc
‘Declare variables and variable for answer
Dim n, k, dblAnswer As Double

‘Declar counter
Dim i As Integer

‘Starting variable values
n = 1
dblAnswer = 0

For i = intAgentsNeeded To 0 Step -1
k = n * i / dblTrafficIntensity
dblAnswer = dblAnswer + k
n = k
Next i

‘Return answer
SigmaFactorialLoop = dblAnswer

End Function

Function ErlangC(ByVal intCallVolume As Integer, ByVal intReportingPeriod As Integer, ByVal dblAHT As Double, ByVal intAgentsNeeded As Integer) As Double

‘Declare variables needed and variable for answer
Dim dblAgentOccupancy, dblTrafficIntensity, dblAnswer As Double

‘Define variables needed to calculate
dblTrafficIntensity = TrafficIntensity(intCallVolume, intReportingPeriod, dblAHT)
dblAgentOccupancy = dblTrafficIntensity / intAgentsNeeded

‘Return ErlangC
dblAnswer = 1 / (1 + ((1 – dblAgentOccupancy) * SigmaFactorialLoop(dblTrafficIntensity, intAgentsNeeded)))

‘Makes sure ErlangC is between 0 and 1
If dblAnswer <= 0 Then
dblAnswer = 0
ElseIf dblAnswer >= 1 Then
dblAnswer = 1
End If

‘Return answer
ErlangC = dblAnswer

End Function

Function ServiceLevel(ByVal intCallVolume As Integer, ByVal intReportingPeriod As Integer, ByVal dblAHT As Double, ByVal dblServiceLevelTime As Double, ByVal intAgentsNeeded As Integer) As Double

‘Declare variables needed to calculate service level and variable for answer
Dim dblServiceLevel, dblTrafficIntensity, dblErlangC, e As Double

‘Calculate prerequisites
dblTrafficIntensity = TrafficIntensity(intCallVolume, intReportingPeriod, dblAHT)
dblErlangC = ErlangC(intCallVolume, intReportingPeriod, dblAHT, intAgentsNeeded)
e = Exp((intAgentsNeeded – dblTrafficIntensity) * dblServiceLevelTime / dblAHT * -1)

‘Calculate service level
dblServiceLevel = 1 – (dblErlangC * e)

‘Return answer
ServiceLevel = dblServiceLevel

End Function

Function TrafficIntensity(ByVal intCallVolume As Integer, ByVal intReportingPeriod As Integer, ByVal dblAHT As Double) As Double

‘Declare variable for traffic intensity
Dim dblTrafficIntensity As Double

‘Calculate traffic intensity
dblTrafficIntensity = (intCallVolume / (intReportingPeriod * 60)) * dblAHT

‘Return traffic intensity
TrafficIntensity = dblTrafficIntensity

End Function

Function AgentsNeeded(ByVal intCallVolume As Long, ByVal dblAHT As Double, ByVal dblServiceLevelGoal As Double, ByVal dblServiceLevelTime As Double) As Long

Const intReportingPeriod As Integer = 15 ‘Change this value (in minutes) if your reporting period changes from 15 minutes

‘Declare variables needed to calculate agents needed
Dim dblTrafficIntensity, dblServiceLevel As Double
Dim intAgentsNeeded As Integer

‘Calculate traffic intensity
dblTrafficIntensity = TrafficIntensity(intCallVolume, intReportingPeriod, dblAHT)

‘Start agents out as the integer of intensity and see if we already have enough agents
intAgentsNeeded = Int(dblTrafficIntensity)
dblServiceLevel = ServiceLevel(intCallVolume, intReportingPeriod, dblAHT, dblServiceLevelTime, intAgentsNeeded)

‘Looping until the service level is higher than the goal
Do Until dblServiceLevelGoal <= dblServiceLevel
intAgentsNeeded = intAgentsNeeded + 1

‘Make sure it returns at least one agent
If intAgentsNeeded <= 1 Then
intAgentsNeeded = 1
End If

‘Return agents needed
AgentsNeeded = intAgentsNeeded

End Function

]]> 4
WFM Fifth Saturday Function Fri, 16 Jun 2017 18:52:13 +0000 Here is a WFM function that can be integrated into Excel or another program to calculate which fifth Saturday of the year it is. This is extremely useful for those using tables to schedule fifth Saturdays when scheduling rotating Saturday shifts.

The function takes a date as an argument and returns which fifth Saturday of the year it is. It will return 0 (not null) if the date is not a fifth Saturday. You can download a program to show the function working here or a text doc of the public function here.







Public Function findFifthSaturday(datSaturday As Date)
Dim bolSaturday As Boolean = False
Dim bolFifth As Boolean = False
Dim intSaturdays As Integer = 0
Dim datLoopingDate As Date = DateSerial(datSaturday.Year, 1, 1)
Dim intDays As Integer
datSaturday = DateSerial(datSaturday.Year, datSaturday.Month, datSaturday.Day)
If Weekday(datSaturday) = 7 Then
bolSaturday = True
End If
If datSaturday.Day > 28 Then
bolFifth = True
End If
intDays = DateDiff(DateInterval.Day, datLoopingDate, datSaturday)
If bolSaturday = True And bolFifth = True Then
For i As Integer = 1 To intDays
If DatePart(DateInterval.Weekday, datLoopingDate) = 7 Then
intSaturdays += 1
End If
datLoopingDate = DateAdd(“d”, 1, datLoopingDate)
intSaturdays = (intSaturdays Mod 4) + 1
intSaturdays = 0
End If
Return intSaturdays
End Function


]]> 1
The Exit Game Thu, 15 Jun 2017 15:23:26 +0000 Here is a short little windows form applet created as a prank. On start up it will pick a random number between 1 and 4, depending on which number is chosen determines which of the 4 exit buttons work. The other 3 exit buttons will determine where the program is running from, and duplicate the process creating another instance of the applet with a different exit button functioning. The exit, minimize, and maximize buttons have been removed from the applet, and it does not show up in the taskbar. The only way to close it is killing the process itself, if somebody wants to integrate a watchdog into it message me and we’ll put it in. You can download the program here.

***UPDATE: Fork me on GitHub

]]> 0
Interest in Interests is Interesting Tue, 16 May 2017 21:46:00 +0000 How can we create a bond with our employees and co-workers when we only spend time in a professional environment where it seems the only topic to discuss is expense reports and what to bring to the 10AM meeting? Sit back for a moment and think of a hobby or interest that you could talk about for hours. Whether it be photography, skiing, sports, doesn’t matter; but your eyes light up when you think about it and everyone says you talk about it way too much. As much fun as it is to talk about your passion, having a truly interested listener is what makes it great.

When you run across that person that is as interested in underwater basket weaving as you are the conversation flows for hours. By the time you’ve discussed the optimal water temperature, weaving styles, and snorkel vs. scuba gear techniques, hours have passed. How does that help in the workplace? After all not everyone may be as interested in underwater basket weaving or Ted Snow literature as you. Theodore Roosevelt could possibly be the greatest example of being truly attentive of others interests. Whenever he knew a visitor was coming he would stay up the night before becoming well versed in their interests just to be able to intelligently talk to them about what they were interested in, not what he was interested in.

In this day and age, with access to unlimited amount of information on the World Wide Web, it isn’t hard to take a couple minutes and brush up on something our employees are interested in. Even if you don’t know anything about the topic you can ask questions and truly listen. Take a genuine interest in your employees and their interests!

]]> 0
HP Keyboard Legs Tue, 02 May 2017 22:29:15 +0000 Working in a call center we have a lot of keyboard legs that end up broken, we went through several versions to get one that prints properly and holds up to typing without breaking. You can download the .stl for printing here.

]]> 0
Just Listen Tue, 02 May 2017 20:50:03 +0000 “Most people do not listen with the intent to understand; they listen with the intent to reply”, could Stephen R. Covey have said it any better? You’ll find most people are this way, they aren’t really listening to what you’re saying, and they’re just waiting for their turn to talk again. If our goal is to create an environment that our employees look forward to coming to, having someone truly listen could make the difference.

Carnegie tells the story of a dinner party he attended. He was seated next to a botanist during dinner and struck up a conversation with him. He asked him a couple questions about what he did and the botanist went on all night talking of exotic plants, and interesting facts about all kinds of common vegetables. Carnegie hardly ever said a word. At the end of the night the botanist paid compliments about Carnegie to the host saying he was ‘most interesting’ and ‘an excellent conversationalist’. How could he have been a good conversationalist if he hardly said a word? Because people want to be listened to!

Last Saturday I was at the dealership having my oil changed and I happened to be seated next a man who was sketching in a grid lined notebook. I glanced at the drawing and noticed the architectural marks for a door and stairs. All I said to him was ‘Are you sketching a house?’ and it struck a conversation that went on for the next half an hour about his career as an architect, his crazy client stories, and the cabin he was designing for his property. I listened intently and when his car was done he asked my name, after I told him he let me know I was ‘very intelligent for my age’. How would he know? All he knew was my name, and that I knew a very small bit of architecture; but truly listening with the intent to understand gives people a feeling of importance that not many people give them.

There are countless stories of customers who have been in the wrong, or owed money, that are steadfast and immovable on their opinion of the situation until someone gives them the chance to just talk it out. Most often when they are heard out they come to the same conclusion and the issue is resolved. Why don’t we do this with our employees? This week take the time to listen to understand, not to reply, and hear people out. You may find they come to the same conclusion you were trying to tell them, and it will create a feeling of importance that makes people look forward to coming to work.

]]> 22
Tale of Two CEOs Fri, 14 Apr 2017 03:39:49 +0000 Lunch today was spent with some incredible people. A CEO and CIO of the 8th largest automotive group, CEO and Co-Owner of a software company, and yours truly. What a shame it would have been to spend this time with some intelligent, successful, and well versed managers and not take anything away. Continue reading and I’ll share this knowledge with you, if someone is forcing you to read this click here to entertain yourself and tell whomever is making you read that it was beautiful and inspiring article ;).

First takeaway was extremely very unexpected. If an employee makes a very expensive mistake odds are he will be condemned heavily, and a company wide policy will be hastily put in place to keep it from happening again. Now the employee is grudgingly fixing it, and there are many sour employees about the new policy. What is the alternative? Talk to the offending employee, employees will make mistakes no matter how many policies are in place, and don’t jump to criticism. They already know what they did wrong, and the beating they’re giving themselves is plenty of punishment. Ask them how they’re going to fix it, and let them. Respect will be earned, and trust me they’re not going to make that mistake again.

The second takeaway I can honestly say has never even crossed my mind, and it’s a massive paradigm shift. If you’re a manager, your employees don’t work for you, you work for them! (If the IRS is reading this, please give me a moment to explain before you audit me too hard). Now does this mean you should go to your employees and have them make all the decisions on the companies direction? Not quite. When the company’s vision has been decided and communicated, although, you should be asking your employees what you can do to help them reach that goal. Essentially working for them! When they come back with what they need, ask them what they will do to make that happen and what they need from you. If they’re not willing to put effort in, then unfortunately there is not much you can do. Skill can be taught, will can not. If the will is there, then work for them to reach that vision.

If nothing else, the salmon burger was fantastic.


]]> 0