owenSoft.net - Articles http://owensoft.net/ Reviews, previews and more text en http://owensoft.net http://owensoft.net/favicon.png owenSoft.net http://owensoft.net/ http://owensoft.net/v4/item/2425/ Redefining Artificial Intelligence is the new hotness (Articles) http://owensoft.net/v4/item/2425/ <a href="http://owensoft.net/v4/item/2425/"><img src="http://owensoft.net/v4/photo/thumb/2518.jpg" /></a><p>The trend in A.I. 2017 seems to be a move to change the definition of AI rather than ACTUALLY making the AI we want. Instead of AI we are getting side quests. The A.I. game is hot now and everyone wants to be in on it. On one hand you have the common assumptions that AI will take our jobs, make our lives easy or ultimately destroy us all. And on the other hand you have the marketing and video tutorials which are primarily postulating to the lowest denominator. AI has left computers and gone into the &quot;cloud&quot;. The cloud a mysterious black box of proprietary software which no one understands but everyone seems to know all too well the instant virtues that this new cloud AI will provide. Having things in the cloud is especially useful for people who like to speculate/talk in <a rel='external' href='https://en.wikipedia.org/wiki/Presumption' title='presumptions'>presumptions</a>. </p><h4>The cloud as AI magic sauce</h4><p>In essence the cloud is just another computer somewhere in a data center. But common people will have you believe that it is some fantastic mysterious thing. In reality whatever you can do in the cloud can be done on any computer given enough time and sample data. Having cloud stuff is useful because its out of reach and therefore unverifiable until it happens. <span class="h"><em>Its not AI, its someone else&#039;s stolen data.</em></span> But of course no one has the time, especially the people praising the potential virtues of A.I. They would rather sit around watch science fiction movies and wait for Netflix, Google, Amazon or whichever big company to sell them A.I. If you &quot;talk about it enough and retweet it will become reality&quot; is the new-age-social-media version of building something in your garage. Social media has become the purview of professional talkers. Visibly large but shallow and without substance upon closer inspection. Not unlike clouds. </p><p>Most of these cloud services are actually data collection points that use big data to train software into the appearance of intelligence.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;What was &quot;Big Data&quot; in the past is now A.I, deep learning, neural nets - it depends on who is doing the branding. With enough data you could pretty much mimic anything and there is alot of data out there that is freely available or better yet you can fool people into giving it all to you by latching the collection system on to some other service on which they are addicted. Something I like to call a <a rel='external' href='/v4/item/2294/<br />' title='sharing black hole'>sharing black hole</a> - you put data in but nothing comes out. But data by itself is not really A.I. Alexa is not AI. Alexa is not even a sign of how far AI has come. Its a search engine.</p><h4>What AI used to be</h4><p>The base goal was to make A.I. that simulates human intelligence but that goal is still a pretty hard and steep hill to climb. Steep hills are what technology is all about. This philosophy is what keeps technology focused on its goal. If you ignore a thing like the Turing test and begin to dilute terms like &quot;Artificial Intelligence&quot; into meaning a mixture of &quot;heuristics&quot; or &quot;rules-based&quot; or &quot;Neural networks&quot;, &quot;deep learning&quot; or &quot;Pattern matching&quot;, BI or &quot;deep learning&quot; - you also devalue the end goal. Alexa and big data search is all software that we can already do. We just keep putting more and more computing power into doing the same things over and over and calling it by different names. Remember the Office clippy man? Some people today would call that AI as well.</p><p>The thirst for new and exciting advancements in technology is so high that pundits will say/write anything to make it more real. Almost as if like they can feel it on the tip of their tongues; next week, next month, next year, 10 years time this hot new thing will be common place like the air we breath! <span class="h"><em>The lower the hanging fruit - the more they talk about it and the better it tastes.</em></span></p><h4>Fake it until you make it</h4><p>Then again if you look at how technology is evolving in today&#039;s smartphone environment you are surrounded by smoke and mirrors. Smartphones are pretending to be full fledged computers while providing less functionality. Social media pretending to be &quot;real-time&quot; even though you are seeing a filtered view of everything that is actually happening. You have cached data all over the place pretending to be real-time. The lag in everything is getting greater and greater as we try to do more and more with limited bandwidth. All this while being totally invisible to a consumer base that is trained to not expect reliability from things that claim to be reliable. <span class="h"><em>Software is eating the world BUT only in situations where it is convenient.</em></span> Everything is getting hacked. Everything is amazing if you have no clue how any of it works.</p><p>The incessant need to feed the hype has given rise to a league of retweeters and likers who will say and twist anything to the point at which no one knows what they are talking about. At deeper inspection few things hold up. AI refrigerators, AI televisions, AI image stabilization, AI assistants are all deviations of the same thing. People criticizing it either have limited imaginations or will slow the train that is gonna bring us nice things, a virtual kick to someone&#039;s favorite puppy. </p><h4>Conclusion</h4><p>We might get the breakthrough tommorow or later tonight. But get good and stop making things up based on hype. If something is doing what it says its doing then that is good. But do not change the goal posts or redefine old concepts to match new toys simply to blow hot air under it in the hopes that it will float. The bullshit tide is high. Do it for the love, <a rel='external' href='https://www.youtube.com/watch?v=6Wq_K61Mh1A' title='not for the likes'>not for the likes</a>. Do not settle for less than you expect. Do some research. Elevate yourself from being a spectator. One needs to be passionate in life. Mediocrity is a waste of everyone&#039;s time. Go deep or go home.<br /></p> <p><strong>by owen</strong> <a href="http://owensoft.net/v4/item/2425/#comment">Post your comments on this article</a></p> Mon, 04 Dec 2017 22:26:20 -0600 http://owensoft.net/v4/item/2422/ Professional programmers write tests (Articles) http://owensoft.net/v4/item/2422/ <a href="http://owensoft.net/v4/item/2422/"><img src="http://owensoft.net/v4/photo/thumb/2507.jpg" /></a><p>People have been trying to push this meme for so long its ridiculous. It is almost like the time when these same people tried to postulate that OOP was the &quot;one true way&quot; to code but instead just kept changing the goal posts year after year until they just stopped talking about it all together. Side stepping whatever issues that arose. Now when the people who <a rel='external' href='https://martinfowler.com/bliki/SemanticDiffusion.html' title='ordain'>ordain</a> &quot;<a rel='external' href='https://martinfowler.com/tags/agile%20adoption.html' title='fashionable jargon'>fashionable jargon</a>&quot; realize that TDD is not rising to the front of the hype train fast enough they resort to chastising anyone one who is not in lock step with their opinions. This latest attempt is to associate the use of TDD with the entire software development as a profession. If (and that is a big &quot;IF&quot;) TDD can prove its worth then it will but do we need cheerleaders that preach it from hills and high chairs? But of course it can&#039;t. All I can say is that it seems like low hanging fruit. <span class="h"><em>Folks, if you&#039;re coding, and not writing tests, simply put, you&#039;re not a professional and you&#039;re not going as fast as you could be. Lawyers have other lawyers check over their stuff. Accountants have double entry bookkeeping.</em></span></p><p>In a world full of buggy, auto-updating software, embedded advertisements, and cloud services that become insecure the moment you start using them - the last thing we want is to shackle new developers with a false sense of security by telling them TDD will make them professional. No matter how many tests you have you will not be saved from badly written code, missed deadlines and total rebase over a weekend. We need new and better code, not new religions for writing old code.</p><p>People in the business of making memes and <a rel='external' href='https://en.wikipedia.org/wiki/Mantra' title='mantras'>mantras</a> are trying to by impose their workflow unto others in a kind of elitist push to make the world a better place. Next year it will be Elixir or CSS modules or GO or Bitcoin or some other made up metric for standardizing the programming workflow into some kind of cult. What really matters is the problems you solve and NOT the stack that you use to solve them. The devs that create more problems than they solve and write un-maintainable code will do so irregardless of stack, tests or build tool. Everyone is responsible for the code they write and TDD will not save you from that mess you have written. Of course it will make a nice bullet point on your marketing brief.</p><p><a rel='external' href='XML all over again'>XML all over again</a><br />Oh lets not forget XML. XML was suppose to make all the world&#039;s data interchangeable and editable by human beings in case they somehow got root access to your production environment. And on a whim decided to dick around in your shit and make changes to your hardcoded references. But then we took the XML thing too far and started to dump logic and all sorts of crap into it until it became a buggy unmaintainable ginormous mess. <span class="h"><em>That is what programmers do, we take things and push them to the limits until they break. What is life without choas?</em></span>. XML was everywhere and now its JSON, what will it be next?</p><p>Tests have been around forever, even before we had whole separate departments of people who would painstakingly test every piece, section by section just to ensure that everything worked as expected. Even today with the best tools existing-ever there are Android devs that still test on their code on target hardware because no matter what you do something in the operating system will end up causing the code to crash. This is a whole other problem of <a rel='external' href='https://en.wikipedia.org/wiki/Externality' title='externalities'>externalities</a>. </p><h4>How we deal with externalities</h4><p>Now we have modern browsers so no need to test in anything besides the latest chrome, no need for fallback, javascript all the way down. <span class="h"><em>Because if you are not using a modern browser you might as well be dead.</em></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Post modern <a rel='external' href='/v4/item/2332/' title='javascript babies'>javascript babies</a> are everywhere. Web dev programmers complain about one set of things while oblivious of anybody else in the programming field who have other concerns such as hardware, performance or compatibility. <span class="h"><em>Oh your browser is not modern enough to handle my fading buttons! You need to upgrade your operating system!</em></span> When the web devs are not being <a rel='external' href='https://en.wikipedia.org/wiki/Agile_software_development' title='Agile'>Agile</a> they are trying to destroy SQL databases because they are a pain to test and do not work well with <a rel='external' href='https://www.joelonsoftware.com/2000/08/09/the-joel-test-12-steps-to-better-code/' title='source control'>source control</a> and one click build scripts. Document stores were all the rage at one point. Whenever there is something that is incompatible with the build environment it must be destroyed or replaced with something 10x as complicated.</p><h4>Where is it all coming from</h4><p>If you write enough code and you wear you headphones at the disco you will begin to see patterns in programming; you have punch cards then assembly and then we kept making languages simpler and simpler until we started using multi-core processors because programming were so simple we had too much code and physics was not playing nice. Today we have software which is so large that you cannot even compile it on a regular computer. Imagine compiling 200 mb of source code! Code is so easy to write that we actually have too much of it and we are now thinking up ways to write more of it faster but what we fail to realize that some of these problems are caused by continuously focusing on the wrong things. When OOP was on the rise everyone said it would solve all our problems yet it only resulted in spaghetti code, then we tried to solve it with factories and MVCs, interfaces, the list goes on and on. Now we are trying to solve OOP with TDD. We have so much code now that we have no idea what to do with it, we open source it, give it a way but free people want to work on it.</p><p>So you have a tonne of code that is glued together by random people who have already left the company. what do you do? Write mock objects! Run the tests! Tests pass! <a rel='external' href='https://xkcd.com/1428/' title='Move fast break'>Move fast break</a> things!</p><p>I am not even going to mention game developers and low level micro-processor programmers. <span class="h"><em>I am loading a 10mb file into 5mb of RAM at runtime - how is TDD going to help me solve this problem? Answer: Its not going to solve anything.</em></span> They have no time to install CSS Modules so they can add 10 seconds to their build time. Their concerns are memory, input and output. These are the problems they are trying to solve. They are not interested in the struggles of millions of new programmers who have no idea how to build a crash-free rocket-ship or a flying car using Node.js after completing a 2 week online bootcamp. If you want to solve those issues then solve them separately.</p><h4>Conclusion</h4><p>It is all about context. Yes TDD is good for somethings. It would be nice to have an <a rel='external' href='https://en.wikipedia.org/wiki/Infinite_regress' title='infinite regress'>infinite regress</a> that you could solve instantly with the push of a button. Or maybe you have a large team of disparate people working remotely on the most bloated piece of crap software in existence and you have great tests. But please do not try to attach you workflow to wide and diverse industry of people who are simply trying to solve problems before they die. Only time will tell if TDD is a solution to anything besides the problem need to hire testing teams and spending hours looking for bugs. But at least make it solve some current problems instead of creating a separate maintenance nightmare for everyone.</p><p></p> <p><strong>by owen</strong> <a href="http://owensoft.net/v4/item/2422/#comment">Post your comments on this article</a></p> Wed, 29 Nov 2017 17:40:12 -0600 http://owensoft.net/v4/item/2406/ Big Data is the new Artificial Intelligence (Articles) http://owensoft.net/v4/item/2406/ <a href="http://owensoft.net/v4/item/2406/"><img src="http://owensoft.net/v4/photo/thumb/2449.jpg" /></a> <a href="http://owensoft.net/v4/item/2406/"><img src="http://owensoft.net/v4/photo/thumb/2450.jpg" /></a><p>AI is pretty much a buzzword at this point. All the angles that I have seen are from cloud computing companies that are using big data to train bots to do simple stuff. It seems more like &quot;search&quot; rather than &quot;Artificial Intelligence&quot; in its classic sense. Most of it is hype driven of course, which is the case of alot of stuff nowadays, some of it seems to be growing out of a need to re-brand &quot;Big data&quot; into something else that is more mystical than just saying &quot;hey, we have all this data that we got from the public for free! might as well do something with it! right?&quot;.</p><p>Usually that &quot;something&quot; involves selling it back to developers and companies as new aged AI search. All this is fine but calling it A.I. really seems to be a <a rel='external' href='https://en.wikipedia.org/wiki/Dumbing_down' title='dumbing down'>dumbing down</a> of the sector. I don&#039;t call a smartphone a computer though companies have been tryinh to sell them as such for several years now. Similarly I would not describe a &quot;cloud based personal assistant&quot; as Artificial Intelligence no matter how AMAZED I am at its ability to read my calendar entries and wake me up in the morning. Its just a search with a bunch of conditions.</p><p>Even <a rel='external' href='https://www.youtube.com/watch?v=aqdYbwY9vPU' title='self-driving'>self-driving</a> cars I would not consider as A.I. Sensors, logic and probably millions of lines of code. Of course a layman would say that the self driving cars are figuring out the road as they drive along. But are they really? I would love to see self driving cars hit the road in Jamaica and be able to handle our awful impatient drivers and cow like pedestrians! It is not going to happen any time soon. I image those care will have several gigabytes of data stored on board and require and always online data connection just to road out of the parking lot.</p><p>But anyway back to Big Data. If I am going to train my AI on a terabyte of data then of course it will be able to read a simple text string that you send to it. I could hitch up a simple AI just on the stuff I see in the <a rel='external' href='/news/' title='news'>news</a> but why would I want to? The whole training AI thing is pointless in my eyes because data is infinite and bandwidth is limited. <span class="h"><em>You can only teach a dog so many tricks.</em></span></p><p>Anything that you have to train with so much data is bound to get bottle-necked at some point with information overload which is one of the reasons why I do not by the hype behind the current trajectory of AI. Its pointless, almost like VR and 4k televisions. Why upgrade something that you still have not maxed out its potential? Movies are still 24 fps yet people want to stream 4k video. What is important? No one knows.</p><p>The market must move on, even if it involves wasting the time and money of a few thousand people. Eventually I hope we actually get some cool stuff out of it but right now chat bots and image processors are pointless distractions from building rocket ships and flying cars.</p><p>This article was mostly spawned by Taran&#039;s post on <a rel='external' href='https://knowprose.com/2017/03/08/the-coding-precarity/comment-page-1/#comment-76' title='The Coding Precarity'>The Coding Precarity</a>. Why replace programmers when you can just replace the whole language of computers? Programmers are low hanging fruit. Like banning cigarettes when obesity is what kills more people. It is time we move beyond Big Data tricks.<br /></p> <p><strong>by owen</strong> <a href="http://owensoft.net/v4/item/2406/#comment">Post your comments on this article</a></p> Mon, 06 Nov 2017 17:50:34 -0600 http://owensoft.net/v4/item/2401/ Getting Started in Programming 2017 edition (Articles) http://owensoft.net/v4/item/2401/ <a href="http://owensoft.net/v4/item/2401/"><img src="http://owensoft.net/v4/photo/thumb/2438.jpg" /></a> <a href="http://owensoft.net/v4/item/2401/"><img src="http://owensoft.net/v4/photo/thumb/2439.jpg" /></a> <a href="http://owensoft.net/v4/item/2401/"><img src="http://owensoft.net/v4/photo/thumb/2440.jpg" /></a><p>Focus, determination and maintaining scope is really all that you need. Oh and also time, lots and lots of time. As I wrote <a rel='external' href='/v4/item/349/' title='in 2005'>in 2005</a> programming is all about solving small problems until you can tackle the big ones. The difference in today&#039;s hype driven internet is that there is so much content and people selling <a rel='external' href='https://en.wikipedia.org/wiki/Snake_oil' title='snake oil'>snake oil</a> that the idea of solving problems gets lost in the noise as they try to profit off the increasing noob population on the internet. <span class="h"><em>hey come and learn this javscript framework.</em></span></p><h4>Lots of promise and tutorials</h4><p>The internet is a <a rel='external' href='/v4/item/2244/' title='tutorial machine'>tutorial machine</a>. &quot;Those who cannot do - teach&quot; is a common phrase that has been around forever. There are people that are in the business of making tutorials for ignorant newbies. Making tutorials is a very profitable <a rel='external' href='https://www.youtube.com/results?search_query=why+i+left' title='business'>business</a>. With the rise of internet access you have millions of people with time on their hands, nothing to do, hopes and dreams. Teaching might even be in your destiny if getting started in programming does not work out for you. It might not be the job you want but whatever job you get something will work out. Just be on the look out for the people that come with promises because a promise is a comfort to a fool and making promises about programming careers to fools might be their job. Do what you like, not what people tell you will pay you the most money. <span class="h"><em>There is no shame in admitting defeat - everyone cannot be a doctor.</em></span></p><p>Despite this influx of people, programming has not gotten any easier no matter what these tutorials might promise. It is not easier to become a doctor today than it was in 1920 - hard stuff is hard. Be prepared to spend lots of time watching these videos and signing up for boot camps. I would advise you to avoid spending money on online tutorials until you have exsauted the free options. Most code camps are &quot;bait and switch&quot;. If you are new to programming you need to focus on finding the simplest launch pad that you can find. To do list tutorials are nonsense, you need to go lower, like down to arrays.</p><h4>Be wary of Fishing nets</h4><p>I tell you that programming is hard because it is. I am not telling you this to discourage you from pursuing your dreams of being the next <a rel='external' href='https://knowprose.com/2017/08/10/done/' title='Steve Jobs'>Steve Jobs</a>. But I am empowering you with the knowledge that the road to success is littered with many, many dead bodies and people who gave up. I am not going butter you up saying that programming is <a rel='external' href='/v4/item/2323/' title='the future'>the future</a>, AI robots or VR is going to be a billion dollar industry once it takes off. I am not in that business. I am not trying to get you in line for the meat grinder. Others will encourage you to join a boot camp and &quot;see if you like it&quot;, toss you out into the great deep ocean so that they can get referral credit. </p><p>Truth is most people are unable to sit in front of computer for 6 hours, typing on a keyboard, hoping something comes out on the screen. Sometimes nothing comes out. But certainly the more time in front of the computer, the better you will get. The race is not for the <a rel='external' href='https://realityfragments.com/2017/05/30/moving-stones/' title='swift'>swift</a> but for those who spend the time to read the documentation and try out the demo samples. Not everyone likes reading and not everyone can program. This is a fact. Know this and you will not be disappointed. Programming is boring but perseverance is key.</p><h4>Start simple</h4><p>Find something simple and small to start out. Avoid falling into the rabbit hole of modern java script, APP or mobile game development. Programming is about focus and solving problems. Avoid the temptation of jumping into building an application for a startup company or building the next facebag. Android apps are hard, iphone apps are even harder. It is ok to have delusions of grandure but a part of keeping focus is having an achievable goal and more startups fail because they try to solve problems that are not simple to solve. Some problems are best avoided until you are good enough to tackle them. Coward man keep sound bones. Get good.</p><h4>Determination</h4><p>If you are a fickle person who cannot even read a single paragraph on a page in a book then you might lack the determination that is needed to fully take on the rigors of programming. This is a fact of life, almost like light speed. Despite having awesome &quot;google&quot; skills it is going to take more than google and plugins to get good or even decent at programming. You&#039;ll need to put in work. Tools will only take you to a point. There is no best programming language to learn.</p><h4>Do not get hung up on the details</h4><p>Modern web devs talk incessantly about what browser they are using or TDD or the lastest library they found on reddit. In the grand scope these things are just sugar. The only things that matter are the problems that you solve. Code generation, type safety, usability, UX, refactoring, polishing, internet of things - all of this is just sugar for people with bad teeth. Just focus on your conditions, varibles, loops and flow. <span class="h"><em>Avoid threading - it is a rabbit hole.</em></span> Stick to the basics and avoid people who talk about &quot;<a rel='external' href='https://www.youtube.com/watch?v=q8e1sSNsf44' title='modern'>modern</a>&quot; because they mean you no good.</p><h4>Make something anything</h4><p>Too many noobs spend too much time researching looking for the right stack of tools to the point where they never produce anything. They end up with a portfolio full of half assed prototypes because they become skidish, too confused and uncertain to start anything because they donot want to go down the wrong path. They never start because they fear they will finish the wrong thing. News flash: you are already on the wrong path - you should have become a doctor or a lawyer. Hush. </p><p>But since you are here you might as well start that little project that you were thinking about. Start something publish it online or somewhere so that other people can see it. Show it to your friends. Time is constantly moving and published work is the only work there is. Do not wait until you feel like you have something good enough to show because people never achieve perfection - its humanly impossible. Publish or die is a good motto to live by. Feedback especially negative is a good way to grow and learn. Social media is wasting creative your time. Avoid people who have no original opinions - they are also wasting your time.</p><h4>Avoid stuff with too many tools</h4><p>If something looks complicated and keeps wanting you to download tool X or Y just to setup or do a build then it might be a sign of a headache coming soon. The bigger the installation the higher the chance that an update will be twice as big. Be wary of platforms that are in the &quot;cloud&quot; or require you to be always internet connected so that they can feed you news or updates and such - THEY WILL NEVER LEAVE YOU ALONE! <span class="h"><em>Like a carrot on a stick.</em></span><br />Tooling is one of the quickest ways to lose control of your scope of development. Things will get quickly out of hand or deprecated. This is also another profitable career path; you do not have to write code at all - just write tools and plugins.</p><h4>Stick to the core</h4><p>If you have a hammer and a nail just stick with those and work with what you have. If you start downloading plugins and such you will become dependant on tooling and that is the last thing you want to do when starting out. If you need to store information use a CSV instead of XML because you will be stuck when you try other things. Plus XML sucks. Do not get complacent about the pace at which you are learning or the stuff that you can do. Remain focused at learning the basics and everything else will fall into place. You cannot do everything.</p><h4>Conclusion</h4><p>Not everyone can <a rel='external' href='/v4/item/1905/' title='learn programming'>learn programming</a> and even fewer people can get good at it. Just like how not everyone can become a doctor or a nurse. And software is not eating the world - actually software is only eating programmers. There are other careers and things you could be doing with your time if learning programming does not work out. So do not get confused in the echo chamber.</p><p>Whatever language you decide to pick up just run with it. Language 1, 2, 3 or whether you are interested in whether it be mobile, game development, application dev, web development, research, User Interfaces, design, art or whatever. It is easier if you know real people who are doing something similar things who can give you shortcuts to progression. There are no real shortcuts in life but at least having someone there can help you avoid the unnecessary nonsense. Ask questions, read, watch videos, buy a physical book, find the best way you learn but for heaven sakes do not join an online bootcamp. If you do not know anyone you are not looking hard enough. In the mean time you can pick up weird edge case stuff like <a href="http://red-lang.org/" rel='external'>red-lang.org/</a> - you might like it or you might not but that is the nature of software - knowing a little about alot makes everything clearer - especially when you are just testing the waters. </p><p>Focus (stick to something), determination (there will be struggles to over come) and maintaining scope (dont bite off more than you can handle, stick to simple stuff).</p><blockquote><p>&quot;The reality is that the true power is in building a playground that you would want to play in, and that has been taken from the individuals and small companies in tech - where one is forced to dream inside of someone else&#039;s framework.....There was a time when, faced with those things, we simply wrote our own libraries and kept them in our toolbox, but no more. Code re-use has created generations of people without an original thought in their head, destined to toil in someone else&#039;s field. The money isn&#039;t bad, if you can find the work, but it&#039;s still someone else&#039;s field - which means you&#039;re limited to what they will allow you to do.&quot;<br /> - Taran <a rel='external' href='https://www.linkedin.com/pulse/6-months-later-perspective-taran-rampersad' title='June 6, 2017'>June 6, 2017</a></p></blockquote><p><br /></p> <p><strong>by owen</strong> <a href="http://owensoft.net/v4/item/2401/#comment">Post your comments on this article</a></p> Wed, 25 Oct 2017 07:42:33 -0500 http://owensoft.net/v4/item/2396/ Using Tweeter in 2017 (Articles) http://owensoft.net/v4/item/2396/ <a href="http://owensoft.net/v4/item/2396/"><img src="http://owensoft.net/v4/photo/thumb/2407.jpg" alt="NewoSky" /></a><p>I have pretty much stopped using the gram and was lurking more on tweeter @newogame for my game programming <a rel='external' href='/v4/item/2395/' title='side project'>side project</a> because the gram essentially burnt me out with all the spam and bots. So I jumped back on twitter because it is more suited for that kind of project. Tweeter has not changed much.</p><p>I muted some words but everyone is hyping up one thing or another. Some are even stealth hyping. You will follow someone because they post awesome art and the next thing you know they are ranting about trump or climate change or a new streaming mini-series or something else that they hope will blow up big so they can say they watched it first. Everyone has to ride the wave of popular media. Constantly retweeting every thing they see. It all becomes a cluster fck of information. Information that I could live without seeing.</p><p>It might be unreasonable to expect people to focus on any one singular thing but it is compounded by tweeter encouraging everyone to follow more and more people to the point where people even forgot why they were following someone in the first place. If you follow a few people you get flooded with suggestions. If you follow alot you get too many likes, retweets and promotions. There is no middle ground. It reminds me of the explore page on the gram. Its just stuff and more stuff everywhere.</p><p>And now tweeter is also showing me stuff that other people like/heart and there is no way to turn that crap off. It is as if tweeter is purposely wasting my time to keep me scrolling down a never ending list (sorta like the gram). If you have seen one awesome video of a cat jumping on a wall - you have basically seen them all. After you see the first one, all you will see next are remixes of the same thing over and over and over again. <span class="h"><em>Everything is a remix.</em></span></p><p>How do people get anything done with such a continuous stream of nonsense? Waiting for the next awesome video cannot be the only reward for spending so much time staring at a tiny bright screen - damaging your eyes. Unless of course you are trying to be &quot;internet famous&quot;. And being internet famous is no walk in the part either because it requires even more time shouting in the void of a black hole while trying to think of ways to stand out and be special.</p><p>It is not all without merit. There are some special people on tweeter with some useful information to share. Most of it unfortunately is useful information stretched to its limits until everyone forgets what was actually useful about it in the first place. I remember seeing one useful tutorial on how to draw motion graphics and then it became 100 tutorials and then I just stopped caring about it all together. Just like TED talks - too much of one thing just makes everything less special. The main reason is that it went from being very specific to simply general-lowest-common-denominator bs. &quot;8 ways AI is going to change how your toaster works!&quot; In a bid to appeal to a wider audience everything became a tutorial for beginners by <a rel='external' href='/v4/item/2200/' title='future geeks'>future geeks</a>.</p><p>Oh and lets not forget about advertisements - THEY ARE EVERYWHERE! I think it has become the new normal that if you are not shilling for some organisation or company then you are clearly not doing anything of value on social media. Advertising is the future of work or something of the sort. <span class="h"><em>Advertise for a company if I could get a free car is the life goal of everyone on twitter.</em></span> 5 million retweets for a new car!</p><p>Nowadays I hop on and I look at the top few items and then I see if I have any mentions. Thats about it. Has it gotten better? I am not sure. Maybe next year.</p><p>As more regular people flood the internet it seems that the internet has no other choice but to put them to work in some way. I hope in the future we can generate electricity as people scroll down their feeds by putting it on a big wheel or something. Think of the possibilities!</p><p></p> <p><strong>by owen</strong> <a href="http://owensoft.net/v4/item/2396/#comment">Post your comments on this article</a></p> Wed, 11 Oct 2017 13:46:24 -0500 http://owensoft.net/v4/item/2395/ NewoSky Post-Mortem (programming) (Articles) http://owensoft.net/v4/item/2395/ <a href="http://owensoft.net/v4/item/2395/"><img src="http://owensoft.net/v4/photo/thumb/2403.jpg" /></a> <a href="http://owensoft.net/v4/item/2395/"><img src="http://owensoft.net/v4/photo/thumb/2404.jpg" /></a> <a href="http://owensoft.net/v4/item/2395/"><img src="http://owensoft.net/v4/photo/thumb/2405.jpg" /></a> <a href="http://owensoft.net/v4/item/2395/"><img src="http://owensoft.net/v4/photo/thumb/2406.jpg" /></a> <a href="http://owensoft.net/v4/item/2395/"><img src="http://owensoft.net/v4/photo/thumb/2466.jpg" /></a><p>Back in late 2015 I started working on a little side project that I was inspired to create after seeing the first trailers of No Man&#039;s Sky. I live on side projects - they basically keep me sane. After mulling it over a couple days it all seemed to make perfect sense; you have a galaxy, pick a star then a planet and procgen it all the way down to the ground! Having an idea of what you want and being able to actually complete it are 2 different things. Especially in the world of computer programming and by extension game development.</p><p>I compounded my own problems by choosing to build it on my favorite home-brew platform of choice; the Nintendo wii. There was no real reason for me to work on such old hardware sans for nostalgia sake and that &quot;modern life-living in the future is a money pit&quot;. Plus I love the little white box and I have had it since 2007 with games that are still gathering dust in my backlog. It could even be <a rel='external' href='https://en.wikipedia.org/wiki/Big-fish%E2%80%93little-pond_effect' title='big fish, little pond effect'>big fish, little pond effect</a>. Either way my mind was set on it and all I had to do was put thought to code.</p><p>So by 2016 the wii homebrew scene had already slowed to a crawl while the DS scene was still going strong for some odd reason. I could not understand it really. But I was coding away at my little project hoping to release something before NMS actually comes out so I could ride some of that hype train. Bushing died that February 2016 and I planned to dedicate the project to him for helping to make my little white box meet its true potentional - if I ever finished the programming. </p><p>I spent the rest of the year working on the project while the procedural generation hype train was in full swing. NMS eventually came out and was <a rel='external' href='/v4/item/2314/' title='polarizingly great'>polarizingly great</a> for what it did even though it could not possibly please everyone. I actually wished it never came out so we could look forward to it forever like children. Procgen is pretty hard and gamers take for granted that the lastest consoles today ( PS4/Xbox1 etc ) have upwards of 4 gigs of ram and are pretty much PCs stuck in a little box. These new consoles could literally just play video in the skybox the entire time without issue but who cares I stuck to my guns as one should when one is working on something difficult.</p><p>If I even looked at the wii at a wrong angle my frame rate would head south below 30 fps. Having a low poly count game and be running below 60 fps was simply unacceptable. I mean if Nintendo could create bueatiful masterpieces on the wii then I could at least create something? right? given enough time, energy and the right bits of C hackery. I tried to read and watch programming videos when I could, most of then all surrounding Unity Dev. Few of these tutorials really go the distance into the deep <a rel='external' href='/v4/item/2394/' title='procgen rabbit hole'>procgen rabbit hole</a>. But I soldiered on picking up little bits of information from <a rel='external' href='/v4/item/2394/' title='here and there'>here and there</a>. I could have released NewoSky sooner but as is the case with homebrew and programming, things are never done - there is always something else that you want to add or some basic feature that you SIMPLE MUST IMPLEMENT! 20 person pvp online multiplayer? Anyone?</p><p>Eitherway there is only so much time in a day and life has a way of kicking you in the balls. All I wanted to do was sit down and code until my head fell off. Luckily I am not easily discouraged and if some part of the code did not work it either ment that I was doing it wrong or there was a bug somewhere in there that I was not aware of. The fun thing about working with such limited hardware is that it forces you to find ways to be more efficient - to be better. I have to write the best code I can or the game would run like crap. Sometimes it would even run well with crap code and so one has to be really suspicious when things look too good to be true but at least when it did not work I knew it was something in the code that was the problem (as opposed to a os bug). All I had to do was figure out the way to make it work.</p><p>It is possible that if I had taken up Unity or Unreal engine I would have been able to achieve more in a shorter space of time but I doubt I would have learnt as much. I have even seen people achieve less with more resources. Homebrew development is less about how much you can do but what you do with the little resources you have available. I wish I could have added shadows into the game though. Shadows would have been cool af. I often look at the things that are being done on modern hardware using shaders but then I think to myself do I really want to spend 6 months learning another programming language? Only to then have to buy a video card, new monitor and a new computer? I think not!</p><p>The project slowed at bit at times and other times completely stopped as I worked on other projects that were more urgent. Since the <a href="http://www.wiibrew.org" rel='external'>wiibrew.org</a> scene is pretty quiet I could pop out and pop back in without having to rebuild my entire dev entirement or download updates. These breaks from development often yeilded good results in allowing me to clear my head space and attack problems from different angles.</p><p>By mid 2017 I had re-written the landscape code 5 times. Being the only person working a project in which you have total directional control it is easy to get distracted, go off rails and basically dick around on old code. Often times I find myself testing out stuff that I had already confirmed would not work at all. But alas the search for that magic piece of code will never end. Went from realtime rendering to several layers of caching, array lists and grids everywhere. Sooo many grids; NewoSky is a measure of doing the most with as little information as you can. Caves? heck no. I mean I could do caves but would it be worth the effort? At some point you have to understand your limits and the framework in which you are building a a huge ship. If you fail to understand your own space you will certainly run in onto land. </p><p>I did not achieve everything I set out to. I still have not fixed the normals on the landscape. Nor do I have any form of caves. I could put in collision detection but I skipped it because it would only encourage me to add in enemies and explosions that interacted with the environment.</p><p>In the end I worked on the features that seemed the most feasible and left/skipped the things that were too difficult for me to achieve ( proper terrain normals ). Maybe next year I will figure these things out but you never know. Somethings are just not achievable, we do what we can in the time we have. I hope you all enjoy this little thing that I spent a whole lot of time working on. <a rel='external' href='https://hackmii.com/ben' title='RIP Bushing'>RIP Bushing</a>.</p> <p><strong>by owen</strong> <a href="http://owensoft.net/v4/item/2395/#comment">Post your comments on this article</a></p> Fri, 29 Sep 2017 16:32:37 -0500 http://owensoft.net/v4/item/2394/ Procedural Generation (programming) (Articles) http://owensoft.net/v4/item/2394/ <a href="http://owensoft.net/v4/item/2394/"><img src="http://owensoft.net/v4/photo/thumb/2398.jpg" /></a> <a href="http://owensoft.net/v4/item/2394/"><img src="http://owensoft.net/v4/photo/thumb/2399.jpg" /></a> <a href="http://owensoft.net/v4/item/2394/"><img src="http://owensoft.net/v4/photo/thumb/2400.jpg" /></a> <a href="http://owensoft.net/v4/item/2394/"><img src="http://owensoft.net/v4/photo/thumb/2401.jpg" /></a> <a href="http://owensoft.net/v4/item/2394/"><img src="http://owensoft.net/v4/photo/thumb/2402.jpg" /></a><p>Despite what online video tutorials might lead you to believe procedural generation (procgen) in video games is hard, like really hard. You might as well skip height maps and go right to the hard stuff. The hard stuff will sneak up on you quickly like enemies popping into view in a n64 game. Coincidentally the hard stuff is the same point at which most tutorials reach 10 thousand lines of code and stuck in a corner to linger forever. I am not going to go down that path, all I am going to do is outline what I have learnt over the little time I spent working on my own little procgen side project.</p><h4>Randomness and Chaos</h4><p>People seem to think of procedural generation (pg) as generating random points for use in a rendering graphics or content but soon they will discover that it is not about the randomness at all. Randomness is just a sideeffect that often leads to chaos when you are working with human beings. What you really need is constrained &quot;predictability&quot;. Randomness is the least of your problems. Predictability is why so many tutorials use <a rel='external' href='https://en.wikipedia.org/wiki/Simplex_noise' title='simplex/perlin noise'>simplex/perlin noise</a>. Simplex noise gives predictable results in a set range between -1..to..1 which you can use to produce predictable procedural content that only &quot;seems&quot; random. Randomness is NOT what you want. The goal is to have controlled space that appears random - not chaos.</p><h4>Avoid simulating the real world</h4><p>Some will attempt to create something like what was done in No Man&#039;s Sky or Minecraft but fail to understand that the real world does not work like a computer. No matter how much code you write or fast the code is you cannot simulate everything in the real world. And even if you try, it is going to take you a really, really, really long time just to get the basic stuff in place. You are gonna have to decide what is important to simulate and what you will simply leave to the imagination. Game consoles and computers nowadays have upwards of 4 gigs of RAM and they still have to resort to trickery and shaders. It may seems like your favorite game is a true masterpiece but it is mostly smoke and mirrors once you figure out how it all works. This figuring out takes time - many dead bodies liter the highway.</p><h4>Picking a noise function</h4><p>A good noise function needs to be fast and is often complicated to code so it is best to stick with simplex noise or something similar. Tutorials often state that you can use any noise function you want but you want to avoid functions that are &quot;random&quot; as mentioned earlier - you want to know what result you are going to get. And you want to be able to repeat previous results so that you can test different outcomes in different scenarios.</p><h4>Draw distance, view space, LODs, cache and culling</h4><p>You will be tempted to fill your screen with tonnes of flowers and trees and such early on until you realize that your computer cannot keep up with all the information. The world is full of information, more information that you can imagine. Most pretty video games that you see being published today are using all sorts of trickery to render the information you see. It is not only down to the skill of the program but Art, RAM and disk read speed. The level of detail (LOD) of the environment has alot to do with it as well. Some games have asset pipelines that auto-generate thousands of models just for one scene and then stream them in seamlessly. Other games store <a rel='external' href='https://www.youtube.com/watch?v=BiQCz2NjPR8' title='entire static sections'>entire static sections</a> of the game world on disk or in memory during loading instead of rendering it all in real time. You will have to sacrifice something depending on your situation. If you cannot pay 10,000 artists then you might want to keep your scope down to something that you can mange.</p><h4>Distractions are everywhere</h4><p>Feature/Scope creep is worse in procedural generation. Everybody wants everything as the case was in No Man&#039;s Sky. You think you can program every leaf on a plant blowing in the wind on a moon of Saturn but how much time do you have in the day? Not allot. And you will see someone using a cool shader in Unity and you will be like: &quot;I want that in my code too!&quot;. Avoid the temptation. That stuff will only lead you down a road of pain and frustration. That fancy shader is probably using up 90% of the available CPU/GPU cycles - leaving nothing left for any kind of game play. It took me almost a year to get wave animations on bodies of water. Mostly my own ignorance because it just came to me one night but the key lesson is being able to notice when a &quot;nice-to-have&quot; feature is wasting you productive time and being able to leave it alone and move on to something more important.</p><h4>Keeping track of everything</h4><p>It is good to be generating lots of stuff but you will come to a point where you need to know where something is or was and some kind of key/id to identify it. There might be objects that are longer needed such as dead enemies and trees that you have already cut down. The solution that I have is to keep track/save the xyz point at which I generated the object. In my system I try to ensure that only one thing is generated at every point in the world. So even if the object has moved to another spot I can check the object listing to see if something with an matching origin point has already been generated or if I need to generate it for the first time. This only applies to things that can be killed or have AI movement. Most things would otherwise not need to be tracked.</p><h4>When the going gets tough</h4><p>While writing your #procgen thing one of the first challenges you will come up against is how to place stuff in the world without them overlapping against each other, floating trees, planets colliding and caves - Oh god caves! This is what alot of online tutorials fail to tell you: if you start by using hieght maps you are going run into a wall where you cannot do caves and you end up putting too much data into cache. Loops, in loops, in loops then you hit the point when you try to solve it with threading - anytime you see some one start using threading you know that it is going to be a roller coaster down the rabbit hole. Avoid threading unless it is the last thing you implement - its a rabbit hole - it will not help. If the code is too slow to run on the main thread at such an early stage then you are doing too much. Stop - hammer time.</p><h4>Conclusion</h4><p>In the end procgen is not about replay-ability or creating lots of content or infinite worlds or pretty graphics or whatever people are hyping nowadays. Procgen is (at its root) about maintaining state of a complex system. You can generate a billion pieces of content but if you cannot put them together in a cohesive system then you are basically just generating garbage at which point you might as well hand make the level and be done with it. You can only play a game that you finish making. Expect to spend a great deal of time figuring out how to keep the state of all the stuff you are generating. Anyway good luck and happy proc-gen-ing!</p><h4>Further reading</h4><p><a rel='external' href='https://www.youtube.com/watch?v=h-kifCYToAU' title='A Behind-The-Scenes Tour Of No Man&#039;s Sky&#039;s Technology'>A Behind-The-Scenes Tour Of No Man&#039;s Sky&#039;s Technology</a></p><p><a rel='external' href='https://www.youtube.com/watch?v=twTegheoF1E' title='How Grids and Patterns Work Together'>How Grids and Patterns Work Together</a> by Eric Broug</p><p><a rel='external' href='https://www.youtube.com/watch?v=sCRzxEEcO2Y' title='Continuous World Generation in No Man&#039;s Sky'>Continuous World Generation in No Man&#039;s Sky</a></p><p><a rel='external' href='https://www.youtube.com/watch?v=HhyyUiYQolA' title='Reset Button: The Biggest Game Ever'>Reset Button: The Biggest Game Ever</a></p><p><a rel='external' href='https://www.youtube.com/watch?v=O9b-rtrcPEA' title='Math Encounters -- Beyond Animation'>Math Encounters -- Beyond Animation</a> Ken Perlin (Presentation)</p><p><a rel='external' href='http://alanluo.com/procgen/midterm.html' title='Generating Art with Code'>Generating Art with Code</a></p><p><a rel='external' href='https://www.youtube.com/watch?v=WumyfLEa6bU' title='Practical Procedural Generation for Everyone'>Practical Procedural Generation for Everyone</a> May 2017</p><p><a rel='external' href='http://www.redblobgames.com/maps/terrain-from-noise/' title='Making maps with noise functions'>Making maps with noise functions</a> from Red Blob Games<br /></p> <p><strong>by owen</strong> <a href="http://owensoft.net/v4/item/2394/#comment">Post your comments on this article</a></p> Tue, 12 Sep 2017 18:49:53 -0500 http://owensoft.net/v4/item/2389/ Writing new code so that you can write old code faster (programming) (Articles) http://owensoft.net/v4/item/2389/ <a href="http://owensoft.net/v4/item/2389/"><img src="http://owensoft.net/v4/photo/thumb/2384.jpg" /></a><p>Recently I came up a situation while programming which required me to choose between passing a reference pointer to a structure or building a loop. Usually I would avoid pointer referencing but in this case I found that deferring the loop structure into another function ment that I could centralize all my loops into one place - speeding up my dev cycle.</p><h4>Its not all wine and roses</h4><p>This of course ment that I have to pass pointers to a shared structure which is a whole other can of worms involving putting things in a bucket and making sure that the bucket did not overflow or become randomly de-referenced at runtime.</p><p>But when I look at it I would could escape one headache for a lesser headache and I would come out with a net positive in the end.</p><p>Let me explain a little more. I originally had this;</p><pre><code> tree_list = get_my_stuff( &#039;tree&#039;, x, y, z ); foreach( tree_list as item ) { draw_tree(item); } </code></pre><p>This worked fine until the grouping of the list got more complicated;</p><pre><code> tree_list = get_my_stuff( &#039;tree&#039;, x, y, z ); foreach( tree_list as item ) { draw_tree(item); } grass_list = get_my_stuff( &#039;grass&#039;, x, y, z ); foreach( grass_list as item ) { draw_grass(item); } </code></pre><p>I needed more complicated things that did different tests and I need to do frustrum culling and many different draw_XXXX() functions needed to be created and called in different places. I certainly could not continue down the road as I was heading. In programming you always have to be looking for a better faster way of doing tasks and even if the code you are writing actually works you have to be able to balance you present success with future headaches;</p><pre><code> tree_list = get_my_stuff( &#039;tree&#039;, x, y, z ); foreach( tree_list as item ) draw_tree(item);</p><p>grass_list = get_my_stuff( &#039;grass&#039;, x, y, z ); foreach( grass_list as item ) draw_grass(item);</p><p>forest_list = get_my_stuff( &#039;forest&#039;, x, y, z ); foreach( forest_list as item ) { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree_list = get_my_stuff( &#039;tree&#039;, x, y, z ); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach( tree_list as item ) draw_tree(item);</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;grass_list = get_my_stuff( &#039;grass&#039;, x, y, z ); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach( grass_list as item )&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;draw_grass(item); } </code></pre><p>Even with clever code shortening skills you probably can see that no good will come of this. The actual code involved in draw_tree() is even more complicated that what can be shown here. Where drawing a tree I have to figure out the distance, height, position on the ground and a whole bunch of other values which are different for everything that I want to draw or hide.</p><p>I don&#039;t know if this a new trend but I was looking for ways to avoid deep looping and stumbled across this <a rel='external' href='https://stackoverflow.com/questions/38399334/how-can-i-avoid-for-loops-with-an-if-condition-inside-them-with-c' title='question on stack'>question on stack</a> in which the programmer is trying to back-port modern high level shortcuts to C++. Clearly ignorant to the fact that it&#039;s reduces code flexibility. But what&#039;s really funny is how he &quot;feels&quot; that he is doing something wrong by using a for loop with a condition. Lol</p><p>Could we be mind fucking these knew programmers into thinking that code style, frameworks and tab vs spaces is more important than actually writing simple and efficient code? </p><p>But anyway back to the issue at hand. The code though simple and clear was only going to get more nutty as time went by and I had to be copy and pasting all the tree drawing code every time I wanted to draw a forest, meadow, savanna or bush. What to do?</p><h4>In comes global lists and reference pointers</h4><p>So I figured I should start using one list for each thing that had a specific draw_XXXX() function. If I had trees - no matter where there were I would just put them into one list and draw all of them in one big loop;</p><pre><code> get_my_stuff_loop( &amp;tree_list, &#039;tree&#039;, x, y, z );</p><p>get_my_stuff_loop( &amp;grass_list, &#039;grass&#039;, x, y, z );</p><p>get_my_stuff_loop( &amp;forest_list, &#039;forest&#039;, x, y, z ); foreach( forest_list as item ) { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;get_my_stuff_loop( &amp;tree_list, &#039;tree&#039;, x, y, z ); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;get_my_stuff_loop( &amp;grass_list, &#039;grass&#039;, x, y, z ); }</p><p>foreach( tree_list as item )&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;draw_tree(item); foreach( grass_list as item )&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;draw_grass(item); </code></pre><p>To a novice coder this might seem like a genius plan but its not obvious that I have to do more work in the background to make sure that the get_my_stuff_loop() function run out of control and crash the system. Previously I could because of the nature of the individual loops I could tailor each list to the specific needs of the items I wanted to store in them. e.g. forest[4]. tree[20], grass[1000]. By making a generic loop I loose the control I had. Now I have to have a generic list array that can store every possible type of object. list_array[2000]. Which means that anytime I create something new I will have to allocate a big chuck of memory to it.</p><p>Even more so certain types of objects behave differently at certain distances like grass can be hidden when at a distance. All these issues were easily managed in the individual loops because I knew exactly what and where I was drawing so I could skip things that I felt no one would notice. I could skip every second tree ( 2 % i == 0) if I felt that they were far enough away that no one would notice.</p><h4>Conclusion</h4><p>With the new code I will need to send more parameters so that I can try to implement some of my old tricks;</p><pre><code> get_my_stuff_loop( &amp;the_list, type_name, x, y, z, level_of_detail, density, parent_id, x_size, y_size, z_size ); </code></pre><p>But its not all bad right? I can code up new objects at a rapid pace with almost half the code. I swapped out simplicity for quicker iteration while wasting a bunch of memory on big generic arrays. Hopefully everything is able to fit in RAM when I am done coding. The key take away is that in the initial phase I kept my structures as simple as possible so that I could work on the difficult features inside the draw_XXXX() functions. Once those were mastered I moved to the higher level functions and at that point I needed to ramp up the pace at which I coded. The only way I could do that is by hiding as much of the nitty gritty as possible. Lets hope I do not hit up and too many edge cases.<br /></p> <p><strong>by owen</strong> <a href="http://owensoft.net/v4/item/2389/#comment">Post your comments on this article</a></p> Tue, 18 Jul 2017 09:50:27 -0500 http://owensoft.net/v4/item/2387/ Scifi movies, AI, VR and pandering to layman (Articles) http://owensoft.net/v4/item/2387/ <a href="http://owensoft.net/v4/item/2387/"><img src="http://owensoft.net/v4/photo/thumb/2382.jpg" /></a> <a href="http://owensoft.net/v4/item/2387/"><img src="http://owensoft.net/v4/photo/thumb/2383.jpg" /></a><p>This is a age of broad media consumption. Every <a rel='external' href='https://www.merriam-webster.com/dictionary/layman' title='layman'>layman</a> has a computer in their pocket that they can use to send pictures of food to other computers half a world away and yet still science fiction movies are getting stupider by the day.</p><p>Let&#039;s start with movies like Ex Machina (2014); this movie starts out as hero worship - you have this guy who is supposed to be a super genius building sexbots in his designer palace except hes just a mysterious asshole. After that everything is telegraphed. The new trend in science fiction movies ‎of today is to skip the science fiction and go straight to the magic and paranormal. The movie does not explain how anything actually works or even tries to create a believable world - even if the systems are not plausible - at least the movie should create something on which the viewer can ponder. Ex-Machinima gets rid of the entire notion of explaining how anything works right off the bat - shoves it into the pantry. What is left is a empty shell which you have to kind of fill in with assumptions. You assume that there is some kind of power source and you assume that something is managing it. Sometimes dreams are better than scifi movies - this is one of those cases.</p><h4>No need to explain any of the fiction</h4><p>The audience simply assumes everything works as if watching Harry Potter. This type of media appeals to a broader audience which I have dubbed the &quot;expert layman&quot;. The movie skips logic altogether and goes straight to magic. Magic in the past was normally regulated to the harder stuff like food processors in Star Trek or Teleportation.. These fictional things are kinda impossible but the way they looked and operated where clearly explained in the context where they are shown - they had a structure on which you could imagine it actually being real.</p><p>Nowadays, just like how virtual reality (VR) was supposed to revolutionize education and gaming back in 2015 (some how) solely by the fact that it is on your head, but yet - still no revolution. Remember tablets in schools? &quot;it is gonna be, good just wait!&quot; they said - potential can sell anything. VR has a tonne of potential but none of it is based in reality. It is all virtual potential. Everyone is either a <a rel='external' href='https://www.youtube.com/watch?v=IhP3J0j9JmY' title='believer'>believer</a> or part of a unpaid global marketing department.</p><p>Years later VR is still figuring itself out just like artificial intelligence (A.I.). Now people are calling basically anything &#039;cloud based&#039; = artificial intelligence. Gmail is a cloud AI that reads your email - yes its true - eventually it will write you emails and letters to your girlfriend as well. Magic! Google will figure out a way! Fake news will be a thing of the past. Companies with <a rel='external' href='https://m.youtube.com/watch?v=BaufJcqYcYg' title='cloud platforms/A.I.'>cloud platforms/A.I.</a> are begging developers to use their proprietary API so they can &quot;lock-in&quot; early. Big data turns Cloud turns Virtualization turns Search - whatever draws the biggest crowd. It is all marketing. No one knows anything, everybody is referencing a press release or something they heard on social media. I am not gonna knock a persons hustle but the least you can do is drop something more than pigeons and crumbs.<br />‎<br />Half the people on the A.I. train say its going to kill us, take away <a rel='external' href='https://pippinbarr.github.io/itisasifyouweredoingwork/' title='our jobs'>our jobs</a> and the other half say its going to drive our cars and be our friends. All of these people are going off the base assumption that it actually works. Getting A.I. to work is the problem no one wants to think about because the only people talking about it are marketing people (who want to sell us something) OR expert layman that only really want better Netflix recommendations. <span class="h"><em>Too many people assuming A.I. will just &quot;work&quot; is the problem.</em></span></p><p><span class="h"><em>&quot;The 4K revolution is closer than you think&quot;</em></span></p><p>The problem is further exasperated because news and social media no longer create news in the traditional sense but more so create &quot;buzz&quot;. Buzz works as it sells advertisements and keeps people coming back. But one bottle of buzz is not enough. Buzz creates buzz that creates buzz. The audience becomes so overwhelmed with the titbits of the same information coming from different directions that they figure that some/all of it must be true right? Except it all gets reduced to <a rel='external' href='https://www.youtube.com/watch?v=insM7oUYNOE' title='regurgitation'>regurgitation</a>, <a rel='external' href='https://vimeo.com/139094998' title='remixes'>remixes</a> and assumptions. People forget where the original source started and even the original source starts to assume that everybody else must be doing something if they are talking about it so much. But if you look into it no one is doing anything except creating buzz and waiting for new buzz to happen.</p><p>[bu]A big Non-Opinion Soup[/url]<br />I refer to the expert layman in the context of the average joe who has been exposed to the internet, social media, and more importantly &quot;buzz&quot;. The media gets a bit of information and runs with it, asks a bunch of people their opinions, then asks another bunch the opinion they have of the first set of opinions that they previously received. All this is the great consumer <a rel='external' href='https://en.m.wikipedia.org/wiki/Echo_chamber_(media)' title='echo chamber'>echo chamber</a>. This cycle goes around and around until people start quoting themselves in articles they wrote 5 years ago because the same people are making the same assumptions about the same press releases - everyone is working on old information. So what is the expert layman to do? Simply retweet, re-like, re-post and remix the same stuff because all these people cannot possible be wrong, right? Every one loses their point of reference. Lost amongst the buzz.<br /><span class="h"><em>What a time to be alive! 6 terroflops, 12 gigs of memory = Minecraft 4k</em></span></p><p>Of course they are not wrong, no one is, because they are just providing their opinion and everybody is in an &quot;opinion soup&quot; that is in a pot so big that one knows if its ready to take it off the fire. Eventually opinions become sorta facts just like how smartphones are sorta &quot;computers&quot; but all people do on them are play terrible games, and damage their eyes. Yes your smartphone is fast but at what? These are the difficult questions that need answering.</p><p>This is thought process of the expert layman; &quot;this thing is amazing to me so it must be incredibly difficult to do&quot;. This results in a feed back loop of people being amazed and dumbfounded at the same time. It is like seeing a magic trick and never being able to find out how it actually works. So the trick is amazing every time you see it and you never move on to other things. The expert layman gets stuck in a VR, AI, VR, AI, VR, AI, loop and it just keeps <a rel='external' href='https://m.youtube.com/watch?v=KkqC_DSZZNY' title='going and going'>going and going</a>. Because of this loop the tech industry seems to be stuck in a pothole trying to satisfy this buzz.</p><p>Take an example 3 cars driving down the road at 50 kmph. Are 3 cars better than 1 car going at 150 kmph? Do you really want to go fast or do you want to feel like you are going fast?</p><h4>Conclusion</h4><p>Eventually we have to stop beating dead horses and move on to other things. We need new tech, new software and new thinkers. Pandering to the consumer masses so that we can sell 20 million iphones every year will only get us so far. We cannot get caught in the same cycle of waiting for that new thing that you need to buy, that <a rel='external' href='https://www.youtube.com/watch?v=uQ-XcWCDfmE' title='4k revolution'>4k revolution</a>, 3d movies, mixed reality and a obsession with making video <a rel='external' href='https://www.youtube.com/watch?v=xgaUt_QstlY' title='games crisper'>games crisper</a>, sharper and prettier. The last time I saw a smartphone that was an improvement was when they added <a rel='external' href='https://www.youtube.com/user/videogamedunkey/search?query=resolution' title='accelerometers'>accelerometers</a> which was 5 years ago! We have come full circle to the point where they are actually removing features that we had for decades! The only true way to change and be better is to spend time solving problems instead of making new market segments for old problems.</p><p></p> <p><strong>by owen</strong> <a href="http://owensoft.net/v4/item/2387/#comment">Post your comments on this article</a></p> Wed, 12 Jul 2017 15:26:27 -0500 http://owensoft.net/v4/item/2382/ Finding the best solution and not just any solution (programming) (Articles) http://owensoft.net/v4/item/2382/ <a href="http://owensoft.net/v4/item/2382/"><img src="http://owensoft.net/v4/photo/thumb/2381.jpg" /></a><p>I was reading a <a rel='external' href='https://dev.to/steliosvoskos/the-obligation-of-a-software-developer' title='TDD article'>TDD article</a> this morning and had a few thoughts on the idea of &quot;Find the best solution and not a solution&quot; as it relates to programming. I will detail these thoughts below;</p><h4>There might be no best solution</h4><p>Before one sets off on a journey one must always recognize that they may be wasting their time and worse even wasting the time of other people. There might be no &quot;best&quot; solution or no solution at all to the problem you are trying to solve. Keeping this idea in the back of your mind will give you perspective and objectivity.</p><h4>The best solution has a negative cost benefit ratio</h4><p>New programmers either fall into the category of trusting too much in their platform or google search. If they read a article somewhere that says &quot;you can go to the moon if your dev stack is properly configured&quot; some might take it as fact that such a thing is possible using pure software or A.I neural networks. Always do a <a rel='external' href='https://en.m.wikipedia.org/wiki/Cost%E2%80%93benefit_analysis' title='cost benefit analysis'>cost benefit analysis</a> on any solutions you propose. It does not matter how hard you work or how diligent you are because the road to hell is paved with good intentions. Spend time, do your research. Time is money and money is time. A programmer&#039;s time is not infinte and you will not be young forever.</p><h4>Be wary of side effects</h4><p>Say you have come up on an idea solution which not may be best but is adequate in solving the problem within the constraints of the time you have; it is juvenile to not spend an equal amount of time to understand the negative aspects of the approach that you choose. The more projects you work on the experience you will gain and the more you will learn. But you should not rush blindly into a solution without understanding what side-effects may or may not occur. I have see many projects run for years and get totally re-factored in a weekend because little bugs were overlooked because they found a quick-fix for a big problem (they spent 2 years building on top of this quick fix).</p><h4>Risk management and fire fighting</h4><p>You might take the approach to run with a solution irregardless of what side-effects may popup in the future. However this technique requires someone very skilled at <a rel='external' href='https://www.aceproject.com/blog/2009/04/29/project-management-and-firefighting/' title='fire fighting problems'>fire fighting problems</a>. <span class="h"><em>When someone spends all their time putting out fires, they look very busy, and they have a great sense of purpose.</em></span> You will have to be prepared do what is necessary to keep the so called &quot;house of cards&quot; system that you have built up running no matter what happens. This is possible if you are immortal but most people are not.</p><h4>Conclusion</h4><p>At the end of the day there is no way you can come to a solution without carefully weighing your options and brainstorming. There is no best solution that can solve every problem in every situation - concessions must be made. If someone says they have the best without knowing all the angles then they are either lieing or selling something or both. Be aware of buzzwords, flashy presentations and overly simple demonstrations. The sooner you get to the hard stuff the sooner you can weed out the bad solutions.</p><p></p> <p><strong>by owen</strong> <a href="http://owensoft.net/v4/item/2382/#comment">Post your comments on this article</a></p> Sun, 21 May 2017 17:22:46 -0500 http://owensoft.net/v4/item/2368/ User Acceptance, Project Management, Evangelism and Bad Software (programming) (Articles) http://owensoft.net/v4/item/2368/ <p>I have worked with many a software and one of the main implementation problems is getting users to accept change, upgrades, or enhancements to/from platforms that they are accustomed to. Project managers tend to put the blame on the client/users but often fail to see the the <a rel='external' href='https://en.wikipedia.org/wiki/Mire' title='quagmire'>quagmire</a> in which they themselves operate. Below I will compile a list of reasons why user acceptance is so difficult and why the problem is not always about a resistance to change;</p><h4>Focusing on the wrong things</h4><p>Your software is mostly used by people on desktop computers yet you go around promoting the virtues of the mobile version because clearly &quot;mobile is the future&quot;. The system requires heavy data entry but you focus on how bueatiful the charts and the reports look. These are just a few instances of the team ignoring the important use cases in favour of highlighting buzzwords and catch phrases.</p><h4>Blaming the Client</h4><p>The users say the software is too complicated so you suggest more training. Users keep making data entry errors you suggest they get a university degree in civil engineering. The interface is cumbersome to use - you say &quot;look, look, its easy see!? All you have to do is click here then click there!&quot;. This is maybe the biggest problem with projects that start off rocky. The complains of the client users are often ignored and their complaints are cast back on them because &quot;they are the problem&quot;. <span class="h"><em>Look, Look, its easy! X has done it without problems!</em></span></p><h4>Threats, Evangelism, Cheer leading</h4><p>In some cases there is nothing you can do to get some people to accept change, especially when they cannot see the benefits of the new system you are trying to implement. If you cannot sell the software to a client there is a chance that your software may be a bad fit for the situation. If you cannot prove to the user easily that your thing is better than what they had then there is no use threatening them - it might work for some but it wont work for all. You are trying to sell a fish to a fisher man. You might be stuck in a bind with a something that sucks but being positive about a bad situation is not going to help the people who actually have to do the work every day. Positive vibes can only bring you so far. Paid <a rel='external' href='https://en.wikipedia.org/wiki/Shill' title='shills'>shills</a>, <a rel='external' href='https://en.wikipedia.org/wiki/Technology_evangelist' title='evangalists'>evangalists</a> can only get you so far.</p><h4>Blaming the Hardware</h4><p>The interface takes up half the client screen - BUY BIGGER MONITORS! The software takes long to load, runs slowly - UPGRADE THE SERVERS! This report is taking too long to run - INSTALL MORE RAM! The browser locks up for a couple seconds once a button is clicked - UPGRADE YOUR BROWSERS! My browser is slow - UPGRADE YOUR OS! My operating system is slow - UPGRADE EVERYTHING! This is another form of casting blame elsewhere when large problems start to creep up during implementation. If the software is slow the team must work to remedy the software in its current state instead of trying to alter the hardware environment to fit the needs of poorly written software. Slow software is slow for a reason. Hire an expert to look at it. <span class="h"><em>Upgrade you mouse, mouse pad, trackpad, monitor, RAM, OS, drivers, eyes, ears, reflexes! Clearly something needs to upgrade!</em></span></p><h4>Buying bad software</h4><p>In this day and age every project manager must be able to admit that the software that they are trying to implement falls short in some aspects. The software may be good on a few points but falls short on random edge cases, usability, interface design, speed or reporting. Whether off the shelf or custom software bad software is ship built to crash upon the shore. There is not much you can do after the fact but make the best of a bad situation, compromise, patch, hack in features and making promises. </p><h4>Making promises that you cannot keep</h4><p>Software is not a magical thing that is limitless. It comes with limits, no matter how advanced the platform is there will be a way to break it so there is no use promising users that you can make any change or handle ANY ENHANCEMENT they request. At the end of the day you will either run out of time or money or both. If the software is bad at its core you will basically have to accept it for what it is and work around issues in a transparent manner. <span class="h"><em>You want what? Of course it can do that! Just wait 8 months until we get a patch to 50k lines of code!</em></span></p><h4>Ad hoc troubling shooting, hacking, patching and fire fighting</h4><p>Many problems will arise during implementation of software but one needs to ensure that issues are not glossed over and patched so as to rush the implementation. These issues may popup again at a point in the future when it may be detrimental to the entire system. Care must be taken to ensure that any issues are implemented in a seamless way. Hacky stuff and wild customization must be avoided at all costs (see making promises you cannot keep). Especially when it comes to off the shelf software where too many customizations will lead to expensive upgrade and maintenance costs in the future. Reckless fire fighting is the easiest way of forking your version of the software into a <a rel='external' href='https://en.wikipedia.org/wiki/White_elephant' title='white elephant'>white elephant</a> (useless or troublesome system, especially one that is expensive to maintain or difficult to dispose of) leading to <a rel='external' href='https://en.wikipedia.org/wiki/Vendor_lock-in' title='vendor lock in'>vendor lock in</a>. <a rel='external' href='https://en.wikipedia.org/wiki/Ad_hoc' title='Ad hoc'>Ad hoc</a> fixes are often forgotten then popup at later times to kill innocence bystanders. </p><h4>Conclusion</h4><p>At the end of the day no software is perfect and you will always find users/clients that have issues that need to be addressed. These issues must be carefully looked at or prioritized if you intend to have smooth and quick implementation. Even after implementation steps must be taken to ensure that the people you have on-boarded stay on board and the software lives a long productive life, free of pain and suffering. Resist the urge to blame the client/users for shortfalls in the software and make an effort to understand and alleviate the concerns. A couple years ago I wrote about why <a rel='external' href='http://owensoft.net/v4/item/1802/' title='software gets replaced'>software gets replaced</a> but I did not mention that some of these things can be detected from early in the implementation phase and avoided.<br /></p> <p><strong>by owen</strong> <a href="http://owensoft.net/v4/item/2368/#comment">Post your comments on this article</a></p> Sat, 04 Mar 2017 09:18:52 -0600 http://owensoft.net/v4/item/2357/ Is blogging dead (Articles) http://owensoft.net/v4/item/2357/ <a href="http://owensoft.net/v4/item/2357/"><img src="http://owensoft.net/v4/photo/thumb/2313.jpg" /></a><p>People will say whatever they want to say but at the end of the day people are sheep. They travel in herds like fish travel in schools with under paid teachers. Technically blogging is dead. No amount of fancy writing can get you the attention and ad-revenue that a popular youtube star can get. I have seen youtube entrepreneurs with &quot;just&quot; 80 thousand followers moving out of their parents house into <a rel='external' href='https://www.youtube.com/watch?v=pQdSZPTR4j4' title='new apartments'>new apartments</a> and stuff. <a rel='external' href='https://www.instagram.com/prince_pine/' title='Instagram celebs'>Instagram celebs</a> becoming brand ambassadors. Its a crazy world out there, pushed by advertisement and preferential treatment by social media platforms. Social media can make ANYONE a celebrity. The more content you push, you might get popular and the more popular you get the more the platform will BOOST you so that you get even more popular.</p><p>It is not a question of whether these people deserve the <a rel='external' href='https://www.youtube.com/watch?v=xId9tWGFuEA' title='fame and fortune'>fame and fortune</a> they get or not. These are talented people. No one really deserves anything we are all battling over scarce resources. As they say we should live by faith and not by sight. What you have to understand is that these people work for a captive platform. The platform pays its best people to keep putting out content because good content attracts eye balls and eyeballs bring in advertisement revenue for the platform. It is all about advertisements. You have to be apart of the in crowd, follow trending topics, #hashtags, and spend alot of time in the <a rel='external' href='https://en.wikipedia.org/wiki/Echo_chamber_(media)' title='echochamber'>echochamber</a>. Make a bed and <a rel='external' href='https://www.youtube.com/watch?v=OpgR42HeHVY' title='l lie in it'>l lie in it</a>.</p><h4>But when?</h4><p>For me I would say blogging technically died <a rel='external' href='/v4/archive/' title='around 2009'>around 2009</a> when facepage really took off and mobile data providers were literally giving away free data plans with facepage and twitter so that they could piggyback off the attention and sell more cheap smart phones. Some of these same mobile providers even created their own social networks which they offer for free in a closed version of the internet. I saw my blog comments go from 720 in 2009 to 420 in 2008 - a drop of almost 50%. At a time when I was posting even more than I did in the same period. Blogs could not compete with a platform that was accessible on smartphones for free and a platform that also would send you a text message/email if you did not check it every 5 days at least. Facepage was literally stalking its users to check it.</p><h4>Blogging niches</h4><p>Not all bloggers suffered the same faith; mommy bloggers like <a rel='external' href='http://dooce.com/' title='dooce'>dooce</a> have been around for ages and still secure a decent living in part (if not entirely) from blogging. You can follow dooce&#039;s blog life all through a marriage, 2 dogs, 2 daughters, a divorce and <a rel='external' href='http://dooce.com/about/' title='countless other life events'>countless other life events</a>. But dooce might not be the best example since dooce was popular even BEFORE the rise of facepage. Dooce still has her blog but most other bloggers have branched out for the trappings of larger platforms that have a larger audience and potential to be discovered.</p><h4>Full circle</h4><p>So as more bloggers move to social media, more of the blog audience go there with them and so social media gets more money. It is a vicious cycle. I remember when they would blur out youtube logos from television broadcasts because the television companies did not what to give free promotion to youtube. You have to remember that television is in the business of advertisement and you can&#039;t getting anything on television unless you are 1. very attractive, 2. fork over some major money, 3. your brother gets shot while playing dominos on the street corner. </p><p>Now that facepage and youtube have grown out of control - even television has been sucked into the blackhole with fake news and &quot;man in the social-media street&quot; reports. Eventually even businesses started scrapping thier websites and setting up facepages in a epic free-for-all. Everyone who was already making money now could make even more money without maintaining a website or maintaining their own community website. <a rel='external' href='https://www.youtube.com/watch?v=QbpW418PDxQ' title='Cream and bastards rise'>Cream and bastards rise</a>. We were selling our mothers and friends into a platform from which they could never return.</p><h4>Walled garden grows thicker</h4><p>Now as more people get pushed into social media, the more people get trapped watching <a rel='external' href='https://www.youtube.com/watch?v=oVfHeWTKjag' title='stolen content'>stolen content</a> and pointless memes. The more trapped eyeballs, the more advertisements social media can sell and the more money they can pay out to a few of the talented eyeballs that they have captured. Even if you were to write the best blog post in the world someone could just copy it and post it into social media and no one would know you wrote it. Often times it is even hard to find the source of a meme or a picture. Social media doesn&#039;t care about sources - all it cares about is eyeballs and keeping people scrolling forever down an endless list.</p><h4>So who is making money?</h4><p>It is not all bad because certainly social media benefits a select set of verified people. The few people who have some kind of physical business outside of social media are very profitable because the attention translates to increase sales. Unfortunately bloggers are not so lucky. While a blog may only require a once a week scroll through to read a post or 2 - Social media often demands complete devotion several hours PER DAY! Parties, Internet service providers, fashion bloggers, comedians all make money directly if not indirectly from sponsorship or free products and endorsements that come with being popular. Regular people just get to watch it all go down like a reality show on the internet. So the game has changed, social media now controls who is popular, just like television and news papers made people popular in the past.</p><h4>Conclusion</h4><p>So the answer to the question is no, blogging is not dead. You can still blog to your hearts content. Blogging simply has reached the point of <a rel='external' href='https://www.youtube.com/watch?v=WN9JEqug3pE' title='diminishing returns'>diminishing returns</a>. If you want to make money blogging you will need to branch out into the physical world and have multiple revenue streams - piggyback off the crumbs of social media or try to pay your way to the top by buying advertisements on facepage. Get featured by people who are already popular or tackle the most nichest of niche topics. Either way blogging is much harder than it was in the past. </p><p>I have <a rel='external' href='/v4/item/2268/' title='said before'>said before</a>; if you like what you do and you care about building a personal body of work then it does not matter what you do. Just do something that makes you <a rel='external' href='https://www.youtube.com/watch?v=aW5ga5MmnhY' title='happy'>happy</a> (along side something that pays the bills).<br /></p> <p><strong>by owen</strong> <a href="http://owensoft.net/v4/item/2357/#comment">Post your comments on this article</a></p> Thu, 19 Jan 2017 08:48:41 -0600 http://owensoft.net/v4/item/2352/ Artificial Intelligence, machine learning and big data is a dead end (Articles) http://owensoft.net/v4/item/2352/ <a href="http://owensoft.net/v4/item/2352/"><img src="http://owensoft.net/v4/photo/thumb/2307.jpg" /></a><p>Let me just preface this to say that I have no fear of machines taking over or somehow putting everyone <a rel='external' href='https://www.youtube.com/watch?v=fQSlDJ23Cwk' title='out of work'>out of work</a>. Machines will definitely put some people out of work but not everyone. In fact I think pollution, inflation, crime and poverty are bigger problems than a robot apocalypse. The future robot overlords might even save us from our selfish ways.</p><p>That being said I do not think we are there yet or even close to simulating the brain and letting computers solve our problems for us. I often think of the brain as a simulation rather than a running program. The only concept I have really delved into or written about until now is my <a rel='external' href='/v4/item/1354/' title='general theory on dreams'>general theory on dreams</a>. In this article I will rant more about Artificial intelligence and where I think we are going wrong.</p><h4>All your data</h4><p>The current push is to gather as much data as possible in my view is a dead end. Gathering lots if data will help you solve spelling errors and do search really quickly but it is only for things you already know. How much data do we really need? No matter how much data you throw into AI there is still the flaw which is in the programming model itself. The brain is not <a rel='external' href='https://www.reddit.com/r/neuro/comments/tzumq/is_the_human_brain_an_asynchronous_synchronous_or/' title='asynchronous'>asynchronous</a>. A human can have many ideas in play at the same time with little data. But the current trend in AI is pretty much the same as it was in the 80s we just have more data and faster computers. Its the same pattern matching we have been doing for years. You give the computer a question and goes down a list of answers.</p><h4>Pattern matching</h4><p>To me pattern matching is too simple a process. I think brain is doing more than that. Yes pattern matching is a big part of it but I would guesstimate that the brain is compiling programs in real time against multiple languages and data sets in a mesh or grid data store - something that we cannot do at the moment - if we would then we have had cool stuff already. It is not matching a pattern but move to a state when all the cards are close together. The brain&#039;s data store has to be some kind of data meets program. This data store is not only &quot;data&quot; but a &quot;program&quot;, &quot;file system&quot; and <a rel='external' href='https://en.wikipedia.org/wiki/Bus_(computing)' title='bus'>bus</a> at the same time. In current computers these are physically separate things which creates <a rel='external' href='https://en.wikipedia.org/wiki/Bottleneck_(software)' title='bottlenecks'>bottlenecks</a> everywhere.</p><p>Pattern matching is asynchronous. If we keep going down the road of pattern matching we will just keep going through more and more data until we run out of <a rel='external' href='https://www.youtube.com/watch?v=JG2ESDGwHHY' title='bandwidth'>bandwidth</a>, storage or time. The brain has to be doing something more clever along the lines of a real time linker. The brain might be constantly compiling but never &quot;executes&quot; in the classic sense. Why wait to execute when you can come conclusions at anytime? You just need enough data to act or come to a conclusion.</p><h4>Is there a Brain BIOS?</h4><p>Alex proposed a theory about finding the BIOS or some kind of small base program which human has in common but yet it is unlikely. The BIOS concept seems to be what machine learning is targeting. A base set of code in which to put all the world&#039;s information so that we can find a simple pattern which we can use to do pattern matching AGAIN!</p><p>But what if there is none? What if the brain contains many such programs? There might be no one central point of operations in the human brain. The machine learning that system that you are dumping all your information into might just be doing the same thing with 1kb of data <a rel='external' href='https://www.youtube.com/watch?v=_rdINNHLYaQ' title='that it does with 1 terabyte'>that it does with 1 terabyte</a>.</p><h4>Big Data as Artificial Intelligence</h4><p>AI in its current state is trying mimic a clever system with lots of data. It&#039;s like a person using a bulldozer because they don&#039;t know how to use a shovel. And that same person keeps buying bigger and bigger bulldozers and still can&#039;t do what a shovel can do because they are too focused the big picture. They use the bulldozer in the hopes that somewhere along the line they will figure out the shovel.</p><p>If I do a web search on &quot;what is the speed of light?&quot; I will get several links to web pages containing information. While this may seem impressive the act of knowing that light has a &quot;speed&quot; and actively deciding to search for it is the part of being &quot;intelligent&quot; - not the search itself. But many see the &quot;search&quot; as revolutionary to the point where they are impressed by Netflix suggestions based on the movies you watch. All this is simply a side effect of having a large database. You could come to allot of conclusions if you had a million data points but you will learn very little. In order to learn more you will have to get more data and more and more into infinity. The only advantage in big data now is being the data gatekeeper.</p><h4>Conclusion</h4><p>Either way these are all theories. Eventually we might discover a way to store all the worlds information and still be alive to see it. One thing is certain; light speed is constant. Light speed is the fastest you can compute and therefore the data you have and the speed of computation are linked. You can&#039;t look at big data and interpret it at the same time. And certainly not at the speed of light. There will always be lag. Hence the brain must more clever than it is fast. If we ever hope to actually start making new strides in AI we need to drop the old hat tricks and focus on being clever as opposed to being fast.</p><p>p.s. open sourcing your AI framework is not going to help make it better. Its like throwing bodies at a dead project.</p> <p><strong>by owen</strong> <a href="http://owensoft.net/v4/item/2352/#comment">Post your comments on this article</a></p> Sat, 17 Dec 2016 08:36:15 -0600 http://owensoft.net/v4/item/2332/ Post modern Javascript babies (programming) (Articles) http://owensoft.net/v4/item/2332/ <a href="http://owensoft.net/v4/item/2332/"><img src="http://owensoft.net/v4/photo/thumb/2242.jpg" /></a><p>They seem to be all the rage now, <a rel='external' href='https://hackernoon.com/how-it-feels-to-learn-javascript-in-2016-d3a717dd577f#.jf3p5tgcv' title='a web of brackets and tiny files'>a web of brackets and tiny files</a> - JavaScript babies. Half the code is html and the other half are files full of listeners. Code fragmentation is a real problem in JS web dev. Any thing written in more than 1000 lines will certainly become an un-maintainable mess that only the original developer will want to even look at - you think actionscript was bad? Dead js projects litter the roadway like broken promises. On some platforms you can add a comma to any line, in any file and crash the whole house of cards. I find this to be a big no-no when you have lots of code to debug. <span class="h"><em>A fickle platform makes even more fickle software.</em></span> You better have good short term memory to maintain it i.e. if you ever finish a project that needs maintaining/updating. </p><h4>Forever prototype</h4><p>The main problem I have with these babies is that people never reach a point of completion with the projects they start in these bullshit-all-in-one platforms. It would be great if everywhere you look you see cool and interesting stuff being built but most will point you to Slack, Atom or Drupal and say; &quot;THERE! LOOK! SEE! Cool open source!&quot; - million dollar platforms that pay people to keep them working. Unfortunately the average devs just create <a rel='external' href='https://github.com/vuejs/vue-hackernews-2.0' title='half-ass clones of existing stuff'>half-ass clones of existing stuff</a> with 35% of the original functionality - low hanging fruit. None of the hard problems are implemented. And they will justify the <a rel='external' href='http://notes.ericjiang.com/posts/751' title='emperor&#039;s new clothes'>emperor&#039;s new clothes</a> by saying its &quot;faster&quot;, more secure, component, prop passing, content insertion, transitions etc but you lose more than you gain. Most meet up on a wall maybe 6 months or a year into the project when important things like reports or multi-views need to be created. Then they get bored and move on to the next hype train because they either run out of time or patience. Google will not save you.</p><p>Whenever one analyzes a platform the first thing they should ask themselves is &quot;what is the most complicated thing I may need to do that will waste the most of my time?&quot;. Web devs seem to be only interested in how many lines it will takes to write a &quot;todo list&quot; app. Which is all good if all you end up writing a todo list before the project stagnates and is left to gather dust on github - NEVER TO BE UPDATED.</p><h4>No new features</h4><p>You wait for them to finish the promised features but they will say stuff like &quot;everybody&#039;s implementation will be different&quot; or &quot;no one size fits all&quot; or &quot;its up to the programmers to decide&quot; or &quot;open source, you can help us finish it&quot;. They create a base of &quot;potential&quot;. I wish potential was enough to get us nice things. They wont go down in to the rabbit hole of what to do when you have 200k pages and a application so big that it can&#039;t fit in server memory - ADD MORE RAM or write a C module. Basically they want you to help find bugs/workarounds in their shit-poorly-tested-hacked together framework of pain. Until of course they deprecate the entire platform from beneath your feet and release a api version 2 that is incompatible with version 1 in every way except platform name. By the time you see version 2 they will have already re-wrote all their stuff in the new version. The lucky few will get migration scripts. Simple is stuff will be easy, but the hard stuff will be impossible.</p><h4>Complicated Old Stuff</h4><p>I am not sure why web devs are obsessed with finding more complicated ways to do simple old stuff - like tables, tabs and input forms. Video game developers have solutions with highly tested code that covers a wide range of use cases for new technologies which free them from doing complicated things themselves. Shadow mapping, bump mapping, Occlusion culling, Octrees are often easily implemented without the headache of having to learn each one. But you still can if you want to. </p><p>Web developers seem to be stuck writing server side HTML with JS using listener functions. Which is all well and good if that is your kettle of tea but it it produces nothing but fancy HTML pages with AJAX that you could have done in PHP in 2001. You couldnt do Occlusion culling back in 2001 without a advanced techniques or secret vodo. Web devs are finding complicated ways to create the same functionality that HTML has had since IE4 and still complain about IE4. </p><p>So i should update my browser so I can use a login form? Great. All pages are infinite scrolling and every page is a single page web app using weird protocols to render read-only tables. It all seems like the same floating divs. There are people creating some <a rel='external' href='http://www.puzzlescript.net/' title='neat stuff'>neat stuff</a> with these things. Wonderful games and useful software but everyone else is just swimming around in a washing machine making the same mistakes over and over again. <span class="h"><em>People will gladly encourage you to make a JavaScript baby but they will not help you raise it.</em></span></p><h4>Conclusion</h4><p>People never really go down into the nitty gritty of what these &quot;needs&quot; will actually be in the future of js babies. It is a ambiguous mess of tools and work-flows which make people wonder if they are doing something wrong by not using each and everyone of them.</p><p>One could test out all of the tools but there is not enough time in the day. I was looking at <a href="http://www.red-lang.org/" rel='external'>www.red-lang.org/</a> the other day and it is likely that I will NEVER need to use this thing for anything useful but I can see a usecase for it and I can tell that it is doing something new and useful. What red provides is not covered in ambiguity or potential. You write one line of code and it pops up a window - DONE! The system input and the output is in harmony. Js babies on the other hand are abstractions on top of abstractions - a solution looking for a problem.<br /></p> <p><strong>by owen</strong> <a href="http://owensoft.net/v4/item/2332/#comment">Post your comments on this article</a></p> Fri, 14 Oct 2016 10:42:42 -0500 http://owensoft.net/v4/item/2323/ Learning to Code as a API-Platform trap (Articles) http://owensoft.net/v4/item/2323/ <a href="http://owensoft.net/v4/item/2323/"><img src="http://owensoft.net/v4/photo/thumb/2203.jpg" /></a><p>This concept came to me while I was reading a thread about Jamaica being <a rel='external' href='http://www.techjamaica.com/forums/showthread.php?115454-Will-jamaica-Ever-be-big-in-Software-industry' title='big is software in the future'>big is software in the future</a>. Code schools as a &quot;trap&quot; is a topic that has always been in the back of my head surrounding the reasons why people encourage other people to learn to code as opposed to doing something they are truly interested in doing. Learning code is like the multi-level marketing of this generation. But any way lets look into these traps;</p><h4>Bait and Switch Platforms</h4><p>I see most people directing people to learn to code in some form of online course or boot camp. &quot;5 weeks free!&quot; Sending the poor noobs to fend for themselves into a bottomless pit of tutorials and videos. Programming is truly a bottomless pit, it never ends. At the end of the course they either pay up real money because they like the &quot;content&quot; or pay up because they are lost without the hand holding that such a structured course environment provides. Either way they get trapped in the platform learning to code HTML5 with the hopes of being able to control robots in the future. Bring a man to water, push him in the deep, hope he learns to fish but leave him to drown.</p><h4>Fishing Contests/Expeditions</h4><p>There are large companies that host programming contests that encourage people to learn programming and offer grants for the winners and so forth. This is all well and good but what happens to the people who do not win? If you pick a random set of people off the road you definitely will find someone who can handle programming and logic. It often seems that these competitions are interested in that one person &quot;Neo&quot; as opposed to the group as a whole. This is what I call a &quot;fishing experiment&quot;. You want to attract that one geek who can code so you can hire them into your company before they escape into some other career (become a doctor or something) and be lost to you forever. The rest of the group gets to walk away with a free t-shirt and the memories. It all kinda reminds me of the movie <a rel='external' href='https://www.youtube.com/watch?v=R_f1uCWKZQs' title='Unbreakable'>Unbreakable</a>. I am not saying that all competitions are like this but this is certainly one of these reasons they exist.</p><h4>Learn to code on platform X - Vender Lock-in</h4><p>Apple has a &quot;Everyone Can Code&quot; program. <span class="h"><em>Technology has a language. It’s called code. And we believe coding is an essential skill. Learning to code teaches you how to solve problems and work together in creative ways - apple.</em></span> Firstly coding is not an essential skill. What is essential is that teachers download the preview of Swift Playgrounds: Teacher Guide. The guide is a 30 page book which is free but has requirements: To view this book, you must have an iPad with iBooks 2 or later and iOS 5 or later, or an iPhone with iOS 8.4 or later, or a Mac with OS X 10.9 or later. At the present moment there are 5 versions of the ipad ranging is costs from $256 to $1129 a piece, per student. Not to mention the costs of an iphone or a laptop which you will need to buy if you intended to take coding further than just playing around in a app. It doesnt matter how many kids learn to code as much as the the thousands that enter the apple eco-system at an early age.</p><h4>Coding is easy use this buildscript-API-Cloud Service</h4><p>Some people encourage people to start learning to code in a simple API or framework. This is fine in itself but what happens is that they are creating a false impression in students that programming is about connecting services together and formatting output. Worst yet when these services are deprecated the students are left with no other option but to keep searching for newer and newer APIs and build tools to recreate the environment in which they are accustomed to and never graduate to being higher level proficient problem solvers. They see everything as a nail because all they have is a hammer.</p><h4>This is how people are learning today, 9-5ers</h4><p>There are some mythical group of people who are learning to code and braking barriers selling millions in the appstore while working 9-5. I am not sure but they are usually mentioned by people who encourage others to use of dead-end tools that end up being deprecated 2 years later. Tools that solve easy problems and provide a safe space for people to waste their time &quot;pretend coding&quot;. Why teach someone to program in visual tablet touch application when the majority of programmers learn to program with a mouse and keyboard. Are you wasting people&#039;s time or are you profiting from their ignorance of productive programming platforms? </p><h4>This is how people will be learning in the future</h4><p>Infinite potential, the future, kids of the future, mobile economy, flying cars, <a rel='external' href='https://www.youtube.com/watch?v=xgaUt_QstlY' title='4k 60fps native'>4k 60fps native</a>, nuclear fusion. These are all the same thing. If words could make dreams come to life then we would all be living in flying cities by now. Reality is no one knows the future and no matter how many times you say it light speed, bandwidth and lag will always be with us. There are people doing &quot;real&quot; research into <a rel='external' href='https://www.youtube.com/watch?v=5V1ynVyud4M' title='making programming easier for more'>making programming easier for more</a> people. You can stop selling the future to people because you and no one else owns it. </p><p><span class="h"><em>HELP THEM WELL OR DO NOT HELP THEM AT ALL! Stop Herding sheep.</em></span></p><h4>Conclusion</h4><p>I am not sure what people hope to achieve by selling their friends into these traps when there are clearly more profitable professions that are easier and more fun. I can only imagine that we are building an army to fight the future HTML5 robot overlords. <br />Or maybe we need more customers to buy the apps that we are selling and that bringing them on board the code train will make us get more sales on the platforms we promote? <br />Or maybe we have stock in these platform/APIS and so herding people into them help us in some way. I am not sure. </p><p>It is easier to send people into a online course rather than helping them yourself. Potential is a valuable resource - if you are going to help someone; HELP THEM WELL OR DO NOT HELP THEM AT ALL. Stop adding <a rel='external' href='https://www.youtube.com/watch?v=YR5ApYxkU-U' title='bricks to the wall'>bricks to the wall</a> and herding sheep. The people who &quot;get&quot; programming will get it quickly - help them help themselves - others however will try until they fail up against a wall. But I guess in your view the ones that fail do not matter in the grand scheme of things. All I see people doing are leading people into walled gardens and letting them die along with their dreams of building the next big facepage app.</p><h4>Footnotes</h4><p>Assorted list of programming related stuff;<br /><a rel='external' href='https://www.youtube.com/watch?v=-5mFhDIJfNA' title='Programming Computer Animation in 1964 - AT&amp;T Archives'>Programming Computer Animation in 1964 - AT&amp;T Archives</a><br /><a rel='external' href='https://www.youtube.com/watch?v=TCIMPYM0AQg' title='Super Mario World Camera Logic Review'>Super Mario World Camera Logic Review</a><br /><a rel='external' href='https://www.youtube.com/watch?v=5V1ynVyud4M' title='&quot;Eve&quot; by Chris Granger'>&quot;Eve&quot; by Chris Granger</a><br /><a rel='external' href='/v4/item/2244/' title='The internet is a tutorial machine'>The internet is a tutorial machine</a><br /><a rel='external' href='http://owensoft.net/v4/item/1905/' title='Lets teach everybody programming - The tech future pipe dream'>Lets teach everybody programming - The tech future pipe dream</a> (2013)</p> <p><strong>by owen</strong> <a href="http://owensoft.net/v4/item/2323/#comment">Post your comments on this article</a></p> Wed, 14 Sep 2016 11:24:46 -0500