owenSoft.net - Articles http://owensoft.net/ Reviews, previews and more text en http://owensoft.net http://owensoft.net/favicon.ico owenSoft.net http://owensoft.net/ 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><p>[bu]Big Data as Artificial Intelligence[/url]<br />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> 2016-12-17 08:36:15 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> 2016-10-14 10:42:42 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> 2016-09-14 11:24:46 The procgen rabbit hole, what I have learnt so far (programming) (Articles) http://owensoft.net/v4/item/2312/ <a href="http://owensoft.net/v4/item/2312/"><img src="http://owensoft.net/v4/photo/thumb/2130.jpg" /></a> <a href="http://owensoft.net/v4/item/2312/"><img src="http://owensoft.net/v4/photo/thumb/2131.jpg" /></a> <a href="http://owensoft.net/v4/item/2312/"><img src="http://owensoft.net/v4/photo/thumb/2132.jpg" /></a> <a href="http://owensoft.net/v4/item/2312/"><img src="http://owensoft.net/v4/photo/thumb/2133.jpg" /></a><p>I&#039;ve been experimenting with Procedural Generation for the <a rel='external' href='/project/screenshot/?dr=2016' title='past year'>past year</a> mostly programming in C. I keep forgetting to write down the lessons I learn and the discoveries that I make so this article is a random list of things that I found while venturing down the rabbit hole that is #procgen.</p><h4>#progen can be anything but definitely not random</h4><p>Many people think that #procgen is about generating lots of random environments/stuff that you stumble through with the chance of seeing something awesome - its totally not - it is more like controlled variety. Procgen is not much fun if the developer/artist is not sure of what the output is going to be. Which is why most applications use some form of &quot;<a rel='external' href='https://en.wikipedia.org/wiki/Perlin_noise' title='noise function'>noise function</a>&quot;. In my case I am using simplex noise to generate my <a rel='external' href='/project/screenshot/?dr=2016/2016-08-02' title='landscapes'>landscapes</a>. Having predictable output allows you to do cool stuff like placing plants and buildings and doors without having them pop up at unusual place. Procgen is controlled chaos.</p><h4>Avoiding game breaking #progen</h4><p>I see a few people complain about the repetition of certain things in #NMS such as the ships. The thing with the player ship in that game is that it is an essential part of its gameplay, it would be very annoying to the player to buy a ship only to realize that it has a broken shield OR the flight controls are #procgen wonky OR its design violates the games physics. Ending up with a broken ship that cannot fly would be almost game ending in a situation when u can only have one ship at a time.</p><p>In contrast you can have hazardous planets in the game ‎since a planet is one of many that the player can choose to visit or leave at little cost. This is why more focus is placed on variety in planets rather than space ships. If NMS was roguelike then maybe you could have a few game ending scenarios but I think they chose not to grief the player. Bottomless pits, over powered animals, death mushrooms etc.</p><h4>Procgen has to be learn-able</h4><p>There has to be some kind of underlying system in any procgen project. Imagine a #procgen mario kart game in which every level you played was totally different and every kart had different handling, 3 or 4 wheels etc. The player would never be able to gain any level of skill or mastery. Eventually the player would become frustrated. So there has to be a balance between apparent randomness and solid game play systems that function well inside the procgen world. </p><h4>Real Time #procgen requires lots of work</h4><p>I had to re-write my terrain engine 4 times so far because in order to get good results from your program you have to be in control of almost every single aspect of your #procgen work flow. If you render your #progen ground using a particular function and another to place the trees you will end up with floating trees, trees below ground and trees in lakes. All elements of your procgen code must come together in a harmonious soup. This is why alot of developers write custom engines. Maybe they are just control freaks but the last thing you want to do is code yourself into a OOP corner <a rel='external' href='https://www.youtube.com/playlist?list=PLFt_AvWsXl0eBW2EiBtl_sxmDtSgZBxB3' title='like this dude'>like this dude</a>. You have to be willing to throw everything out and make it better-simpler. Learn from your past experiences. Keep your code modular.</p><h4>Realism is less important than wonder</h4><p>Sometimes you have to bend the rules a bit to make a procgen system work. As you can see in the recently released &quot;<a rel='external' href='https://killscreen.com/articles/no-mans-sky-theater-processes/' title='No Man&#039;s Sky'>No Man&#039;s Sky</a>&quot; - having gigantic planets very close together will not be good for the health of the planets but it makes for cool <a rel='external' href='https://www.google.com/search?q=scifi+book+covers&amp;safe=off&amp;source=lnms&amp;tbm=isch&amp;sa=X' title='sci-fi book covers'>sci-fi book covers</a>. So if there is a chance that your game or code would be more interesting but less physically accurate then I would suggest you go for it.</p><h4>Teraflops matter but not so much</h4><p>The faster the hardware you use to run #procgen the more stuff you can do. With infinite power you can have millions of levels of details and generation passes. However having a million blades of grass on screen does not really make your game more fun or believable. Since my hobby programming platform is the Nintendo Wii (clocking in at a max 729 MHz CPU and ATI 243 MHz GPU) I am always balancing #procgen with graphical fidelity. I can probably pull off 200 lowpoly trees but I would rather drop it to 100 so I can keep hitting 60 frames a second. Frames per second matter more to me than anything else.</p><p>The Wii has 2.7GB/s bandwidth compared to the PS4 which is 176B/s. It would be cool to have all that extra bandwidth but a faster computer wont help you write better code. Sucky code will still be sucky at whatever speed the computer is running at. The more processing power you have the easier it is to hide bad code but bad code reveals itself sooner or later.</p><h4>Being able to maintain focus</h4><p>Anyone who has been programming for a long time knows that it is easy to go off the rails and start writing unecessary code for things you do not need - edge case tools or APIs for APIs. Distractions are magnified 10x when you start a #procgen project. The chance of not finishing your project goes up exponentially the more stuff you add to it. Better to keep your targets small if you want to finish something before you go broke or die. Such is life. In my case my landscape engine only does land and <a rel='external' href='http://owensoft.net/project/screenshot/?tag=lake' title='water bodies'>water bodies</a> using a simplex-noise hieght-map hence caves are IMPOSSIBLE! But I am not going to waste my time trying to make caves because even if I only get the landscape 50% functional I wont even need caves for anything. Screw caves.</p><h4>Bugs, Bugs and more bugs</h4><p>In #procgen a small bug can make a big difference. I am constantly searching and looking for ways to do more with less code. The first few versions of the landscape engine was sampling the simplex noise <a rel='external' href='http://owensoft.net/project/screenshot/?dr=2016/2016-02-23' title='40k times'>40k times</a> per frame. This was because of a bug in my code which was doing more work than it needed to do. Once this was fixed I could move on to do other things with the extra CPU power that I gained. </p><p>Bug hunting is at the top of my list (not the same as over-optimization). Unit testing wont help you in this case sorry, &quot;new code&quot; cannot be unit tested. Even in a case where you know exactly what you want to write there maybe conflicting issues that force you to choose sides.</p><h4>Conclusion</h4><p>Procgen is a fun excursion but it is not easy and it might waste your time if you are not good at problem solving and functional coding. Stick to your strengths.</p><h4>Further reading</h4><p><strong>Articles</strong><br /><a rel='external' href='http://pcgbook.com/' title='Procedural Content Generation in Games'>Procedural Content Generation in Games</a> - a bit long winded</p><p><strong>Long Videos</strong><br /><a rel='external' href='http://youtube.com/watch?v=HhyyUiYQolA' title='Reset Button: The biggest game ever'>Reset Button: The biggest game ever</a><br /><a rel='external' href='http://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><br /><a rel='external' href='http://youtube.com/watch?v=z6lweIGJYS8' title='Flow in Procedural Generation'>Flow in Procedural Generation</a><br /><a rel='external' href='http://youtube.com/watch?v=xJRXNesI9f4' title='PROCJAM 2014 - Procedural Doesn’t Mean Random: Generating Interesting Content'>PROCJAM 2014 - Procedural Doesn’t Mean Random: Generating Interesting Content</a><br /><a rel='external' href='http://youtube.com/watch?v=twTegheoF1E' title='How Grids and Patterns Work Together'>How Grids and Patterns Work Together</a><br /><a rel='external' href='http://youtube.com/watch?v=BiQCz2NjPR8' title='Reset Button: Megatextures'>Reset Button: Megatextures</a></p><p><br /></p> <p><strong>by owen</strong> <a href="http://owensoft.net/v4/item/2312/#comment">Post your comments on this article</a></p> 2016-08-16 15:10:56 Google Spaces and Sharing Blackholes (social media) (Articles) http://owensoft.net/v4/item/2294/ <a href="http://owensoft.net/v4/item/2294/"><img src="http://owensoft.net/v4/photo/thumb/1992.jpg" /></a><p>With the launch of <a rel='external' href='http://googleblog.blogspot.com/2016/05/introducing-spaces-tool-for-small-group.html' title='Google Spaces'>Google Spaces</a> I noticed another trend in the &quot;internet of things&quot; future that we are creating. &quot;Sharing black holes&quot; are my new name web services that collect information but provide no way of getting that information out or pushing it to another service. These tools provide a zero sum situation; they take your data, sell it to others and give you entertainment. <span class="h"><em>A black hole theoretically absorbs everything around it and nothing comes out.</em></span> </p><p>These sharing black holes make it easy for you to share information INTO it but provide no way for you to extract, <a rel='external' href='http://en.wikipedia.org/wiki/Commoditization' title='commoditize'>commoditize</a>, or publish this information - it is like a sandbox on playground that you bring your toys (in this case text and pictures) but you cannot take them back home with you because they are stuck in the sand of the internet.</p><p>Of course on facebag, google and twitter you can request a data extract of everything you have posted - not an easy task and takes a couple days but you get a big zipped file of stuff - not sure how it looks nowadays - but the option is there if you want it. Most people won&#039;t ever need to do this because they do not care about archiving, history or accumulating knowledge. People on the internet live in a post and forget medium, <a rel='external' href='http://www.youtube.com/watch?v=FEqHbokhEEs' title='tommorow people'>tommorow people</a> hoping that the future will be better than the present if they wait long enough.</p><p>For the <a rel='external' href='http://en.wikipedia.org/wiki/Archivist' title='archivists'>archivists</a> <a rel='external' href='http://www.ulillillia.us/' title='among'>among</a> us being able to extract and manipulate ones own content can be a useful feature.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Imagine a comedian who constantly posts funny tweets over a period of years and decides to compile them in a book. If you are going to waste your time you might as well build up a repertoire or portfolio of your interests or talents or something. </p><p>However we are all not artists. Most internet users are just pushing around bytes as a means of stimulation. At present one probably cannot put a value or grade the content which one produces. Like being <a rel='external' href='http://en.wikipedia.org/wiki/Wolfgang_Amadeus_Mozart' title='Mozart'>Mozart</a> in a time before art and music was a thing. Imagine if Mozart wrote all his songs on twitter instead of learning how to compose and write sheet music? A life well <a rel='external' href='http://alifewellwasted.com/2013/03/20/episode-seven-work/' title='wasted'>wasted</a>. It would be unlikely that Mozart&#039;s work would be able to escape the trappings of the medium in which it was created. A sharing black hole.</p><p>Right now the measure of a person on social media as a medium is a number and the rate at which that number increases on any given day. I imagine in the future the people with the most thoughtful likes will get some kind of award for their skillful filtration of pictures, videos and memes. And when they get old they can somehow generate a Gantt chart of all their activities and events. Better yet you could have some kind of interactive virtual reality (VR) tour of your social interactions and that one time at band camp. Even as far as people who read allot of Yahoo news could have a portfolio of their favorite articles to show perspective employers that they are well read - something like books on a shelf or taste in music like a CD collection. A social collection - Social Intelligence (SI).</p><h4>Conclusion</h4><p>More of these online services need to provide a structured way for us to make productive use of the time we <a rel='external' href='http://www.businessinsider.com/social-media-engagement-statistics-2013-12' title='waste'>waste</a> on these services. Sharing cannot be the end game. </p><p>As far as Google spaces goes I give it a year before they shelf it. It seems like a sheet of paper as big as the world while still being nothing more than a sheet of paper. Right now I am searching the internet for invite links &quot;goo.gl/spaces&quot; so that I can see how many spaces I can join before everything gets crazy - because I can. I am sure many people will use it and many people will see &quot;potential&quot; in using it. But for me Spaces is just another black hole that people really hope will bring us cool stuff in the future internet of things. #best_ghost_town_ever</p> <p><strong>by owen</strong> <a href="http://owensoft.net/v4/item/2294/#comment">Post your comments on this article</a></p> 2016-05-20 15:59:02 Clean Code, Refactoring, Real world Example (programming) (Articles) http://owensoft.net/v4/item/2283/ <p>Here is a real world example of a long function that I presently use in production. The function creates/updates the meta information about a file or directory that is passed to it. The code is roughly 40 lines long. I could have chosen a longer function but for the purpose of the internet (aka social media) this seemed to be the most suitable. I am interested to see the ways this code can be &quot;cleaned&quot; up, code &quot;smell&quot;/bugs removed and made more maintainable as mentioned in <a rel='external' href='https://www.youtube.com/watch?v=k6VVURkxNkk' title='JeremyBytes - Clean Code: The Refactoring Bits'>JeremyBytes - Clean Code: The Refactoring Bits</a> (video); </p><pre><code> //save the meta information for a file to disk</p><p>function file_dir_set_meta($path, $data, $fullpath=false ){ </p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;global $metafile_ext, $metafile_directory, $default_dir;</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$tags=&#039;&#039;; //temp tag string &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(isset($data[&#039;tags&#039;])) $tags .= $data[&#039;tags&#039;];</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if($fullpath){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$path=substr($path, strlen($default_dir), strlen($path) ); //convert absolute to relative &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(isset($data[&#039;name&#039;])) { //create tags from the name if available &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if( trim($data[&#039;name&#039;])!=&#039;&#039; ) $tags.=&#039;,&#039;.$data[&#039;name&#039;]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;file_delete_all_tag_refs($path); //delete old tags &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tags_save( $path, $tags ); //save/update tag info</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$path = meta_filename($default_dir . $path); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$meta_filename=$metafile_directory . $path .$metafile_ext;</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if( !is_array($data) | count($data)==0 ){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//delete the meta file if it has no data &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;file_dir_delete_meta($path); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//save the data to the meta file &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unset($data[&#039;domove&#039;]); //remove garbage and empty keys &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unset($data[&#039;dest_fold&#039;]); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unset($data[&#039;unlink&#039;]); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(array_get($data,&#039;sort&#039;,&#039;nothing&#039;)==&#039;&#039;) unset($data[&#039;sort&#039;]);</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if( !flock_put_contents($meta_filename, serialize($data) ) ) return false; //write file &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//done &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return true; } </code></pre><h4>Conclusion</h4><p>Sorry that there is no colouring on the code but its PHP and it should be pretty easy to read. You can post your cleaned version in the comments or where ever. There are many ways to clean code as mentioned in the <a rel='external' href='/v4/item/2280/' title='Clean Code'>Clean Code</a> discussion but cleaning code should not be the focus of software development.</p> <p><strong>by owen</strong> <a href="http://owensoft.net/v4/item/2283/#comment">Post your comments on this article</a></p> 2016-04-28 08:02:07 Code Quality and Clean Code (programming) (Articles) http://owensoft.net/v4/item/2280/ <a href="http://owensoft.net/v4/item/2280/"><img src="http://owensoft.net/v4/photo/thumb/1907.jpg" /></a><p>I see the issue of clean code <a rel='external' href='http://blog.cleancoder.com/uncle-bob/2016/03/19/GivingUpOnTDD.html' title='mentioned'>mentioned</a> quite often with no <a rel='external' href='http://iansommerville.com/systems-software-and-technology/responding-to-uncle-bobs-comments-on-test-driven-design/' title='substantial'>substantial</a> examples. Programming theorists (mainly the web development kind) often propose &quot;patterns&quot; as a way to achieve quality code and choose to avoid talking about the bottomless pit of things that can cause an unsuccessful project. They prefer to spend thier time talking about <a rel='external' href='http://www.richardrodger.com/2012/11/03/why-i-have-given-up-on-coding-standards/' title='unicorns'>unicorns</a> instead of real problems facing programmers.</p><p>In my opinion the best code is no code at all. If you can&#039;t solve a problem with no code, at least try to solve it with as little code as possible. Each line of code is a possible bug, bottle neck, or creates extra work for the CPU. Web programmers are digging themselves into a hole. One should aim to have as little code as possible, less code, less bugs, code that is easy to replace with better code, and code that doesn&#039;t hide its meaning. </p><p><span class="h"><em>There is no way to avoid writing crap software. It is an imperfect medium, unless you have a robots.</em></span></p><p>There are also other considerations which I wrote about <a rel='external' href='/v4/item/319/' title='several years ago'>several years ago</a>. But the main caveat is this; there is no such thing as &quot;code quality&quot;, &quot;clean code&quot; or good quality code. Code quality is a made up term used to try understand why so many projects fail. The projects fail because they did not solve the client&#039;s problem OR fail to adapt to a changing environment. Programming is about solving problems, not stringing abstract classes together until you get bored and refactor the whole project. </p><p>Programming is dynamic - code is dynamic.</p><p>We should be encouraging new programmers to dive deep into new ways of solving problems instead of training them to use Java OOP patterns from 20 years ago. We need new ways to build <a rel='external' href='/v4/item/2246/' title='rocketships'>rocketships</a>, <a rel='external' href='https://www.youtube.com/watch?v=oNTuSm3qp90' title='bigger'>bigger</a>, better, stronger. There ARE better WAYS (plural) to build software.</p><p>That said, lets look as a few misconceptions I have come across recently; </p><h4>Polymorphism makes code simpler</h4><p>Its quite the opposite polymorphism creates room for expanding abstractions that give room for logic bugs. In most cases all one needs is a list of items and not classes with slightly different bits of code. Data should not be replaced with classes that need to be juggled in memory. Hiding business logic inside a object model will only lead to long nights and missed deadlines. Programmers need to realise that modeling the physical world inside a computer is not necessary.</p><h4>Simple versus Complex code</h4><p>This is depends on the solution that the program is trying to solve. A complex program often requires a complex solution. Even if you apply a simple solution to complex problem the simple solution - should - eventually reach a level of equilibrium with the problem it is trying to solve. If you a see a simple solution to a complex problem - it is too good to be true - there is often hidden code or features are missing from the solution. One cannot avoid complexity or physics.</p><p><span class="h"><em>if you had a choice would you write &quot;1+1=2&quot; or &quot;1++&quot; or &quot;New GenericNum = New OneNum.plus(New OneNum).ToNum()&quot;?</em></span></p><h4>Designing logic around classes</h4><p>This is a growing problem in application design. There is a growing breed of OOP developers who think in terms of classes which results in bloated software that often never gets finished - video games locked at 30 FPS. If I have 200,000 bank account types YOU DO NOT NEED to create 200k classes to abstract each account type. IT MAKES NO SENSE. 200k classes that inherit from super classes will only result in an unmaintainable mess of spaghetti code and tests. Not to mention all your batch processes will be bottle necked by slow initialization code. Fast code is often more important than code structure especially in systems which require high throughput. How do we solve this problem? You create a system of rules - NOT A SEA OF MODELS.</p><h4>Automated scripts</h4><p>If you have to use automated scripts to set up your environment then your tech stack might be too big. A big tech stack is like a big tree waiting for a small axe to cut it down. The first flaw in your stack will make your entire code base useless because it takes too much thought to set up. KISS. Less is more.</p><h4>Avoiding databases</h4><p>A common sign of an OOP developer who cannot adapt to separation of concerns. If you like building sand castles with on wet sand WITH wet sand then it will always get washed away. It is the same thing with code. A database is your friend stop fighting it.</p><h4>DRY versus KISS versus Refactoring</h4><p>People often talk about these things separately but they are interrelated. You will eventually realise that by trying to keep your code cohesive you end up creating complicated management systems inside systems (eating your own dog food). Developers often refactor simple pieces of code in order to not repeat themselves while making the entire system complicated - adding more and more code. Little functions everywhere that do little jobs. Classes with 30 methods are really one big method refactored into 29 sub methods that call each other in an invisible hierarchy.</p><p><span class="h"><em>So instead of creating simple consistent code they start making branching code and create bottlenecks - forks in the program.</em></span></p><p>Your client has 200k types of accounts but you realise that 100k of them are &quot;similar&quot; so you create a bottle neck class for those 100k account types. What ends up happening is that those 100k account types share common code and the moment that one of those types need to be unique you end up hacking a fork in the road so that you concrete an exception. It is like a magic little IF statement hidden in an interface. </p><h4>Code that is easy to change versus easy to replace</h4><p>These are not the same thing. One can create the most elaborate design that no one wants to change because the amount of code is too much for any one person to understand. Do not assume that you have job security. No matter how good your documentation is there is no way you can think of all the edge cases. Create code that solves problems but is not in the way of other programmers. Stop with the API shit. Make your code easy to replace.</p><h4>Long functions versus Object soup</h4><p>One stereotype is that long functions are bad. But what about an object soups? A long function will give room for abstraction and is often a very simple sequence. An object soup created to abstract a long function is really a system within a system. You start out with a sequence of tasks that are performed in order (aka long function) BUT then you decide abstract it away into multiple smaller classes that are detacted from its parent. This is bad because you&#039;ve created a little system within a system. This system is running on a logic of its own. Its playing by its own rules that you have to think about independently of the rest of the program.</p><h4>Code that is open for extension</h4><p>This is another one of those code traps that appear in OOP code. You spend alot of time making your bad code extensible instead of keeping your code simple enough for all the programmers on your team to understand. News flash; no one wants to extend your bloated code. Do not put bottlenecks in your software for other people to extend - it is a waste of time. People with access to the full source code will modify your code to solve new problems as they arise. <span class="h"><em>THEY WILL DEPRECATE YOUR ENTIRE CODEBASE IF THEY HAVE TO because it is easier and often cheaper than extending old code.</em></span> You DONOT WANT a trail of dependences/extensions attached to a piece of code you wrote 10 years ago. Create a external API - internal APIs are dumb bottlenecks.</p><h4>Being afraid to change your own code</h4><p>I am not sure where this comes from. Maybe your code is a complicated mess with a million edge cases or it is a glass house but if you are afraid to change your own code it is a sign that you do not understand the design of the system/pattern you are modifying and you probably should study/test it a bit more before you change or add anything to it. Or have someone else look at it in detail. Maybe hire some testers or consultants. Extending bad code is only going to make it worse.</p><h4>High cohesion and low coupling, how much code is too much?</h4><p>So lets say you have 200k classes and you try to organise them using inheritance. Lecturers never dive into this black hole of what to do when you have lots and lots of code. They often talk about things in isolation like &quot;in this case you do this&quot; and &quot;in this other case you do that&quot;. Lecturers do this because they do not want to focus on the real problem with inheritance - class organization. Why do I have 200k classes? <br />I have 200k classes because classes are maintainable.<br />I have 200k classes because they are easy for my project manager to read.<br />I have 200k classes because the client asked me to write them.<br />I have 200k classes because of TDD and abstraction.<br />I have 200k classes because I like complicated object trees and UMLs.<br />I have 200k classes because it gives me more lines of code.<br />I have 200k classes because maintaining a tree structure is fun and it makes me feel good about my self.<br />I have 200k classes because I am not sure what the future holds.<br />I have 200k classes because it helps me manage change and scope explosion.<br />In programming everything you do is for a reason. Some people are doing things for the wrong reasons.</p><h4>This API is better than that API</h4><p>All APIs are crap in some way. The bigger it is the more crap it is and it wastes developers time.</p><blockquote><p>If you’re overseeing a team of developers, my advice regarding coding standards is to let it be. If the people are any good, they make come up with a standard themselves, which they will then fully support. If they’re not that good, coding standards is the least of your problems. - <a rel='external' href='http://www.richardrodger.com/2012/11/03/why-i-have-given-up-on-coding-standards/#comment-416' title='Ferdy'>Ferdy</a></p></blockquote><h4>Conclusion</h4><p>There is no need to focus on &quot;code quality&quot;. Write your code to solve. There will be all sorts of problems relating to teams, models and processing speed etc. There is no &quot;right&quot; way to &quot;write&quot; code. There are alot of bad solutions to problems and alot of ways to waste time. Understand how systems work and spend alot of time experimenting. Expanding your knowledge base is the best way to know what works and what doesn&#039;t in a given situation. Magic bullets do more harm than good.</p><p>So the next time someone talks about design patterns or code quality ask them to show you some good quality code that solves a problem. They wont be able to because they do not know the problem you are trying to solve. And even if you tell them the problem they won&#039;t be able to tell you what to do because they spend all their time thinking about code quality instead of solutions to problems. <br /></p> <p><strong>by owen</strong> <a href="http://owensoft.net/v4/item/2280/#comment">Post your comments on this article</a></p> 2016-04-23 18:20:10 Unloading a 747 full of jellybeans (programming) (Articles) http://owensoft.net/v4/item/2277/ <a href="http://owensoft.net/v4/item/2277/"><img src="http://owensoft.net/v4/photo/thumb/1906.jpg" /></a><p>The answer right off the bat would probably be &quot;Google it&quot;. Unless you have had prior experience with large airplanes or have just time traveled from the future. The aviation authority does not approve of unauthorized people around their airplanes so this could be an NSA agent you are talking to.</p><p>Those points aside if you had the chance to use google then it would show that the question is a trick but let&#039;s say you can&#039;t use the internet; you would have to evaluate if it the question is genuine<br />or if it&#039;s a <a rel='external' href='https://en.wikipedia.org/wiki/Complex_question' title='trick'>trick</a>. </p><p>In this case the question seems like a <a rel='external' href='http://www.bing.com/search?q=Unloading%20a%20747%20full%20of%20jellybeans' title='trick question'>trick question</a>.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Correct answers to any trick question requires or depends on the <a rel='external' href='https://en.wikipedia.org/wiki/Presupposition' title='Presupposition'>Presupposition</a> of whether the person can tell me if; &quot;am I batman or superman?&quot;. </p><p>Then you move on from there;</p><h4>I am the Batman</h4><p>Being Batman I would open all the exits of the plane then use my <a rel='external' href='https://en.wikipedia.org/wiki/Batcopter' title='Batcopter'>Batcopter</a> to hoist the plane high in the air therefore using gravity to cause all the jellybeans to fall out. Causing minimal damage to the 747.</p><h4>I am Superman</h4><p>With great strength and inhuman speed I could probably remove every jelly bean from the 747 by hand in a couple minutes. Requiring no help or special tools.</p><h4>I am neither Batman nor Superman</h4><p>In this case the I would have to evaluate my surrounds a little more to determine the proper course of action;</p><h4>I am in a job Interview</h4><p>Do I want to work for someone/company that asks people random trick questions in interviews? Maybe, Maybe not, seems like dick move. You might just want to get up and politely excuse yourself from the interview. In either case you will have to rely on your interpersonal skills to get the upper hand in this situation. Try to gauge what the person wants to hear and play it back to them. If they seem to be old-school - be old school. If they are playing the I&#039;m &quot;hip on social media cloud internet of all things&quot; then say you will launch a kickstarter or something along those lines. Learn to read people especially HR and marketing people. Match wits.</p><h4>I am hanging with friends</h4><p>Are they trying to sucker me into another one of their crazy business ventures? Will we profit from this business idea that they are seeking my input. This may require some kind of profit sharing agreement before another word is said.</p><h4>I am on social media</h4><p>You are wasting your time and probably should be doing something more productive.</p><h4>Conclusion</h4><p>Trick questions are no fun and most of them are entertainment.</p><p></p> <p><strong>by owen</strong> <a href="http://owensoft.net/v4/item/2277/#comment">Post your comments on this article</a></p> 2016-04-05 19:28:39 Social media and why I still have a website (Articles) http://owensoft.net/v4/item/2268/ <a href="http://owensoft.net/v4/item/2268/"><img src="http://owensoft.net/v4/photo/thumb/1872.jpg" /></a> <a href="http://owensoft.net/v4/item/2268/"><img src="http://owensoft.net/v4/photo/thumb/1873.jpg" /></a> <a href="http://owensoft.net/v4/item/2268/"><img src="http://owensoft.net/v4/photo/thumb/1874.jpg" /></a><p>This morning my nephew asked me what my website really is and what purpose does it serve since its not making any money. Over the years having a website has had its perks. You will never know what its like to create something and try to keep it working forever unless you have a child or a website. You really don&#039;t need a website to do anything nowadays because you have all these other forms of social media which are easier to access in the mobile economy and give the same &quot;feeling&quot;. Social media has a one size fits all approach and makes us all think we are artists inside waiting to blossom but in reality we are all just building numbers in a RPG. Some people are <a rel='external' href='https://en.wikipedia.org/wiki/Archivist' title='archivists'>archivists</a>.</p><p>Either-way I will try to outline some practical reasons why I still keep my website running despite all the distractions that have come up over the years. Anything you want to do at a certain level is going to be hard - this is a certainty.</p><h4>Branding</h4><p>One of the main reasons I started my website was branding. Branding is key in todays economy, more money is spend on 30 second advertisements than the salaries of employees in large companies. Added to that getting a job is pretty difficult and making a good app is even harder than getting a job - #real #talk. Fresh out of high school I needed as much stuff as possible to &quot;pad&quot; my resume so having a website was a easy way to add content to a resume - that was 15 years ago. Nowadays one could do the same with a free facepage but I&#039;m not sure what the youngsters are using for branding nowadays. Social media activity discourages personal branding because a main part of their business is paid advertising - selling other people&#039;s brands to the masses of consumers. If you are lucky you could be one of the few <a rel='external' href='https://www.instagram.com/prince_pine/' title='who break out'>who break out</a> but most spend all their time reading link bait articles and watching an endless supply of insular videos in a <a rel='external' href='https://en.wikipedia.org/wiki/Echo_chamber_(media)' title='echo chamber'>echo chamber</a>.</p><h4>Programming Experiments</h4><p>I have been programming forever, since high school. A lot of my experience has been garnered from having a test bed for which to let other people see my work and also a place where I could get all the comment spam in the world. I was never a designer but I learned several tricks over the years by constantly experimenting with the <a rel='external' href='/project/masthead/' title='trends of the day (56k warning)'>trends of the day (56k warning)</a>. Programming is about patience, dedication and being able to look back to where you have been and plot a course to where you want to be.</p><h4>Writing</h4><p>My English literature teacher had always encouraged me to write and it became a very important part of my existence to &quot;produce&quot; more than I &quot;consume&quot;. My spelling may not be all that and I often ramble on continuously about topics I am passionate about - <a rel='external' href='/v4/category/23/' title='mostly software programming'>mostly software programming</a> and a little bit of <a rel='external' href='/v4/category/18/' title='meta physical poetry'>meta physical poetry</a>. These articles take a considerably long time for me to write mainly because I have ensure that I avoid looking like a self-righteous lunatic.</p><p><a rel='external' href='https://en.wikipedia.org/wiki/Publish_or_perish' title='Publish or Perish'>Publish or Perish</a> is the constant struggle between spending my time doing something I &quot;like to do&quot; versus doing something that &quot;earns money&quot;. I used to post alot on social media until I realized that it is a waste of time to contribute to a ever increasing interstellar black hole of content that never wants to let you do other things. Surely social media is easy and efficient but at the end of the day your influence is limited to how much money/time you are willing to give up in order to gain more followers in great numbers. <span class="h"><em>I created a post on my website and gave myself one million likes and I still do not care.</em></span></p><h4>A huge Archive of your own stuff</h4><p>Another advantage is that a website gives you a reference point for own your opinions. Unlike social media which seems hell bent on pushing more and more information and entertainment in front of your eyes subduing your own personality. A website is a growing collection of YOU as opposed to the things you like/consume. I can go back to an article I wrote <a rel='external' href='/v4/item/260/' title='10 years ago'>10 years ago</a> and do some introspection as what my thought process would like back then - try to do that on social media. Apparently social media actively discourages <a rel='external' href='https://en.wikipedia.org/wiki/Introspection' title='introspection'>introspection</a> and self analysis. Maybe people really do not want to see themselves as they truly are/were?</p><p>I often ask questions such as what are your <a rel='external' href='/v4/category/16/' title='favorite songs of the year'>favorite songs of the year</a> and many people cannot even remember what exactly they liked just last year. <span class="h"><em>It is as if the constant flood of entertainment has made people numb to the passage of time.</em></span> Social media seems to not want people to be cool themselves but would rather they be cool by association like apples in a basket. Maybe no one really needs to have their own stuff anymore? I am not sure.</p><h4>Provides Focus</h4><p>Distractions, distractions. Social media is a numbers game. Everything is a shifting sea of information and bias. You can never really tell who is selling what or promoting something or the other. A website provides me a certain level of focus so that I avoid being fickle or flip floppy - changing frequently, especially as regards one&#039;s loyalties or affections. Anything I start/post must be able to stand the test of time. I am not going to get up one day and switch my whole website to Angular because one article says its the best thing since slice bread. Information has to weighed against its current benefit versus future potential. Its hard to focus when your screen is full of flashing lights. Things get thrown online with no rhyme or reason or backstory, its either entertainment or advertisements for something to come in the future that may or may not affect the price of bread. <span class="h"><em>Oh look at this! This is cool! This is new! This is better than the thing you have now! Read it! Watch it! Your life will be changed! Send it to 6 of your friends. Social media is the email chain letter from the 90s.</em></span></p><h4>Control</h4><p>I recently had a blog on Posterous before it was shutdown because it was acquired by twitter. The tech landscape is sea of competing technologies and companies competing for user base. I have been aware of this from the early days. Social media will never do anything that will make it lose users and it will never add a dislike button. It is like a bad version of the Tron movie or the Matrix. Ajax turned into Unobtrusive Javascript turned into single page apps that turn into interactive UX. Flash is somewhere in there but you can never tell who is going to change something and make a new HTTP wrapper with some documentation. It is all the same thing with different colours and logos,</p><h4>Bias</h4><p>I noticed that when people have a situation of 2 competing things they will choose the one they can afford and say the other is not worth the cost. It seems as if social media is forcing people into a corner where they have to chose to either like something or regulate it to worthlessness. There is no in between, gray area in anything, you keep promoting the things you like and avoiding the things you don&#039;t like until you can&#039;t tell why you liked the thing in the first place. Too much of one thing I guess.</p><h4>Conclusion</h4><p>Websites certainly are not for every one. Most people are fine with a twitter feed or posting memes and quotes on the facepage. I myself have 2 twitter accounts @newogame and @softnewsmag which I check on ever so often. The money spent on hosting a website could be better spend on a Netflix subscription or new Minecraft themes. Eitherway if you are alive you have to spend your time doing something, so you might as well do something that other people can see instead of spending all your time watching other people&#039;s advertisements. </p><p><a class="ebv" id="WCSqHOhdrrk" href="http://youtube.com/watch?v=WCSqHOhdrrk" ><img src="http://i.ytimg.com/vi/WCSqHOhdrrk/hqdefault.jpg" /></a><br /><br /></p> <p><strong>by owen</strong> <a href="http://owensoft.net/v4/item/2268/#comment">Post your comments on this article</a></p> 2016-01-21 07:47:13 Failed web frameworks, open source is the new enterprise and other rants (programming) (Articles) http://owensoft.net/v4/item/2262/ <a href="http://owensoft.net/v4/item/2262/"><img src="http://owensoft.net/v4/photo/thumb/1843.jpg" alt="a wild snorlax appears" /></a><p>I usually avoid writing about technology/software that I do not use or care about. But there seems to be a growing swell of nonsense that is being shilled everywhere and hope springs high as these articles aim to refine basic concepts at will - <a rel='external' href='https://www.youtube.com/watch?v=JIzTXZ7jsiI' title='just cause'>just cause</a>. There seem to be using software developers (especially web) as guinea pigs that live, eat and breath on &quot;future potential&quot;.</p><p>Usually these articles are by evangelists/cheerleaders that claim &quot;this&quot; or &quot;that&quot; is the &quot;best thing since slight bread&quot; and every one in the tech community jumps on it like its a grenade made of money without the least bit of investigation. Alarms bells should go off right away when phrases such as &quot;future&quot;, &quot;modern&quot; or &quot;mobile&quot; are used but this is happening less and less. I am not sure if devs are jaded or disillusioned spending too much time in a <a rel='external' href='https://en.wikipedia.org/wiki/Echo_chamber_(media)' title='echo-chamber'>echo-chamber</a>.</p><p>This is another reason why these web frameworks do not stand the test of time, because they constantly sell themselves to be more than they actually are, only to herd developers into a pen until they can no longer hide the internal short comings. All these big frameworks want to see how much developer time can be wasted before they trash it and move on to something else. Switch API levels, add random requirements just to wall in and annoy developers - increase their hold on the platform. <a rel='external' href='http://www.babylonjs.com/' title='babylonjs'>babylonjs</a> ever heard of it? you will soon. Its going to be big once they start pushing it out to the cheerleaders.</p><p>You have these articles that get published such as <a rel='external' href='https://medium.com/@skvarekm/whyreact-native-might-become-the-first-multi-platform-framework-that-actually-works-ae819bf32721#.slxuuxfp6' title='&quot;Why React Native might become the first multi-platform framework that actually works&quot;'>&quot;Why React Native might become the first multi-platform framework that actually works&quot;</a> yet there is no mention of any other platform other than Android and IOS. Why? because these frameworks do not care about advancing technology. They just want developers to help test it so they can get free industry support and attention. </p><p>The title of the article is &quot;first multi-platform framework&quot;. And I see no mention of Blackberry. Seems logical to mention Blackberry or any other platform, no? Maybe I should mention windows phone? You have this thing that is barely 6 months old and its sweeping the &quot;dev-community&quot;, most certainly it should support as many platforms as possible. No? Unless things are not as it seems and they have re-defined what &quot;multi-platform&quot; means. Or maybe it is a <a rel='external' href='https://en.wikipedia.org/wiki/Echo_chamber_(media)' title='circle jerk'>circle jerk</a> article contrived to build momentum for an unproven framework?</p><p>These frameworks only want to increase their own market share and pull in as many developers as possible - expand their community. It is a ongoing battle between Microsoft, Apple, SAP, Oracle, IBM, Nokia, Google and a countless list of major companies to see who can get the most developer attention on their platform the fastest. Right now Google seems to be winning that race. I just have no confidence in its security. Its almost a free for all. It is ridiculous what goes up on the market place - its worst than email spam.</p><p>All these frameworks need something to ride on, some kind of high horse on which to parade their <a rel='external' href='http://rexstjohn.com/is-react-native-cross-platform-snake-oil/' title='snake oil'>snake oil</a>. Another reason why these platforms do not last, they exist and were created to satisfy the mission of their backers. They want to get as big as possible, as quickly as possible without having to care about other platforms, long term support, backward compatibility or any kind of hard <a rel='external' href='https://en.wikipedia.org/wiki/P_versus_NP_problem' title='problem'>problem</a>. This is a fundamental weakness. This is why they all fail. They are created by an insular group of cheerleaders who promise the world but only deliver todo lists. An infinite supply of <a rel='external' href='http://todomvc.com/' title='todo lists'>todo lists</a> that are the same but slightly different, just enough to drive you crazy.</p><p>Oh look its &quot;OPEN SOURCE! YOU CAN BUILD PLUGINS!&quot; . Open source is the new enterprise. The whole definition of open source has been twisted into a scary mix of APIs and paid LTS support deals under the table. What is open source nowadays? Does anybody know? Is open source an API we spent 2 years building in secret? Seriously? Either use it as is or fork 220k lines of code generated by robots! Hope for a response to you question. Is this how its going <a rel='external' href='https://www.youtube.com/watch?v=Femqf_Mel4U' title='to be'>to be</a>?</p><p>Here is an example of what we used to call open source: <a rel='external' href='http://www.azillionmonkeys.com/qed/hash.html' title='Hash functions'>Hash functions</a>. </p><p>Today open source is this; <a rel='external' href='https://developer.wordpress.com/calypso/' title='this'>this</a> - APIs build in secret and cast down on the populous. <span class="h"><em>A single interface to manage all your WordPress or Jetpack-enabled sites, built with the latest web technologies and used by millions of people — and now it&#039;s open source. 220,000 lines of code! woohoo!</em></span></p><h4>Open Source CLAs</h4><p>Oh yes the <a rel='external' href='https://en.wikipedia.org/wiki/Contributor_License_Agreement' title='Contributor License Agreement<br />'>Contributor License Agreement<br /></a>. If you have never contributed to Open Source you would probably never know about these.</p><h4>On to the future</h4><p>At one point native was the best, then came the Web. Web won out, well partially, no one is sure, the jury is out. Now the whole world is trying to carve out a space to call their own in the disposable camera that is the web landscape. Its like VHS vs Beta Max. Something has to be dead for something else to work properly, PHP vs Node, SQL vs NoSQL, OOP vs Procedural, but nothing works properly because we spend all their time hating on the other side while ignoring our own bull. Everything comes down to one or 2 things because its just easier pull a marketing budget behind it. Its not about solving problems, its about eye balls and who has the most API users.</p><p>Remember HTML5? That thing that was suppose to save us from the evil flash? What do we have now? Laggy, 10 mb web pages that take up more memory than native applications? Or gigantic creeper brochure websites with in-line advertisements that have more JavaScript than content? Magic, self rearranging website UX/UI interfaces that are responsive to mobile phones but not to desktops? Is this the future? Here is a website where you can download free <a rel='external' href='http://html5up.net/' title='Responsive HTML5 and CSS3 Site Templates'>Responsive HTML5 and CSS3 Site Templates</a>. What now? When are we going to get the cool-better-than-flash stuff? How much RAM does my computer need to have to run it? Should I update my browser, SSL certificates, operating system, login with my facepage account? - just so that I can bask in the latest in modern-web-technologies? Should I buy a iphone 8 and a ipad so follow a link to your facepage/twitter feed? facepage is not even responsive, it has a whole separate mobile website - why?</p><h4>Conclusion</h4><p>We have gotten some good things from all these dieing frameworks - lots of dead projects that would have lived longer had they not crippled themselves by being so short sited. Now we can look back at our junk folder and say &quot;nothing tried, nothing done&quot;. There will always be web frameworks and they will always claim to be &quot;cheaper and faster&quot; but hopefully in the end we will get some real gems like JQuery that actually work. The lesson to learn from JQuery is that it is what it is, it solves more problems than it creates.</p><p><strong>What the web development community needs to ask itself is;</strong><br />Do you want spend your time reading articles - being continually herded between these experimental frameworks? Or do you want to write awesome software that solves problems?<br />What are you willing to sacrifice so that you can chase this dream of the Internet of things?<br />How many more smart phones do we have to buy before they actually become smart?<br />Who will have to pay for all the free/open/modern/future benefits that are on the horizon? the users? the founders? the devs? the advertisers? the telecoms providers?<br />How many platforms must die so that your favorite platform can become the standard of the future Internet?</p><p>Anyway, Merry Christmas and a happy 2016 when it comes. Hopefully next year we will be building rocket-ships.</p><p><a class="ebv vimeo" id="1124192" href="http://vimeo.com/1124192" ><img src="" alt="1124192" class="vimeo" /></a><br /></p> <p><strong>by owen</strong> <a href="http://owensoft.net/v4/item/2262/#comment">Post your comments on this article</a></p> 2015-12-21 19:59:13 Pitfalls of OOP, abridged (programming) (Articles) http://owensoft.net/v4/item/2256/ <a href="http://owensoft.net/v4/item/2256/"><img src="http://owensoft.net/v4/photo/thumb/1827.jpg" /></a><p>A couple years ago I wrote an article on the <a rel='external' href='/v4/item/1251/' title='downsides of modularity'>downsides of modularity</a> so it is quite fitting that I should try to tackle Object Oriented Programming (OOP). I decided to create this abridged/summary article because the original was very long winded which is not surprising in this day and age of <a rel='external' href='https://en.wikipedia.org/wiki/Cargo_cult_programming' title='cargo cults'>cargo cults</a>. Living in a hall of mirrors.</p><p>I am going to rant about certain traps of &quot;pure&quot; OOP programming for a bit (notice I emphasize the world &quot;pure&quot;). Because everyone uses OOP, and OOP is useful in contexts where it is not being abused. When Pure OOP is used exclusively in place of simpler structures like for-loops, arrays etc developers tend to fall into a pit. There is a strange obsession in refining simple structures into increasingly abstract constructs. Also most people who do not understand computer programming and feel that OOP will somehow bridge the knowledge gap between novice apprentices and master architects.</p><p>Disclaimer: <span class="h"><em>I am going to kick your puppy.</em></span> I am going to complain about trends and memes that you hold dear to your heart. This article is not for managers or HR people looking to solve problems with software dev project overruns - its too late. I will use a lot of random tech jargon, you&#039;ll have to use a search engine if you are not familiar with some of the terms.</p><p>Lets go;</p><h4>Pure OOP encourages tunnel vision</h4><p>Have you ever seen someone trying to create something in OOP when they could easily take the procedural approach? This happens because they are locked into the idea that OOP is the only &quot;modern&quot; way to write computer code, and start setting up scaffolding everywhere in case someone comes after them to maintain the code (no one ever does). Any foreign or specialized construct is seen as a step back instead of an advantage; they often have problems with; Octrees, RDBMS, JQuery, SQL, PHP, CSS, linked lists, functional programming, high thru-put, low latency, <a rel='external' href='http://www.azillionmonkeys.com/qed/hash.html' title='hashing'>hashing</a> etc. Everything seems like a broken hammer if all you have are nails.</p><h4>Pure OOP is a rabbit hole</h4><p>The more object oriented code you write the more complicated it gets, the more memory it consumes, the more people you need to help write it. It never gets simpler. The only time OOP code gets simpler is when you re-factor and even then you are just re-creating a different version of the same rabbit hole to jump into. Refactoring is a certainty. You will re-factor a big OOP project at least 2 or 3 times in the dev cycle until you end up scrapping it for one reason or <a rel='external' href='/v4/item/1802/' title='another'>another</a>. </p><h4>OOP Maintenance problems</h4><p>Many OOP evangelists claim that OOP is easy to maintain/read but this is only true for the original developers. Most new developers who take up old OOP projects (after the original developer has left) either re-factor, or never make any significant change to it. OOP devs fear breaking old OOP class systems and they get bored with old systems quickly. OOP code has a upper limit to how much you can hack at it, eventually you will have to re-factor it, deprecate, LTS - see Drupal 8, Java. Simply making code easier to read has no effect on maintenance because <a rel='external' href='/v4/item/319/' title='programming is dynamic in nature'>programming is dynamic in nature</a> - its not just about &quot;how&quot; you write it but &quot;what&quot; you write. You are writing programs for a computer, not reading class. OOP devs prefer to design their own structures, which leads me to my next point. </p><h4>Pure OOP programmers hate other OOP programmers code</h4><p>There is a constant battle to design the perfect class structure but no one seems be able to find the right way. Every year there is a new framework or API/Promises for something and it all gets wrapped up under the OOP bubble. No OOP programmer is brave enough to go off on their own and develop something new, so they just keep building the Tower of Pizza. </p><h4>Pure OOP is inefficient and unsustainable</h4><p>Lets say you design a loan class. And you have 1 million loans in your system. If you try to load all those classes into RAM so that you can call the <strong>loan.all.check_balance()</strong> function what do you think will happen? The basic mindset is that everything must be live in memory - encapsulated in a class/object so that it can be instantly accessed and the dev can masturbate syntactically. When everything gets slow they say you need to run on &quot;modern hardware&quot;. Modern hardware, better-enhanced-ultra caching, more memory. Caching is the first sign of problems in any kind of software. There is a point where OOP overlaps with procedural and functional but this is ignored in favor of POOP.</p><h4>OOP code never ends</h4><p>Feature bloat is one thing but you have the case of the never ending OOP program. It is connected to the desire to build the perfect class structure. Objects that load other objects that create objects of a certain type just to do this other thing. An obsession grows within the developer to make every class as generic as possible, while at the same time writing more and more code. Then they build a plugin feature for themselves so they can build more OOP code for the OOP code to run. Round and round until it get deprecated.</p><h4>OOP has long development times</h4><p>You technically in this day and age write 5000 lines of boilerplate OOP code that has no output, no input, follows every best practice, compiles and passes all its tests but DOES NOTHING AT ALL. Hello world is 2 lines but a finished App is 100k plus 2 years in development. At the end they will blame the skill of the developers or the version of the software being used but the common nexus is always the pure OOP mindset. </p><h4>OOP is a house of cards</h4><p>I have seen this everywhere; you declare objects and you put them into a list or listen for them in a pool. Nothing can go wrong in software where the templates are hardcoded against a framework API which is hardcoded against Business Logic against MVC presentation layer which has 3 files per feature which are stored in separate folders - NOPE nothing wrong with that. Somewhere in the code is a factory that accepts a string and adds the object to a array that it monitors. Even the most advanced frameworks operate this way. There is always a singleton somewhere. Or a global variable that stores something that the objects need to share. A central point of failure or a web of dependances.</p><h4>OOP bloat complicates everything it touches</h4><p>At one point in the last century ASM blocks were the most complicated form of coding. You would see an ASM block in code somewhere and you would not dare touch it for fear your computer would explode. OOP has taken over this challenge. There is no upper limit to how complicated even the basic software can get if you OOP-ed it <a rel='external' href='/project/oneplusnine/' title='enough'>enough</a>. Pure OOP encourages programmers to add features that users might never use - just in case. You can take a loop that counts from 1 to 5 and then <a rel='external' href='/v4/item/2145/' title='write 5000 lines'>write 5000 lines</a> of OOP code that produces the same output and has tests to prove that it works. <span class="h"><em>You can write 3 lines of code to read a text file OR better yet you can use an API to send it into a cloud service which creates a JSON feed that can be consumed by your twitter account that is linked to a OBJc iphone app through push notifications. You want to live forever?</em></span></p><h4>Pure OOP code is syntactic sugar</h4><p><a rel='external' href='https://en.wikipedia.org/wiki/Syntactic_sugar' title='Syntactic Sugar'>Syntactic Sugar</a> or busy code. Basically a way to organize modules and create virtual types for object pools. It may seem easier to read because of its verbosity. But you do not want &quot;verbose code&quot; - you want LESS code. If you can write it using 2 lines and a loop then why use promises and call backs? I imagine one day there will be best practice police that go around and reads all the code written in the world and say; &quot;hmmm that is some sexy best practice code right there! Good job!&quot;.</p><h4>Pure OOP eats its own dog food</h4><p>You can have applications that are frameworks built on top of frameworks and at the same time consume APIs that they create for themselves. Inception style. Round and around. You can have a App that has a API built on a framework of APIs that publishes APIs for other apps to consume. You can build your own API or you can fork (50,000 lines of code) and make improvements and we may or may not add them into core. </p><h4>Pure OOP does not take responsibility for any failures</h4><p>It is as if we have not learnt anything from Java, Symphony1, STRUTS, Eclipse. No matter how many awful things that get created, we still turn a blind eye to the years spent using hundreds of different (now defunct) frameworks that produce barely functional software that we gladly threw in the waste bin as soon as Node.js came out. The common fallback is either &quot;right tool for the job&quot; or use X in this situation and Y in this other situation. Developers are usually blamed for failed projects, not the platform or anything else. Pure OOP is in a constant battle to define who it actually benefits; the developers? the designers? the project managers? the community? the users? the maintainers? No one knows. However, there is one common glitch in all these failed projects but no one wants to admit that their own kid is ugly.</p><h4>Conclusion</h4><p>All these scenarios will not happen in every case. There are alot of good things about OOP but there are certainly pitfalls that people live in and dance around in a circle. Pitfalls in which we swim for years and years until something new comes out and they dive it again. They create huge, painful, static pieces of software that cost millions of dollars and countless man hours as rigid as concrete. Programming is about solving problems not about wiring things up in obtuse best-practice ways. OOP is a tool that you use. Learn better ways to solve problems faster and make use of all the tools you have at hand.</p><p><br /></p> <p><strong>by owen</strong> <a href="http://owensoft.net/v4/item/2256/#comment">Post your comments on this article</a></p> 2015-12-05 14:59:11 ES6 solves no problems and lets build a rocketship (programming) (Articles) http://owensoft.net/v4/item/2246/ <p>Now lets get something straight right off the bat; I like new stuff like everyone else in the software industry. I like new updates for my smartphone, I am not a fan of the superfluousness transitions in the new Android flat design ( somethings are just a waste of UX time ). But I like front collision sensors in cars. I like 3d force touch - right click for touch screens - the long hard press. These are life changing things that will revolutionize the way we as humans live our lives. /sarcasm</p><p>This article is not about <a rel='external' href='https://leanpub.com/understandinges6/read' title='ES6'>ES6</a>, it is about the promotion of new loops which are really for old loops. It may seem like I am trolling but I am not. Often times this new stuff does nothing but make our lives as software developers and programmers more cumbersome without adding anything in terms of value. The internet is virtual tutorial machine. You have to use &quot;modern&quot; this, or &quot;modern&quot; that on a modern browser if you want to be hip at being modern at doing old hat. <span class="h"><em>There are more articles telling new programmers how to build a killer app than there are killer apps that have been built using these tutorials.</em></span></p><p>People have already started shilling everything they can find online about ES6. I ask them what they are going to do with it - they have no answers except that Javascript is EVOLVING! The concept of &quot;new&quot; technology and new ideas is lost on the pubescence minds of the tech horny. Reality check IMHO: Its just Javascript. It is not going to help me build my rocketship.</p><h4>More Complicated Code</h4><p>At its base level EMCAScript 6 does nothing more than a new way to make my already complicated code more complicated and obtuse. I can hide my callback hell inside a whole new type of call back hell that is so deep that I can swim around inside it for days. The bugs EMCAScript 6 fixes aside, everything else might just be allowing us to continue writing more awful bugs memory hogging code that we will NEED more tools/services to fix. </p><p>I have some complicated code, but the code is never more complicated than I can handle. I have so much complicated code that I have to stop optimizing it because no one will be able to understand why it is the way it is. No one lives forever and code is disposable - some of it - especially the simple bits. This is a balance that I have to make. The complicated bits are where the money is; Supporting and maintaining awful code is a billion dollar industry. </p><pre><code> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function () let d []=(c) =&gt; (b) =&gt; (a)=&gt; a * a + e(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if( d===6 ) temp = new Object(a); </code></pre><p>Why would anyone want to write code like that?</p><p>Why do we have so much complicated code? We have complicated problems and whenever I take up a new language or framework, I silently hope it will help me build my rocketship, reduce the complexity in my life. Fail fast. I am no-where close to finishing my rocketship. The process is painfully slow because the tools I have are dumb/verbose and they seem to be getting dumber by the day. I keep getting tutorials for using these dumb things only for me to skip to the end and realize that all I see are old loops and todo lists. Many, many old loops and todo lists. I have seen it all before. We have been writing todo lists since QBasic and Foxpro. Even google&#039;s new open source Artificial Intelligence engine is a big todo list API.</p><h4>New ways to do old loops</h4><p>There are a handful of basic ways to do loops/iterations. There are another million ways to PRETEND to not do a loop. These other ways a problem. I already know how to iterate over a list, I do not need new ways to do it unless these new ways are going to offer me something than I CANNOT ALREADY DO. Its all remixes, prequels and old crap in new wrapping paper. I have 26 million records, do you think I am going to load them up into object space so that I can use the fancy new Collection iterator? No.</p><h4>All debugging all the time</h4><p>I have seen technology stacks that are 90% development/debugging and 10% runtime. Almost like we(web devs) have made an industry upon spending all our time developing and debugging forever into an infinite rabbit hole. If you spend 90% of your time just setting up your environment you better be building something cool. I want to launch a rocket ship, how can this thing help me launch it FASTER?</p><h4>The best way</h4><p>Another thing I notice is that alot of time is spent trying to figure out what is the best way to do a task - especially in programming. It has become a business of telling programmers how to write code, tutorials, best practices, ebooks, weird new ways of doing web 2.0, redefining recursive functions, MVC nonsense. Programmers are being herded from one side to another like cattle. We seem to have forgotten our web 2.0 past. I do not care about all these things. I want to build a rocket ship that flies into space and probably defies the laws of physics (but that is a optional edge case). I want to build something awesome and I want to build it quickly. I do not want to spend all my time reading documentation that is constantly evolving. Chasing the modern carrot.</p><p>I do not have a problem with scaling or continuous integration or continuous delivery or version control. I want the thing to work and run - maybe with just 100 lines of code. I do not want to use a clustermess framework to write 1 million lines of very abstracted-verbose merry-go-round code that I have to use version control just so I can keep track of house of cards that I MIGHT finish building. I want it done, like today or 2 weeks. If I can&#039;t finish it quickly, at least let it still be supported the next time I pick it up.</p><h4>Conclusion</h4><p>The problem we have in programming today (as we have had since the beginning of time) is; how do we solve more problems in less time. How do we launch rocket ships and create flying cars? How do we prevent them from crashing in to the ground and wasting our development time? The problem we are having is NOT continuous integration. Contiguous integration is a side effect of having TOO MUCH CODE. OOP Soup. Contiguous integration is masturbation. We want better solutions to reduce the time we have to spend programming and reading tutorials. Not better ways to keep writing objects.</p><p>I want to launch my rocket on a Pentium 3 processor - not a cloud server in Alaska with 256gigs of RAM that I have to set up a API key to use. We do not need new ways to do old loops and terminal clients. We do not need new ways to represent a global singleton or arrow functions. </p><p>We NEED new constructs, concepts and technology. Enough with these pretend loops and &quot;modern&quot; merry go rounds languages.</p><p>In a few years Javascript will catch up to all the other languages that we use today and then maybe - just maybe - we will start to see some real innovation.<br /></p> <p><strong>by owen</strong> <a href="http://owensoft.net/v4/item/2246/#comment">Post your comments on this article</a></p> 2015-11-11 18:31:41 The internet is a tutorial machine (programming) (Articles) http://owensoft.net/v4/item/2244/ <p>I spend alot of time programming, ALOT OF TIME. I spend more time programming than I spend reading articles on the internet about things that are going to big in the &quot;future&quot;. It is hard to find good articles on the internet. Most articles are tutorials about the future, wearable tech, virtual reality, self driving cars. Usually written by 2 kinds of people; <br />1: &quot;<a rel='external' href='/v4/item/2200/' title='Future Geeks'>Future Geeks</a>&quot; who spend all their time reading/testing out new evolutionary &quot;web tech&quot; that is going to &quot;change how we think about computers/IoT&quot;. <br />2: The second set are people who exist only to write/disseminate bait articles about things that programmers &quot;should&quot; be doing as opposed to the things people are actually doing. </p><p>Both these people write certain kinds of articles: mostly tutorials that promote one thing or the other that they think everyone should be doing. Here is a round up;</p><h4>Basic Tutorial Articles</h4><p>These are standard &quot;new programmer&quot; articles that try to say that everybody on the planet should learn programming because it is a basic human need like food and shelter or reading or math. These articles usually start off as a quick guide to help a clueless person male or female become interested in computer science by offering fantastical images of the glory in learning programming - &quot;look you can write a todo list in 2 weeks!&quot;</p><p>Some will get it but most will not. Programming is hard but tutorials are easy to write, so we get tons of them. These tutorials most often will send people to some kind of online learning website - dead end - without any kind of direction as to what they should do with this new found skill.</p><h4>Articles for people who kinda know what they are doing</h4><p>These are the articles that say &quot;hey, you kinda know what you are doing, but you should really be doing this OTHER thing!&quot;. These articles usually try to get you to do something that the article thinks is a good thing - you should stop what you are currently doing and do this other thing &quot;immediately&quot; because &quot;it is the future!&quot; or it will help you be awesome or something like that. Reach you true potential edge case. Most of these articles never really say anything of substance and are usually written by designers and team managers who hope that everyone on the planet was as cool as they are. Hey you should be using bootstrap because its the best! Hey you should be using bootstrap 4 because its the best! It never ends. All they do is feed carrots. They lead, you follow.</p><h4>Feature list articles</h4><p>The standard feature list article; <strong>Why you should learn Go</strong>. A quick browse would make you think &quot;yeah GO sounds pretty cool, maybe I should take some time and learn it so that I can do some awesome things with it&quot;. However some red flags pop up right off the bat;</p><blockquote><p>As technology evolves, so does the number of new programming languages. Trends such as ubiquitous multi-processor devices, the explosion of mobile devices and the current IoT revolution have helped drive this explosion. But whatever the cause, developers are now living in an increasingly fragmented world.</p></blockquote><p>This article is telling you what you should be doing. That alone is not bad but if you scroll through the article there is not a single line of GO code or any examples of what will result from you learning this new &quot;thing&quot;. What can I do with GO? Can I write a game in go? No? Can I write a web page in go? Can I build a database? Can I build a mobile app in GO? What does GO run on? Windows? Mac? Linux? Does GO have app store? These are important questions that are relevant to programmers! None of these questions are answered.</p><p><span class="h"><em>&quot;Go currently has around 25 keywords, as opposed to 50 or more for languages like Java and C#.&quot;. yeah cool, so? 50% less is more?</em></span></p><p>Yeah so I should learn GO because its awesome at having half the features of every other language? Sounds like fun. Sounds like something I need to be doing. /sarcasm</p><p>That being said the smart tutorial reader will go out and look for an opposing article to try to get some sort of balance. A quick google search for &quot;Go sucks&quot; provides some interesting results. Anti-cheerleading articles tend to be more concise and thorough - I am not exactly sure why - maybe its the people who write them.</p><h4>Articles for people with experience</h4><p>Using the magic of google surprisingly the first entry points directly to <a rel='external' href='http://nomad.so/2015/03/why-gos-design-is-a-disservice-to-intelligent-programmers/' title='Why Go’s design is a disservice to intelligent programmers'>Why Go’s design is a disservice to intelligent programmers</a>. The difference between this article and the previous one is that it is clearly written with a purpose other than blow air up your bass. It is not trying to sell you on the virtues of the future &quot;internet of things&quot;. The article is speaking specifically about a topic as it exists in its current context, today, not about some future dystopia or potential use cases that you might run into. The article contains what any good <a rel='external' href='http://yager.io/programming/go.html' title='article'>article</a> should have examples and <a rel='external' href='http://blog.shinetech.com/2011/08/26/asynchronous-code-design-with-node-js/' title='lessons'>lessons</a>. <a rel='external' href='http://notes.ericjiang.com/posts/751' title='Clear'>Clear</a> definitions of the problem <a rel='external' href='http://www.toptal.com/nodejs/why-the-hell-would-i-use-node-js' title='space'>space</a> are essential to providing the reader with some kind of direction rather than just saying &quot;hey, look at this its cool! Look, Look! It can make you do stuff that you have never dreamed! Stuff that you should be doing!&quot;.</p><h4>Bandaid Articles</h4><p>At some point the internet will begin to catch on to these article writers and thier bull. At this point they will start to writing articles about things that were &quot;fixed&quot;. &quot;Oh, this thing that love and everybody hates is fixed now, you can use Promises or X feature in the latest build!&quot;. Oh you hate <a rel='external' href='http://callbackhell.com/' title='callback hell'>callback hell</a>? Here is the solution! There are ways to avoid it by using best practice X, grunt and this custom build script that I used to read NPM in a special way. Right tool for the job! To each his own! Are signs of a bandaide article written by someone who spends more time writing/reading articles than using the tools than they talk about. They spend all their time trying to fit a square peg in a round hole and try to alleviate you worries with one-size-fits-all solutions to deep rooted problems.</p><blockquote><p>If you use bable/traceur, you can even use the async/await syntax which is cleaner still.. in effect the async function is something like a promise bearing coroutine that continues execution at the point of await... and returns the promise value into injection. You can also use ES6 generators to <a rel='external' href='http://stackabuse.com/avoiding-callback-hell-in-node-js/' title='avoid callback hell!'>avoid callback hell!</a></p></blockquote><h4>Conclusion</h4><p>These articles are doing a disservice to programmers. They do nothing more that publicize niche tools for the sake of building a following - hoping to create a ground swell of something - push enough people off a cliff and some might live to fly. The others be damed to the rocks below. The articles add pointless bloat to job postings and management meetings. As I said before: if something is good it will prove itself good in due time and on its own accord (or by the amount of hate it gets). </p><p>Alot of time and effort is being diverted from technical pursuits, algorithms, and howtos in favor of chasing carrots, <a rel='external' href='http://zackkanter.com/2015/01/23/how-ubers-autonomous-cars-will-destroy-10-million-jobs-by-2025/' title='self-driving cars'>self-driving cars</a>, VR games, cloud services, APIs that you can use if you have a billion users. Majority of these articles would rather teach people how to use the FaceGram API than to help them build a FaceGram API themselves. Would rather lead people into a bottomless pit of documentation and requirements that they most certainly will not survive. Leaving them to fend for themselves. Another brick in the idiot wall.</p><p>These articles are not valuable contributions to anyone. They will not bring more people into the field of computing. Computing, programming is hard, it is a fact of life and at some point social media needs to graduate from being a domain of noobs, idealists, bandaids, cheerleaders and speculators to a domain of people who solve problems and make cool stuff.</p> <p><strong>by owen</strong> <a href="http://owensoft.net/v4/item/2244/#comment">Post your comments on this article</a></p> 2015-11-03 08:27:29 Social media is killing our Creativity (Articles) http://owensoft.net/v4/item/2237/ <p>We spend too much time looking into the void - watching old tv shows, reading lists of 55 things you should read, watching trailers for trailers, pre-ordering unfinished ideas. We are all waiting for that cool thing that we can repost and get 100k likes. We want to be MMP - Mass Media popular. Be <a rel='external' href='https://www.youtube.com/watch?v=jlkBaEe2Mkk' title='bueatiful'>bueatiful</a>. Most of us want mass media stuff and others believe that everyone is watching them and expecting us to post really funny stuff. We want to go viral. All this reading and hoping takes alot of work and produces very little. So what do we do? We crawl into the tall grass and spend all day looking for inspiration in random videos. And produce NOTHING.</p><h4>The tall grass</h4><p>There is just too much new stuff to look at. We end up having very little time to create any of it ourselves. It is like living in the midst of 10 delicious fast food restaurants - there would be no need to cook anything yourself. For most people this is fine but what has been happening is that the cooks themselves are getting sucked into the trap. You lose your creativity because you never get out of the lunch line. You keep going from restaurant to restaurant eating a constant array of cool meals and you share them with friends and your friends re-in force the habit. </p><p>All websites are the same because mobile is the future. But seriously what are people doing on mobile? Watching netflix? Vines all day? This is a really cool future we live in. Too bad my cellphone data costs so much. I can do the same things on my computer for free but on my 16gig iPhone 6s that I bought on lay-a-way I have to use cloud services and pay for my data every 3 days - FUN! Who&#039;s future is mobile? I am still waiting for Star Trek food but all we get is 3d force touch - right click for cellphones. So innovative!</p><h4>Advertisments</h4><p>It is all advertisements. All day, everyday. We live to consume, we consume to live. Round and a round we go. All retch and <a rel='external' href='<a class="ebv" id="KSyHWMdH9gk" href="http://youtube.com/watch?v=KSyHWMdH9gk" ><img src="http://i.ytimg.com/vi/KSyHWMdH9gk/hqdefault.jpg" /></a>' title='no vomit'>no vomit</a>. Why do products you buy have logos on them? Are they afraid that you are going to steal their design?</p><p>We repost pointless advertisements that we see on pointless websites, we wear ads, we buy ads with embedded ads and never write any advertisements ourselves because we are afraid to offend anyone or take a chance or be sexist or be original or racist or step on the toes of people who are living in la la land. Trying to get rich in a world that is controlled by forces which do not care about their dreams or desires. Think deeper. Stop being rude. Someone may be hurt by what you say. It is a risk that what you say might be right.</p><p><span class="h"><em>Back in the day it was cable tv, nowadays social media is keeping us busy with a never ending flood of content and entertainment. Not enough time to be creative.</em></span></p><h4>Originality</h4><p>Being original is definitely hard. This stresses some people out. <a rel='external' href='https://www.youtube.com/watch?v=twTegheoF1E' title='Design patterns'>Design patterns</a>. Not everyone is creative. Some people cannot keep up with all this social media stuff. Luckily social media does not care. There are other people to replace you when you disappear for 3 years because you had to go to rehab for your drinking addiction. No, no, no. One day you will get married or move on to something else and put all this behind you. But social media will still be here being social - making popular stuff more popular. What will you have to show for it? Nothing except Facepage memories.</p><h4>There is this cool show...</h4><p>Are you watching Empire? Power? Maybe, I do not know, should I? Why do I need to watch it when you are watching it? Just tell me how it went, save me some time. Time is money. I will watch Power and you watch Empire and we can meet up and talk about the good parts over coffee or mannish water soup. Why should we waste our individual-time-separately watching something that our friends have already watched? Been there done that! Write me some crib notes or something, do a review. <a rel='external' href='https://www.youtube.com/watch?v=cjVQ36NhbMk' title='Save a life'>Save a life</a>. Set me free from your addiction. Better yet I could be doing some other stuff while you do that.</p><p>There is the real world, a world of dreams and then there is social media somewhere in the middle. You pat my back and I will pat yours only if you have more followers than I do. I don&#039;t want to step on someone shoes. Do not say anything if you have nothing good to say. No free advertisements because you are clearly out to steal my crowd. Sign over all your rights and copyrights to be a part of my club house. I cannot let you play in my sandbox. A sandbox inside another sandbox, inside another. We are all stars now.</p><h4>No Trust</h4><p>There are videos on youtube that are 24 hours long. I have watched all of them and I can tell you in all honesty that it is not worth your time and, it will not improve your life in any way to watch them. I am not being a hater or a troll. I am just trying to save you some time. There is no &quot;dislike&quot; button, no button that can guarantee that my opinion is not biased towards my own hidden agenda. All I can do is say what I have to say. It is my opinion. My opinion is not from a glass that is half-full or half-empty - it is not based on common sense. My opinion is from the internet and on the internet there are no real glasses or spoons. Only text and pictures.</p><p>Maybe it is a case of a lack of trust. I am not sure. We take comfort in being apart of a large group of people on separate wagons with a different wallpaper. The wallpaper makes us unique. Change your profile picture.</p><p>We should set up Facepage accounts for all our children and teach them programming so that they too can be plugged into the social media matrix and write apps for smartphones until they become Bill Gates or Steve Jobs. All 6 billion of them. Like my Facepage. What do you know about pressure? <a rel='external' href='https://www.youtube.com/watch?v=9o1FQxdmUiA' title='Tripe and Beans'>Tripe and Beans</a>.</p><h4>Conclusion</h4><p>Everything is awesome and only some people are <a rel='external' href='https://www.youtube.com/watch?v=uEY58fiSK8E' title='happy'>happy</a>. Everyone is having a good time in this all night social media party. We ignore the real people while we like them online because online is clean. For everyone else who consider themselves &quot;creative&quot;; please drop me some cool stuff to look at and get off the facepage. I need a <a rel='external' href='https://www.youtube.com/watch?v=SMWNbQ_oiBA' title='big heal boot and bell foot pants'>big heal boot and bell foot pants</a>. There is just too much stuff. There is no way I can like all your Facepages.</p> <p><strong>by owen</strong> <a href="http://owensoft.net/v4/item/2237/#comment">Post your comments on this article</a></p> 2015-10-10 14:11:35 Why I am not too big on using Github (programming) (Articles) http://owensoft.net/v4/item/2228/ <a href="http://owensoft.net/v4/item/2228/"><img src="http://owensoft.net/v4/photo/thumb/1730.jpg" /></a><p>I write alot of custom code, often times ranging from 100 to a 1000 lines. I could throw it up on github but IMHO code is all a matter of context and without context code is basically nothing. Time is money and you can&#039;t just blindly write code in the hopes that one day it will output the correct results. This is the reason I prefer to explain the code that I write. Putting it up for someone to fork and bug me about it is not high on my agenda. </p><pre><code>static int collision_region_get_index(float val){ //round a number up to the nearest value and add it to the middle &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned int t = (int)((float)(COLL_COORD_BOUNDS * 0.5f) + ceil( val / (float)collision_block_size )); //balance &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if( /* (t &lt; 0) | */ (t &gt; COLL_COORD_BOUNDS-1) ){ limit_coord_bounds++; return ERROR_STATE; } &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//t can never be less than zero cause i use the number for array indexs &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return t; } </code></pre><br />The C code above is generating an integer from a given float. This is integer unsigned and is balanced between a certain positive range because I needed for use as an array index in a <a rel='external' href='https://en.wikipedia.org/wiki/Grid_(spatial_index)' title='spacial index'>spacial index</a>.</p><p>Another example I wrote an achievement engine for a <a rel='external' href='https://www.youtube.com/watch?v=4XFVUhBTLFQ' title='game'>game</a> I wrote in C which took me a couple months to get working properly. This engine is peculiar because it only does one thing well and nothing else. You can define an achievement, its requirements and either choose to reset it or add 1. Keeping it this simple allows it to do some neat tricks while being able to run fast.</p><p>A lot of the times people seem to go on Github looking for a hammer that can cut down trees. And the next set of people are looking for people to help them cut down a tree with a hammer.</p><h4>What I look for when looking at code on github</h4><p>As I mentioned before I write alot of weird custom code. I spend my time solving peculiar problems in various domains (web dev, games, graphics, UX, data analysis). Whenever I come up on unique problem I am NOT looking for a large library that I can fork. <br />What I am looking for is the simplest solution that I can use to solve my problem. I am not looking for a library or an API that I can &quot;hot-plug&quot; into my framework. Give me 100 lines of code. The smaller the code base the easier it is to maintain. I am looking for a neat &quot;concept&quot; or &quot;explanation&quot; that I can adapt. </p><p>I am NOT looking for a OOP wrapper class. In the worst case I will find a OOP framework that runs on top of wordpress or drupal. In the best case what I want is 100 lines of functional code that takes an input and returns the output result that I want - nothing else. I&#039;m not looking for a API/service hosted in the cloud that I have to pay a subscription fee just to use until the authors decide to deprecate it because they found something more shiny. I am not looking for 7 million lines of design patterned code written by 500 contributors over 10 years.</p><h4>Github is full of useless code</h4><p>There is a ton of code on public Github. Most of it should not even be public. Especially copy pasted framework OOP wired-up scaffolding apps inside apps. Some of this code is useful, most are just variations of same thing. The last time I checked there are 64 ways to write a todo list using the <a rel='external' href='http://todomvc.com/' title='MVC design pattern'>MVC design pattern</a>. A search on Github for &quot;todolist&quot; returned 4850 repositories, 519k code hits. I understand that some people love to shiv through mountains of code and change logs but do we really need so many public repos of the same thing? I could pick a <a rel='external' href='https://github.com/15mgm15/toDoList' title='random repo'>random repo</a> and hope that it provides the solution to my problem. OR I can choose the most starred one which was last <a rel='external' href='https://github.com/ccarpenterg/todolist' title='updated 4 years ago'>updated 4 years ago</a> and hope that it is not 1 million lines long. Whichever one I choose is matters little because none of the readme.md files explain why any of the code exists. Its like I have ended up lost in a 90s Programmer version of Yahoo <a rel='external' href='https://en.wikipedia.org/wiki/Yahoo!_GeoCities' title='Geocities'>Geocities</a>.</p><h4>There is hope</h4><p>I find that if you know EXACTLY what you are looking for and you are working in unpopular languages you can find some cool stuff that might be hard or impossible to find elsewhere. For example if I search for &quot;quadtree&quot; I get 453 repositories in almost every language. Quadtrees are useful and hard to figure out for novices. Also quadtrees as hard to OOP. Having so much information to reference especially when you are working in an &quot;unpopular&quot; language platform is pretty cool - IF YOU KNOW WHAT YOU ARE LOOKING FOR. Once you have learnt to read code and deduce its &quot;intent&quot; there is nothing like finding some nice code to read. Github is easy street in this case.</p><h4>Conclusion</h4><p>Github is good for certain things but explaining code is not one of them. Its good for source control, and browsing/stalking your favourite repo. The problem with github as a sharing platform is that it does not do much to explain &quot;why&quot; some code is written the way it is and that is mostly what I myself am interested it. I like interesting code but with github you really have to know what you are looking for and be willing to look long and hard.<br /></p> <p><strong>by owen</strong> <a href="http://owensoft.net/v4/item/2228/#comment">Post your comments on this article</a></p> 2015-09-23 11:46:05