When I was young, maybe 8-12 years old, one day a vision of my future came to me and it has never changed. I find this odd.
I lived in upper New York state at the time and absolutely hated everything about my life as many youngsters do at that age. I guess to keep from shooting up the place I invented in my mind a vision of a future for myself where I lived in Fort Lauderdale on the beach, with a red sports car and a blond wife. Beyond my parking lot was a beach and the ocean. I had absolutely no idea how I would acquire any of these things, but I distinctly recall my vision because it has never left me.
When I initially moved to Florida I could not afford to live on the beach but after my first divorce I rented an apartment on the ocean in Hallandale Florida. Though I was finally on the beach, it was not what I had envisioned for myself. Internally I knew this is not where I was to end up (whatever that means).
Around 2003 I thought I would retire to my home in DeLand Florida which I did but again, it just did not feel right. DeLand is 18 miles inland from Daytona Beach and though we looked at houses on the beach in Daytona, nothing we evaluated matched my vision. That and my wife's disdain for country living brought us to Pompano Beach Florida on A1A.
We have been here nearly 15 years now and I suspect this is where I will be when I decide to move on to the next stage of my life.
This picture was taken just outside my front door looking East with my red mustang in the foreground and the beach just beyond the condos across the street. I have had this vision in my mind for over 50 years now.
Friday, July 6, 2018
Monday, June 11, 2018
The Meaning of Life
I have always believed the meaning of life is a recursive definition.
The meaning of life is to discover the meaning of life.
I do not say this sarcastically but rather to point out that it is perhaps the case that we all come from and return to the same place, the same ONE, if you will, since energy is never destroyed but rather it is redistributed.
Yet it seems while we are one with the whole we are also individual in ways that transcend our physical being. Perhaps we are alive to learn to break through the screen of the senses, to experience while in a body the transcendent self we truly are.
To me, this has always seemed more likely than the belief that we are just the result of a series of random mutations. If not a series of random mutations, then are we evolving towards god (perfection) or devolving away from god (chaos), but in either case does it even have to be this way at all? Maybe its simply we are, as we always have been, and always will be.
It is entirely possible that the energy we use to produce thought is not required to be bound to the physical entity it inhabits. The fact that it is, is more a benefit than a burden (though many don't see life this way).
And so if we look at life in this way we can begin to see what is really important. It is not the material wealth we accumulate, the knowledge we acquire, the good deeds we think we have done. It is the net positive effect you have had on the whole. The validation that this was energy well spent so maybe in the future you may get a chance to pick your parents again.
But how do we accomplish this? How do we improve the whole from which we are borne? I have no fucking idea, but its a good question.
The meaning of life is to discover the meaning of life.
I do not say this sarcastically but rather to point out that it is perhaps the case that we all come from and return to the same place, the same ONE, if you will, since energy is never destroyed but rather it is redistributed.
Yet it seems while we are one with the whole we are also individual in ways that transcend our physical being. Perhaps we are alive to learn to break through the screen of the senses, to experience while in a body the transcendent self we truly are.
To me, this has always seemed more likely than the belief that we are just the result of a series of random mutations. If not a series of random mutations, then are we evolving towards god (perfection) or devolving away from god (chaos), but in either case does it even have to be this way at all? Maybe its simply we are, as we always have been, and always will be.
It is entirely possible that the energy we use to produce thought is not required to be bound to the physical entity it inhabits. The fact that it is, is more a benefit than a burden (though many don't see life this way).
And so if we look at life in this way we can begin to see what is really important. It is not the material wealth we accumulate, the knowledge we acquire, the good deeds we think we have done. It is the net positive effect you have had on the whole. The validation that this was energy well spent so maybe in the future you may get a chance to pick your parents again.
But how do we accomplish this? How do we improve the whole from which we are borne? I have no fucking idea, but its a good question.
Tuesday, May 15, 2018
Knowledge Weight
When I think of AI I do not think of things like making a robot run or a program that can beat a human at chess. While these are difficult enough I consider them more mechanical in nature.
My interest in AI has always been writing code that can emulate human thought. I do not believe we can ever write a program that thinks like a human because as a programmer I know a coder must understand the algorithm before he can program a computer to do it and to the best of my knowledge we still don't know the meaning of life so I don't know how we could write a program to live, but I digress.
Part of the reason it is so difficult to model human thought is because we really don't quite understand everything around us yet and so we are not really sure how we actually accomplish a lot of what goes into the act of thinking.
Just to be clear, in my opinion, humans think by manipulating concepts. In my world view everything is a concept. In fact our language, while conforming to various grammatical rules is typically spoken in idioms which seem to me to be a bit closer to the concept of a concept :-)
Now the problem with abstracting out knowledge stems in part from the issues we typically run into regarding reference. I have expounded on this in other writings in more detail, so just to summarize, a reference to a living human becomes a reference to a null object if the human is cremated. What should be left rather than a reference to a non existent human is a reference to a concept. Coupled with the concept of aliasing we can then deal with statements like "Samuel Clemmons was the writer known as Mark Twain" a bit easier.
But this alone still leaves us with issues like how do we even know that Samuel Clemmons actually existed? There is a belief among some that the combined works of William Shakepshere were not really an individual's writings but rather a collection of different individual's work over the years. In this way we can also deal with the concept of William Shakepshere, who in either case no longer walks among us.
Which brings us to the topic of this post which is 'just how sure are we of what we think we know'? Now the process by which we accumulate knowledge is a far deeper discussion than I can go into here though it is obviously related but for now we will focus only on the strength of the knowledge we have. The knowledge weight.
Consider how sure we are a person is alive when we believe to be in their presence. Let's call this 99%. We are almost positive (only because I don't believe in absolutes) the person before us is our uncle, for example. Now compare that with how sure we are we that person is alive five minutes after we just got off the phone with them versus someone we haven't spoken to in six years. So as we can see, there are varying weights we can give to knowledge based on various other factors.
By the way, another reason why I say 99% and never 100% is because the person before us could be an impostor. They could be someone who looks just like the person we think we know. We could be fooled. If we didn't interact with them, and perhaps just passed them on the street we could be less sure. So knowledge may have weight. But there are classes of knowledge so maybe it would be better to categorize knowledge and then add a weight to that.
For example, I think I know my friend Bob because when I am in his presence I can see, feel and hear him. I recognize him from a combination of attributes and mannerisms. I also think I know that someone named Ghengis Khan existed at some point in time. They are two different categories of knowledge; direct and indirect. Anything my father told me is indirect knowledge. Anything I have physically interacted with is of a different category and within these categories I can assign a weight.
Saturday, May 12, 2018
Neighbors
I live in a condo on the beach in Ft Lauderdale. People often come here to retire which is why sometimes this area is called 'God's waiting room'. When we first moved here around 15 years ago my wife and I were one of the younger couples in our building. Not so much anymore.
Death is omnipresent hanging over us like a cloud in the distance, never too far away. My wife and I have attended over 20 funerals in the roughly 14 years we have lived here. Many of those for neighbors who became close friends, which often happens when you share a common structure with 103 other families. In many ways condos are micro communities of non-related extended families. Most of us see each other far more than we do blood relatives and our close friends.
It is not easy to interact with friends when the specter of death looms over the relationship. Many people fear the often uncomfortable conversations that arise seemingly out of thin air and try to avoid engaging beyond the occasional salutation while passing in the hall or parking lot. In an attempt to improve my self worth I decided several years ago to try to address this fear head on. As a result I am currently engaged with two neighbors who are close to leaving the constraints of this encasement and advancing to the next level; Rudy and Bob.
Rudy is a 92 year old violin player who has worked for the Boston Pops, the Orlando Philharmonic and many other orchestras over his lifetime. He holds a Medal of Honor from the US Navy for his participation in the invasion of Normandy on D-Day and he plays his violin every Sunday to this day at his local church.
Rudy is fiercely independent going so far as to get a restraining order against his family who want to bring him back home to Louisiana to care for him in his declining years. He is a Lymphoma survivor and continues to drive his car though his license has been suspended for quite a while now. He is also planning on getting a hip replacement soon though from what I hear the doctors refused because of his advanced age. In his mind he has no expiration date.
Robert is a 48 year old former actor who had minor parts in films like 'the Thin Red Line'. He spent his formative years in Brooklyn NY and moved to California to pursue a movie career and threw himself into the LA party scene. He never really hit it big but he enjoyed the ride.
Robert lies in bed medicating himself to relieve the pain. He does not really know exactly what his condition is but he was told 2 years ago he has 6 months to live so in his assessment he is playing with house money and has accepted his fate. In his mind he is beyond his expiration date. He will most probably pass before Rudy and he is in far worse condition, not able to leave his bed anymore so perhaps this accounts for the differences in their approach to death. One waits, one defies.
In both cases I try to spend an hour or so each week visiting with them, or in Rudy's case lately, helping him keep from getting foreclosed on. We talk about current events but it seems at some point we shift to the past. We talk about where we came from, life's high and low points and ultimately, regrets. Fortunately, neither Robert nor Rudy have many. In both cases they did what they wanted to with their life. There is very little either would do differently had they the chance to do it over again. I hope I am so fortunate.
What I am learning is that it seems as we reach our final days we begin pushing family away. Perhaps it is the pride of independence or the desire that those closest to us don't see us in this condition, but for whatever reason, it seems it is easier to be with and ask for help from strangers than family or friends. I know from our discussions that being a burden on our loved ones is a real concern for both men and I can certainly relate to that.
Beyond the knowledge I've gained, like "Sean Penn is a pain to work with" or "Mantovani didn't pay shit" I have developed an understanding of how we approach our final days; mentally and often physically isolated.
There is a subtle distinction between self-fulfillment and self-enrichment with the latter carrying somewhat negative connotations, so I will use the former though I feel the latter.
In my search for self-fulfillment I have discovered that the role of neighbor can be more than metaphorical, rather it is a real value one can provide by just being there and listening and by listening we learn. We learn things we never would have learned had we not engaged in a caring manner with those around us who we see often but take for granted more. Our neighbors.
Thursday, March 15, 2018
Being Too Pythonic'y and Enterprise Level Coding and Code Personalities
I recently had to change a piece of code from this …
return [convert_thing(k,v) for k, v in get_things()]
To …
things = []
for k, v in get_things():
try:
thing = convert_thing(k,v)
things.append( thing )
except Exception as ex:
logger.error(ex)
return things
Why would I convert this beautiful pythonic'y piece of code to a crude almost straight C version? Because it turned out convert_thing() could raise an exception if it could not convert the thing and there is no pythonic'y way I know of to do this.
On a second note, it would be nice if we could overtly recognize the concept of code personality. When a larger system (or framework if you prefer) is constructed it is often the case that with some configuration modifications it can perform various related functions. A simple example would be if we built a program to convert and transfer a file and then used it to convert CSV files to JSON for one deployment and then used the same code (with configuration changes) to convert a file from XML to CSV for a second deployment. It would be nice if we could refer to the two different deployments by personality (xfer_hr versus xfer_money_orders) which would ultimately refer to the same piece of code.
You can always do this using simple configuration files (which could be something a personality pre-processor could do automatically) but it adds a level of complexity which is unnecessary if code had a way of universally expressing its personality. It is always a good idea to reduce the level of configuration nesting.
return [convert_thing(k,v) for k, v in get_things()]
To …
things = []
for k, v in get_things():
try:
thing = convert_thing(k,v)
things.append( thing )
except Exception as ex:
logger.error(ex)
return things
Why would I convert this beautiful pythonic'y piece of code to a crude almost straight C version? Because it turned out convert_thing() could raise an exception if it could not convert the thing and there is no pythonic'y way I know of to do this.
On a second note, it would be nice if we could overtly recognize the concept of code personality. When a larger system (or framework if you prefer) is constructed it is often the case that with some configuration modifications it can perform various related functions. A simple example would be if we built a program to convert and transfer a file and then used it to convert CSV files to JSON for one deployment and then used the same code (with configuration changes) to convert a file from XML to CSV for a second deployment. It would be nice if we could refer to the two different deployments by personality (xfer_hr versus xfer_money_orders) which would ultimately refer to the same piece of code.
You can always do this using simple configuration files (which could be something a personality pre-processor could do automatically) but it adds a level of complexity which is unnecessary if code had a way of universally expressing its personality. It is always a good idea to reduce the level of configuration nesting.
Monday, January 1, 2018
Firefox and OSX 10.8.5
For probably a multitude of reasons Mozilla has decided it no longer wants to work older versions of OSX. That sucks! I have an old MacBook Air that I use frequently and recently Firefox stopped working on Facebook and ESPN even though I had changed nothing. While Chrome seems to be working OK, I don't use it much and Safari works but who cares. I want my Firefox! So after a little digging I came upon this post which worked for me.
https://forums.macrumors.com/threads/best-browser-for-os-x-mountain-lion-in-2016.1985353/
The bottom line is - this is what I did and it ended up working for me.
1) Download the latest version of Firefox from the Mozilla site. It will complain and try to discourage you from downloading it but go ahead and download it anyway. This will download a .dmg file.
2) Open the .dmg file and drag it to your applications folder. In my case it had a big circle with an X through it but I dragged it over anyway. I am fearless.
3) If you now try to run it (again, in my case it said Firefox 3 with an ugly X through it) it will fail. This is because it wants a minimum OSX of 10.9. Boo! To fix this find where the new Firefox folder is (on my system it was /Applications NOT Applications!) Then inside that directory (typically called Firefox Bla.app where Bla in my case was space 3) you will see an Info.plist file. Open this with a text editor or if you have one, a plist editor (I prefer a command line type like VI since these don't do anything stupid, other editors sometimes try to convert the file or add an extension to it) and find the line that shows the minimum operating system version. In my case it was 10.9. Change this value to your OSX version. In my case this was 10.8.5.
4) Once you have done this, OSX will be the next obstacle. It will say things like file is corrupted move it to the trash, or other scary stuff. You can ignore this. The issue here is simply an OSX security setting. By default OSX doesn't like to run downloaded applications. To fix this click the Apple logo in the upper left to and select system preferences. Then select the security and privacy icon. Make sure you click on the lock on the lower left of this pop up dialog and enter your password. This allows you to alter the settings. It also makes the Advanced button clickable. Then click the Advanced button and from there click the General tab. Here you will see why you are having issues. Simply check the Allow Downloaded Applications checkbox and then close this dialog and click the lock again to once again lock your settings. Now OSX will allow you to run this application you just downloaded from the internet. Note that in certain cases it might actually have a checkbox for the Firefox application you just downloaded. If so, check that, otherwise it will just have a generic Applications Downloaded checkbox, but hopefully you get the point.
5) Now you should be able to use Launchpad or finder to start your new version of Firefox. Make sure you have quit any other versions of Firefox you might have had running. You can do this by right clicking the Firefox icon in the docker and selecting Quit.
6) Just to be safe here you should reboot your computer. All we have left to do now is modify one Firefox configuration parameter and we should be good to go. Once your computer has rebooted, again, make sure there are no Firefox icons showing in the dock. So if you are sure there are no other versions of Firefox running proceed to the next and final step.
7) Start the new version of Firefox we just installed (I typically use Launchpad). It will probably say it crashed. This is expected. In the address bar type about:config. This will bring up a scary warning page which we will click to accept the responsibility of altering a configuration setting. Now in the search box near the top of this page type in autostart. You should see several options listed. Find the one that says browser.tabs.remote.autostart.2 and change its value from true to false by simply clicking the value column.
Now you should close this page (maybe open it again to verify the change actually changed) and then shut down Firefox. Again, you do this by right clicking its icon in the dock and selecting Quit.
The next time you restart Firefox everything should be fine. A bit of a pain in the ass but not too difficult to accomplish.
Now keep in mind I have no idea what long term issues might happen but I followed these instructions and everything seems to be working fine for me. Facebook and ESPN once again work so that is all I really cared about. I suspect there might be some issues I run up against in the future and if that happens I will add a new post describing what I have found but for now everything seems to be working OK. It even retained all my settings, bookmarks, passwords, etc.
WooHoo!
https://forums.macrumors.com/threads/best-browser-for-os-x-mountain-lion-in-2016.1985353/
The bottom line is - this is what I did and it ended up working for me.
1) Download the latest version of Firefox from the Mozilla site. It will complain and try to discourage you from downloading it but go ahead and download it anyway. This will download a .dmg file.
2) Open the .dmg file and drag it to your applications folder. In my case it had a big circle with an X through it but I dragged it over anyway. I am fearless.
3) If you now try to run it (again, in my case it said Firefox 3 with an ugly X through it) it will fail. This is because it wants a minimum OSX of 10.9. Boo! To fix this find where the new Firefox folder is (on my system it was /Applications NOT Applications!) Then inside that directory (typically called Firefox Bla.app where Bla in my case was space 3) you will see an Info.plist file. Open this with a text editor or if you have one, a plist editor (I prefer a command line type like VI since these don't do anything stupid, other editors sometimes try to convert the file or add an extension to it) and find the line that shows the minimum operating system version. In my case it was 10.9. Change this value to your OSX version. In my case this was 10.8.5.
4) Once you have done this, OSX will be the next obstacle. It will say things like file is corrupted move it to the trash, or other scary stuff. You can ignore this. The issue here is simply an OSX security setting. By default OSX doesn't like to run downloaded applications. To fix this click the Apple logo in the upper left to and select system preferences. Then select the security and privacy icon. Make sure you click on the lock on the lower left of this pop up dialog and enter your password. This allows you to alter the settings. It also makes the Advanced button clickable. Then click the Advanced button and from there click the General tab. Here you will see why you are having issues. Simply check the Allow Downloaded Applications checkbox and then close this dialog and click the lock again to once again lock your settings. Now OSX will allow you to run this application you just downloaded from the internet. Note that in certain cases it might actually have a checkbox for the Firefox application you just downloaded. If so, check that, otherwise it will just have a generic Applications Downloaded checkbox, but hopefully you get the point.
5) Now you should be able to use Launchpad or finder to start your new version of Firefox. Make sure you have quit any other versions of Firefox you might have had running. You can do this by right clicking the Firefox icon in the docker and selecting Quit.
6) Just to be safe here you should reboot your computer. All we have left to do now is modify one Firefox configuration parameter and we should be good to go. Once your computer has rebooted, again, make sure there are no Firefox icons showing in the dock. So if you are sure there are no other versions of Firefox running proceed to the next and final step.
7) Start the new version of Firefox we just installed (I typically use Launchpad). It will probably say it crashed. This is expected. In the address bar type about:config. This will bring up a scary warning page which we will click to accept the responsibility of altering a configuration setting. Now in the search box near the top of this page type in autostart. You should see several options listed. Find the one that says browser.tabs.remote.autostart.2 and change its value from true to false by simply clicking the value column.
Now you should close this page (maybe open it again to verify the change actually changed) and then shut down Firefox. Again, you do this by right clicking its icon in the dock and selecting Quit.
The next time you restart Firefox everything should be fine. A bit of a pain in the ass but not too difficult to accomplish.
Now keep in mind I have no idea what long term issues might happen but I followed these instructions and everything seems to be working fine for me. Facebook and ESPN once again work so that is all I really cared about. I suspect there might be some issues I run up against in the future and if that happens I will add a new post describing what I have found but for now everything seems to be working OK. It even retained all my settings, bookmarks, passwords, etc.
WooHoo!
Wednesday, December 27, 2017
Managing the Lazy Pro
One of my first jobs in the early 1980s was at IBM in Boca Raton Florida. Our team was comprised of about 10 juniors/interns mainly from nearby Florida Atlantic University (FAU) and we worked primarily in industrial automation (robotic arms, CNC machines, etc). It was a rigid environment where sometimes it seemed the primary objective was to badge-in before 8AM and leave at 4:42PM on the button.
Our group was named 5J3 and we took our informal name from an IBM publication that we came across from the 1970s. Its title was "What To Do About The Lazy Pro" and so on all our login screens from then on you were presented with an ASCII art logo with the tag line "5J3, The Lazy Pros".
The article was interesting as well. It was the cover story for that month's run and had a photo of a young bespectacled fellow with a crew cut and pocket protector, examining an oscilloscope. He was the classic geek which was the predominate view of programmers back then. Though 'Human Resources' initially thought it would be the mathematicians and physicists who were best suited to learn this new science called 'programming', in reality it tended to be students from the arts and soft sciences (like psychology and philosophy) who migrated over.
The article took an almost algorithmic approach to the issue where it gradually worked its way down to the final solution; termination of the cancerous employee, though it did remind the reader that this was nothing new (it was a well understood problem in the manufacturing sector as well) and that there were already performance improvement programs in place for these sorts of things. As was often the case back then the approach was more negative management than motivational, with a goal of protecting the company from this unproductive resource being the primary objective. Almost like dealing with a faulty robotic arm.
The problem with this approach is that programming tends to be a more creative exercise then manufacturing (though as Kanban has proven this approach is inferior even within the manufacturing sector) and positive reinforcement can produce better results than negative management when dealing with creative individuals. In most cases the lazy pro isn't so much lazy as bored.
I had the good fortune to manage a team of superior quality Javascript programmers around 2010. It was a virtual office with programmers scattered across the globe. As is often the case, one of the owners was not a programmer and was what I like to refer to as your classic 'Marine Corp manager'; 'the beatings will continue until morale improves'. This individual would monitor the social media feeds of all employees and whenever, during business hours activity was detected I would get a call cajoling me to fix this problem.
In my mind this is where a manager earns their pay and can save the organization money. Management is not about controlling people but rather an attempt to get the most out of the resources at your disposal. This requires the manager to get the coder any resources they may need to get their job done more efficiently and to provide guidance when needed. Removing obstacles is a big part of the equation, but so is motivation. In fact many creative types (myself included) will work for less money on projects that are more interesting, or as I often hear "you couldn't pay me enough to do that".
Many will counter that motivation comes from within and there is certainly some truth to that but de-motivation is an external force and it is this we must be vigilant against. Putting an employee on notice is a de-motivating scare tactic that in my opinion is a short term solution to a long term problem. If you have hired correctly the employee is probably just bored. Boredom and burn-out are common concerns in the software community and addressing these head-on is typically the best way to deal with programmers.
For the sake of brevity I will not get into various motivational strategies available, however, it is imperative to avoid the death spiral. You are in or entering a death spiral when you are resource constrained and all projects seem to be behind schedule. This leaves little time for motivational strategies (like education, cross training, etc) and tends to de-motivate engineers. Proper planning should not only take into consideration execution estimates but also the intangibles like cross coverage of skill sets and motivational exercises. Creative resources liked to be challenged even when the job requirements might seem to offer none. Put succinctly, managers of creative resources need to be creative squared.
Subscribe to:
Posts (Atom)
