2012/09/26

A 21st Century Software Stack

One thing that really bugs me is how the most pervasive programming language in "consumer" hardware (I won't even get to the billions of lines of FORTRAN persisting elsewhere) is ANSI C.  It has been 23 years since that standard was published.  I am younger than the most popular programming language in terms of deployed software.  Yet in that time, lots of excellent tools of expressionism have emerged without sacrificing performance - objects, templates, exceptions, smart allocators (be they GC that consumes less CPU time overall compared to manual management, or smart pointers), compile time behavior in the language.  C has none of that, but it is still turing complete and you can still do anything you want in it.  But that omnipresence means that everything has to relate back to C, that derelect old language lacking so many modern conveniences, in how they are ABI compatible.  Almost every interaction between languages and executables is done through C, and almost every dynamically linked object was written in C, for just that reason.

And it drives me nuts that the foundations of modern computing persist while they are so flawed.  I have grown to despise C for how I can't do anything more intuitive than right functions and use switch statements instead of templates, use calculator_base_computeNode to write a function definition without namespaces or access modifiers.  I can't package up variables and functions into objects without having a dozen function pointers in a struct.  For all its faults, at least C++ is too verbose.  Especially with its cumbersome syntax.  But all that backwards compatibility ruins the language, every semicolon after a class definition makes a kitten cry.

D is another language I fell in love with, only to realize the root problem - it also adheres to C backwards compatibility.  You can still use C libraries in it, albeit that is meant as a feature - and it has to be a feature.  We are pretty much neck deep in C compatibility (at least under Unix, in Windows its basically every man for themselves) and it stifles development because I think there is a class of people (or at least me) who doesn't even fathom working at the hardware level on fixing many of the persistent problems in desktop Linux (because where else is hardware such a pain?) because everything is in C.  C is boring and dumb.

Now for the thought experiment, and I really like this idea - hopefully in a couple decades when we have our flying cars and Jaws 14 finally we will have a popular FOSS computing environment (because it definitely won't be a desktop environment anymore, it will be in your toaster, car, and probably your brain by that point) that uses a foundation of a trifecta of dialects of one core language to do everything.

Maybe not even that.  But I would absolutely like to work on something like that.  We will call these three languages L, M, and H, for low, medium, and high level programming.  L would be a direct compile, statically typed, stack based, multi-paradigm language meant to support writing efficient, brief code.  It would be a balancing act between verbosity, brevity, correctness, ease of implementation, and performance, always favoring performance but balancing it using a modern understanding of computing that includes all that we know today (for example, having a dynamic standard library instead of a statically linked one would reduce code sizes by tremendous amounts for almost every binary).  It wouldn't have a preprocessor, and you would be expected to use H as its build procedure (instead of some arbitrary language like make, shell, maven, etc that makes learning the entire stack such a pain in the butt). 

M would be a JIT interpreted bytecode language that has specific levels of privileges, would be garbage collected (L might include hooks for a GC and maybe even a standard GC, but it wouldn't be compiled or run by default) and would be a mixed static language supporting dynamic code generation and type deduction (a la D / c# mixins) depending on the operating level.  It would share syntax almost identically with L and would share almost its entire standard library with it (maybe even the same dyamically linked files) and be designed for a business productivity / application development tier.  It would also, I imagine, be a better candidate for web programming than something like the abomination JS has evolved into, given the evolving nature of web development (which I actually think is what might one day drive something like this into being, which will be another blog post).

Like I said, M would be the rapid deployment application language.  I imagine any core application (game engine, web / file browsers, video players) would be written in L, but almost everything else (word processor, calculator, games running on a library engine) could easily be targeted at M.  It would be the "official" language for developers, in that the OS can control specific privildges of M bytecode on a case by case basis, from high security no file access in a web browser to dynamic linking on very privlidged applications.  All at the OSes discretion.

Speaking of which, we need more microkernels.  I don't get why device drivers still need kernel injection, it seems so silly and bloats what should be a very simple system (hardware probe, scheduler, memory manager) into a complex blob.

H is what I really like about all this - an easy readable scripting language that has execution privildges based on executing environment, like M, but with the ability to probe for available modules (such as if runningInBrowser: stuff).  It would probably be whitespace significant like Python to minimize boilerplate and maximize productivity, because it would be a true "scripting" language - while its JIT can be optimized, I would imagine it being very much like modern Python - an order of magnitude slower than native / static bytecode languages but meant as glue.  It would have a syntax similar to a JSON like data serialization format in its syntax (whitespace significant data serialization?) and would be everything from the shell to the userscript language.  It could also run in the browser environment (the lack of multi-language browsers now and the coupling of html parser with JS JIT seems silly).  It could also have fast applications like pyGTK does now with ubuntu applications, so you could easily use this as an intro language.  But unlike Python, module availability might change syntax - I imagine something like run() being a function to run some file as an executable (given the operating environment has permissions).

I'll have to think about file permissions on this one.  The executable privilege on a per-file basis in linux bugs me some times.  I'd blame it more on how the file system is eccentric on its usage of extensions - the absence of extensions for runnable applications, mandating the presence of an executable "flag" while the OS still uses file extensions elsewhere makes it seem hodge-podge to me in some ways.

Anywho, point is, I'm dumb and bad at learning, so I would really like a "computing" environment with as few syntaxes and dialects in its core stack as possible, instead of the mess we have now - as beautiful as that mess may be, I know most of "us" wade through it lost and without a chance to comprehend the whole thing, and computers shouldn't be that complicated.  We did it, we can make it better.

2012/09/25

Traveling Faster Than Light with Gasoline

I have been recently watching Battlestar Galactica on netflix, and I think I might be ruined on Science Fiction forever.  I nuance over the technical probabilities of the worlds people inhabit in these settings rather than actually getting engrossed in them because of their technological improbabilities - and the most notorious culprit is the macguffin crystal of hyperspace, warp, or long jumping as the refugees of Caprica like to call it.

It isn't the existence of faster than light travel that bugs me in any of these cases - that is fine, and is often mandatory for a space-faring story to make any sense or have anything reminiscent of human characters, especially relatable ones.  At least ones bound by traditional mortality rules to make the story interesting.  Which is the root of the problem I have with vast swathes of the space frontier genre - they possess star-ships made out of more steel than any city on Earth with propulsion systems consuming orders of magnitude more power than every person on the planet right now to move at ludicrous speed, but they still get sick, die of cancer, and grow old.

In terms of general science, solving the "problem" of human mortality ends up being at least a few orders of magnitude less complicated than breaking the physical limit of speed.  As a species we seem to think ourselves very special when we really are not, in both positive and negative ways - we treat our ball of rock in space like it will last forever and destroy the ecosystems that enabled our existence, while overestimating how complex we can be some times.  We are still just a giant puddle of cells barely different than how they were ~600 million years ago when kingdom animilia began.  Our DNA is a mess of nonsense mixed with enough logic to enable us to grow enough cells to punch each other in the face when intoxicated.  Our brains are just a hundred billion 10hz computers and they control the body with the same electricity modern technology does. (plus hormones, which are released due to signaling.. )

There are quite a few things you can realistically predict to befall mankind before the advent of a means to either warp space-time to place a collection of matter at a different point in space, or to move faster than the fastest possible thing according to the standard model.  If the standard model stays right, it is impossible, as "impossible" as it is to stop the loss of entropy in the universe.  Those are both bigger questions than preserving a human mind indefinitely, or creating a technological singularity, or harnessing the power of stars to create matter.

So yeah, I'm a terrible dreamer when it comes to embracing Science Fiction.  It is like how watching Starship Troopers shows people still stuck with physical bulky phones to communicate.  Huge changes will happen all the time, and completely change everyones perspective on everything, and we can't see them coming, so all these distant futures containing even just the classical Homo Sapien seem ridiculous.

I am pretty sure once we hit the technological singularity the need to keep fleshy bodies will become antiquated just like the land-line telephone or CRT tv (cough, or tv in general, cough).  It isn't even something to be all that concerned about - exponentially increasing machine power mandates that they come up with something better than what random cell mutation did.

Any who, point is, science fiction as a genre drives me insane because of the improbabilities and magnitudal problems that are passed to the wayside to preserve traditional humans in the plot.  I am absolutely certain the first spacecraft that can manipulate spacetime will not be piloted by obsolete meatbags.  Of course, I can get behind any Sci-Fi set in the next few centuries involving generational ships :P

2012/09/24

Desktop Environment Overview

In my thoughts about the desktop environment I said I'd go over my opinions on the various DE's out there.  So here that is.

Windows XP - Didn't have anything close to the modern start menu, and had the traditional active windows task-bar rather than a launcher, so besides a drag and drop quick-launch windows xp kind of sucked.

Windows Vista - Revealed the modern start menu and didn't change much else.  An improvement on XP, but was tremendously slower for absolutely no good reason.  The bigger close button was nice in the window manager, but mostly it was just re-skinning the same old.

Windows 7 -  The modern dock launcher bar was a vast improvement over the traditional active windows, and it kept the good start menu.  So best of the Windows systems.  There are a few drags - whenever you overflow the bar with icons, it doesn't do a vertical scroll but instead adds rows or columns depending on if you orient it horizontally or vertically.  Also, horizontal tray icons only occupy one row when they occupy two vertically (and vertical is just better imo, with modern screen resolutions making vertical space more precious than horizontal).

Windows 8 - You can't replace the start menu with a corner of the screen, that is unintuitive to the extreme and ruins UX.  The metro launch screen, while still supporting the system key -> type -> run behavior, is a separate graphical context and extremely slow on older hardware compared to the behavior of the classic start menu that didn't switch render engines.  Also, losing all your windows to look at a hodge podge of most viewed applications is ridiculous.  The new task manager is very nice though, wish they would back-port it to Windows 7 so I could use that.  Oh well, proprietary crap ftl.

OS9 - Can't comment much on it because I haven't used it in 6 years, but I remember it being very Windows 98-esque and didn't have preemption (eew).

OSX - The dock consumes way too much screen real-estate, and hiding it doesn't really help if you hit screen boundaries often.  Because it is only ever centered and always has way too much superfluous graphical cruft on it, it takes up more space than it needs to.  You can pin folders, but not arbitrary files, and it supports some context menu behavior, which is all good.  The real downside is the application bar on top of the screen - it wastes at least 12 pixels of vertical space for absolutely nothing when it only has tray icons and the menu bar on it.  The same issue arises with Unity.  There is no start menu here, and finder is a poor replacement, but disjointing the system administration into a special tray icon and system search is fine.  They really have nothing to do with each other.  They should still be full applications.

Unity - It has gotten better.  The launcher is an ok search menu, system administration is orthogonal like in OSX which is appropriate, the tray icons are on a stupid bar that consumes valuable vertical pixels but it has a lot of nice integrations (volume controls and dialogue popups, auto-updating, etc).  Recent crap like the Amazon integration breaks UX of the launcher because nobody wants their local search to pull from the Internet.

Cinnamon - The start menu here is great (besides its still a icon and text fixed dealio) but the active applications launcher is outdated.  If I could get a dock on Cinnamon, even with the fixed start menu / clock, I'd be placated if it supported arbitrary file dropping, mouse over contexts, and integrated controls.

Docky(?) - It isn't a full DE since it is just a screen dock for gnome.  But it has a lot of potential in how it has a lot of what I want - the orthogonal design of the panel from the start menu (albeit, docky doesn't even have one - the icon of Docky itself is forced on the bar for no good reason and you can already access all the same setings by right clicking on the dock anywhere that isn't an icon) which puts it out of the running.   By not being its own DE, you need to have something else running in a hidden state behind it, which might as well be LXDE to minimize resource strain.  It is a collection of good defaults with lots of configuration though, so I like the potential.

KDE4 - I have tried KDE a bit, but really - it has a splash screen indepndent of the OS just for the DE to start, it favors multiple attack vectors of window management in one context that makes it cumbersome, the start menu is ok but doesn't do dynamic search, it still uses active windows, but above all it is slow.  Which isn't good.  It also doesn't integrate with almost anything but the rest of the KDE software collection, but because they are trying to bite off more than they can chew vast swathes of the project suffer in the same way Gnome does.

XFCE4 - Many like XFCE, I am indifferent, mainly because it misses a lot of critical functionality.  It doesn't have a start menu with dynamic search and run contexts, it doesn't have drag and drop capability, it doesn't have hover contexts.

Xmonad - Xmonad is really off in space from the rest of the desktop space.  Tiling window managers have never been my thing, but it does its thing well - if I were a good neckbeard I would be all over this with a dozen terminals running as my everything, but I grew up on Windows 95 and remembering all the terminal commands is hard because my memory sucks.  It is great for productivity though, since it just maintains all the active windows and uses alt tab to the extreme to swap.

Android - For the luls.  Jelly Bean is really closing in on a more traditional desktop, with folders (even when they aren't folders?) web app launchers, etc.  It is still obtuse since you can't pin apps to the system menu that acts as a notifications bar, with the system keys of home / back / active apps (which is just a poor mans alt-tab).  The back button is a really nice feature - if it would behave like an application and revert behavior like the backspace key in a context, it would be neat on the typical desktop for users who really like clicking a lot.  We already have show desktop / home keys everywhere, though.  The rest of the black system bar is always wasted since it goes unoccupied, especially on larger devices.  I figure one day we might see an Android (or another OS on mobile) that allows a vast placement of buttons on some system locked bar a-la the panel / dock, with all kinds of dynamic behaviors.  On touch, though, it becomes hard to have mouseover contexts, which limits the potential.

Overall, I go between XFCE, Cinnamon with Docky, Unity, and Windows 7 depending on the way the wind blows.  They all have pros and cons but none quite does it for me.  Maybe I'll try working on a fork of Cinnamon with docky-like panel behavior.  My gripe there is that all of Gnome 3 uses javascript as its scripting backend, and I despise JS for its obtuse syntax and slowness over something like Python for more prettiness and C# / Java for more performance.

 Update Sept. 2013: I find this post hilarious on how heavily I changed my viewpoint. In discovering qt, I discovered KDE, and all my complaints are ammendable through configuration. Not to say their defaults don't suck, though. I'm hoping workspaces 2 and KDE 5 can introduce a better set of defaults to attract more people. Defaults matter!




A Desktop Environment for Me

I spent the last few days playing around with the gamut of desktops from lxde, xmonad, xfce, cinnamon, unity, kde, and gnome 3.  Given I have experience with Windows from 95 to 8, and Mac OS from 8 to 10.7, I can't help but feel there is still no desktop I like.  So I'm going over what I like and dislike about various DEs, what can be improved, what works, and what to do better.  As a collective thing.

Firstly, I have a mixed bag of needs - as a developer, I need the superkey -> enter command -> enter executable behavior of application starting.  I think the start menu is a "solved" problem - cached file search using a background FS parser.  It isn't fit for use on enterprise servers on any such thing, but you can isolate that just fine as its own binary with RPCs or file IO between running binaries.

The start menu is such a solved problem, I feel, that it would be appropriate to decouple it - any desktop that suits my needs would probably have hover context menu generation that is specialized enough to facilitate the behavior of the traditional start menu anyway.  It could just be another application that behaves like any background process and simply minimizes itself rather than closing whenever it is sent to the background.  Since this theoretical DE supports Windows 7 or Unity style hover frames showing the context of the window (except like I said, it is over-ridable with application specific features, such as the start menu behavior) the actual application is only a hover frame of the panel.  But it can still be an independent binary developed on its own, with diverse start menu applications (may I be so brazen as to deem thee "homes") with system level keyboard associativity with the system key (usually the windows logo... blah). 

So this conceptual independent start menu-esque application can stand on its own, independent of the panel and rest of the DE, and operate only as a hover context box of the panel api itself, supporting system search in its background processes, arbitrary command execution and searching (which can also be an independent application this start menu uses as its search protocol, and would launch a graphical instance if there is no command match and enter is hit).  Windows 7, Unity, and Cinnamon all pretty much have this same idea in different forms (albeit Unity's launcher is extremely stripped down but has complex search facilities the others don't).  Since it is tangental, I'd call this good enough.  The rest is a burden of the panel.

The panel is a problem nobody has done right, I feel.  Some bare essentials - it needs to be a modern dock, not a bar of instances of applications (thats what the alt-tab menu is for) but with hover over exposure to the instances (a la Windows 7) because I find a lot of click happy general users love that feature.  I like it too when I'm one handed eating something or what have you.  Since we already brought up the hover contexts for the start menu, this facility really is the killer feature of this whole DE - the hover contexts need to be verbose enough to allow arbitrary embedding of application contexts in these hover frames, while having default behavior of just showing screen captures of the active windows or just a listing of window titles.  Docky has something similar when you right click, and that is just a mouse event change.  Docky has its own faults I'll discuss later.

The panel needs to be able to hold anythingBig emphasis there.  It is a HUGE disconnect for everyone I know, from hacker ninja to my grandmother, who finds random things (I can drop folders, but not movies?  Why can I only put applications from X menu on this bar?) to have arbitrary files in the system be rendered unrecognized by such a launcher.  The default behavior isn't even complex - just open it with whatever the OS proper has designated as the default application.  After all, folders are just special media files for the window manager to open and display.  The desktop is a folder that is always open without borders.  Executables are still forked by the launcher and thus it "opens" the executable itself.

I feel like we know by now that icons are all you really need.  For the sake of options, I would imagine having the ability to show text would also be pertinent for this system to be "perfect".  So you could have icons || text (not icons ^ text).  You would be able to have this dock centered, screen filling, and be vertical or horizontal on top or bottom.  Applications would also need to be able to override their own icons so you can have clock behavior.  The principle of an object existing on the dock and having arbitrary contents, hovers, and behavior if specified, with traditional defaults I feel is the root of this problem.

Oh, and you need drag and drop.  XFCE doesn't have it (at least by 4.8 default) and that is just silly.  The panel should feel like an extension of whatever is on the desktop with rich behavior.  When you overflow, it should just allow mouse wheel scrolling of the bar with up arrows at the top and bottom (that naturally and fluidly disappear at the absolute top and bottom) and you should be able to not only pin application icons to this panel but pin them to a position so they are fixed (ie, you don't want to scroll your clock / start menu, or maybe you do - you don't always need the clock and on a small screen could just scroll to see it).

One problem this doesn't solve is notifications panes, but that itself could be a mouse-overable icon of its own.  Maybe even have the ability to by API add icons that are 1/2 normal size so you can stack smaller icons a la Unity, Windows, Cinnamon, KDE tray with context menus instead of just default opening.   Icon scale seems like a logical addition to having arbitrary icons in the first place, though.

The downside to this theory is that it really burdens an application developer to tightly couple with the desktop, which never really works because you are starting small and everyone else is already big.  So you need to understand already present standards and offer even more feature richness if developers want it.

I just want a bar on the left side of my screen, with all my applications I want pinned, plus media files, folders, etc if I want them, that I can mouse over to view, click to open, and an abstract enough hover pane and click interaction system that you can write a start menu as an application with this hover capability.  I think that is really where we are going though, for a certain reason.

I feel like Android and the traditional desktop are nearing a point where they can be merged.  And not with screen filling boxes of random crap like Windows 8.  The ideal of a bar of arbitrary operating system goodness sitting on the edge of the screen is a pervasive notion every single OS has.  They just argue what to put there.  But as Android devices become powerful multitasking systems in their own rights, people will want the rapid application switching behavior that bred the dock and panel of the modern desktop in the first place, and this concept is already somewhat in place with the mixture of home key and active applications context behaviors.  They can just take the home and running apps and just put them adjacent them (the desktop button and the alt-tab menu are not new ideas, but an alt-tab application launcher is useful for those who don't understand it).

I'll post my opinions on the desktops separately so I can just point to whats good and bad about those.

2012/09/18

Political Ranting Part 2: Changing Economics and the effect on Politics

I am effectively a social libertarian in the ways I think about politics, but I also think we are rapidly approaching a breaking point in history where we have a two fold break in society that will necessitate a change of economics and political thinking.  I discuss this in my optimist series of human potential, but in a condensed and abridged form, I believe we will elimate scarcity of the requirements of human live, and by doing so we will enter a post scarcity world where no one is needed to produce or persist human livelihood, and everyone can dedicate themselves to creative endevors and their own interests.  Once we have robotic farming and mining, and fully automated construction of homes, utilities, and goods, we eliminate human "labor" in the traditional sense, because no one is needed to create the things we want or need to live.  In our current system, the owners of these means of production would drain every other person in the world try and destitute and will become the most wealthy superclass of people ever known.  That would be an absolute revolutionary breaking point anyway, so however you slice the pie, things change big time.

The point is that everyone will be 3d printing whatever food they want from carbon mined by automated machines powered by power extracted completely automatically built with metals mined automatically and assembled automatically.  There is a sizable gap between maintaining the status quo and exponential improvement in a post singularity situation, so I imagine there would be a gap (and almost certainly in this century) where these machines just maintain everything perpetually.  Of course eventually the singularity hits and everything hits the fan as human beings become irrelevent, but the issues of this circumstance hit long before then. 

When all your food is provided without any human capital involved, everyone could stop working.  They could persue their dreams and passions with no fear for housing or livelihood to the next day.  Of course, traditional models of ownership of land and goods strongly impedes this - the owners of these automated systems would want reparations for their use, even if it costs them nothing to maintain the systems, because they started the process.  Obviously, that is completely unsustainable and it is already showing today with digital goods that are make once, sell forever, and never become involved in with human capital again that break traditional economic systems and cause strife even in the modern economy. 

But it gets worse in this system - land becomes scarce and precious, because it is hard to create new land even with everything automated - automated starship construction and builting will still be time consuming and engineering such systems will be insurmountably up-front expensive.  And that gets to an even deeper root of this problem, because the up-front costs are huge.  It is why our modern economy skirts these possibilities and ignores them, because they present systems that we can't deal with.  The modern manufacturing and software industries are draining the wealth from the vast majority of people with engineer once earn money in perpetuity systems around the world today, which (I think) is the main driver of economic distress everywhere right now.  The ipads and other electronics manufactured by robots and designed once but paid into forever bankrupt the average person while the profit margins of such businesses prove massive.  It is because there is an inequality in the valuation to the human capital of labor - with complete automation, with the removal of people from the equation of economics, you break the system because when people can profit without input you simply drain money from one source to another with no way to stop it.  You funnel money in a unidirectional tunnel that ends up with a tiny super-wealthy body of the owners of the means of automated production and a destitute mass of everyone else who has no stake in the systems and thus can't even exchange with the owners of these automated systems for the resources they produce.

 This has a substancial impact on everything, but here I am ranting about politics.  So what happens?  In the short term, this small subset of people who own these automated means of production can exert unlimited influence on politicians to enact whatever laws they want, for reasons I will describe in detail in another section on how the current system makes the individual citizens of America (and most countries) irrelevent, but assume the extreme is that with the funneling of all wealth and capital into the few who own the means of automated production (which no one can compete with anyway, because they create stuff for free after you build them in the first place) they get whatever they want.  You might have a revolution at a critical breaking point when people can't afford these autmated means anymore - which simultaneously means the wealthy lose their validity, the politics lose their control, and the people go third world again overnight, when the current economic system breaks apart.  It is happening right now, but as usual the masses are placated on their bread and circuses, so there is no revolt, just dwindling influence and prosperity.  When it breaks, the system crashes top down, because suddently these automated means of production lose their purpose because nobody can afford them, or anything, anymore, so it would be a rapid transition into these resources being provided for free.  It may be a violet ursurption, or maybe by eminent domain whatever remnants of government take control of the means of production to provide for free the resources they produce to the distressed citizenry, but there will be a transition where the perpetual extraction of resources from goods that cost nothing to maintain occurs, and everyone just starts getting everything for free.

You have the usual issues associated with such a system, in a way similar to modern roads and infrastructure falling apart around us since nobody wants to pay to maintain them.  Whenever this automated infrastructure falls into disarray (and it will, even when it can automatically repair itself, some catastrophe will happen) you can assume that the government will act to repair it by any means necessary.  The age and lack of motivation to develop these systems will probably show, and over time the quality will degrade, since unlike in the capitalist system where the business heads are motivated to constantly iterate their automated systems to make them more efficient and effective, the government could care less as long as they just work

Regardless, you have everyone getting everything from homes to goods to food made for free.  The only real industry left would be new kinds of automated production, but since everything else is post scarcity and everyone could effectively live in a mansion with everything they want (since machines can automatically produce everything) you really only worry about scarce Earth bound resources we need to mine from other planets or celestial bodies (be they meteors, moons, etc).  You would expect a transition as automated means of producing things become more common for things that were still manual (you can easily see this in effect today, it is easier to automatically build cars from parts than to mine and refine the steel to make the frame, or it is easier to automate a check out line than it is to automate stocking shelves or delivering goods) but like I said, that critical breaking point is when the essentials are automated.  So you eventually get everything automated, solely on the basis there are just too many smart engineers who would just implement automated systems for the production of everything else just for fun.  And in reality, the limiters on such creations aren't a lack of human ingenuity - we just need people to build the robots, so we can program them, and put them to work.  No one wants to make that investment because it is risky, expensive upfront, and otherwise not a very persuasive business proposition, because it is radical. 

I'll make a post on that too.  The ingredients of absolute automation.  Anywho, derailing the point again, we are post scarcity, government controls the means of production, and then everyone is either playing their own hobbies and dreams or living off entertainment.  Of course, you get a lot less entertainment because without scarcity, there is nothing an entertainer could want other than more entertainment, so everyone in it for the money (hint: most people, especially on big budget productions that take a dozen animators to make a nose) drops out, and you have a revertion to "independent" productions.  Basically, individuals with passion working together to make things because it is fun, not because it feeds them.  Which introduces its own problems.

I'm going to make this a two parter since I haven't even gotten to the politics of such a society, and I am still ranting about that goodness.  So yeah, part 2 of part 2 inbound.

Politics Ranting Part 1: The Modern Democracy Mockery

This will be my first election since coming of voting age, so I might as well get some bitching and moaning out of the way about why the political system in the US blows chunks and how to fix it.  This is, of course, the deepest depths of failure I can take my little blog project, so I dive head first into the depths of this colossal failure with earnest.  As usual, I am wrong about most of the stuff I will say, and most of what I say is stupid.  Get used to that.

So election 2012.  Two parties that fail to properly represent any significant fraction of the American public going back and forth about how the other guy is doing everything wrong, just to dodge the real issues going on in the world and why everything is going to shit.  Being an idiot, I am speaking out of my bum here (as per usual) but it drives me insane how almost every single person I know, most of whom should prove themselves to be my betters, constantly fall into this monkey poo slinging trap of the modern us vs them of politics that is ruining the entirety of human civilization in short order.

So whats wrong with everything?  As with most problems, the biggest issue is ignorance.  Almost no one understands the influence of the president or how the federal government of the USA is set up, and I'll skip that since I wrote it before.  If for some bizarre reason you give a crap, you can read up on what I wrote up on what is wrong with presidential elections here.  The cliff notes is that nobody really understands what presidents can do, which really is not much, outside of vetoing legislation, controlling the departments of the fed (which includes the military) and the political influence that comes with *owning* one of the three branches in DC, plus electing supreme court reps.  They don't write laws, they don't vote or debate on them, and they don't argue the validity or legality of law, that is what the other branches do.  Almost everything people blame on presidents is not their faults, and everything that they blame elsewhere is a presidents fault.

Obama is a great case study for this.  It is his fault we have an overbearing borderline police state military presence around the world.  You can blame him for how we are still a global empire trying to impart the political classes will upon every other country in the world.  Because he is commander in chief.  He can, at whim, by executive order, close almost any military base or diffuse almost any military operation.  In the midst of the grotesque military industrial complex that is bankrupting the country worse than the entitlement bloat is that it is a money black hole.  You get no tangible benefits out of taking millions of America's youth, feeding and clothing them to, for the most part (relative to the size of the military, the fraction that are actively engaged in Afghanistan atm, being the only legitimate war the USA is currently engaged in, is minuscule) are sitting around military bases acting as agents of fear over those places they occupy.  When the 800 billion a year defense budget comes up, blame the president the whole way through for maintaining the insane thousand plus military bases in almost every country in the world, in an age when the only real threats are the deranged and the desperate who we bring to bear against us because we fuck with so many other countries it is insane more people don't actively try to kill Americans.

You can also blame Obama for the size of the fed.  It is within his authority to close the IRS, the dept. of homeland security, he could close down any cabinet branch by executive order on a whim (whereas they need to be created by acts of congressional law) and the fact he doesn't trim the oversided fed is his fault.

You can blame him for all the awful laws that are being passed and renewed under his presidency that he didn't veto.  NDAA, the renewed bush tax cuts, patriot act, and NCLB, are all his fault.  If he had vetoed any of those, they would never get the 2/3 support in congress to overturn the veto, and we could be all the less a nanny police state than we were a decade ago if he had done so, but he didn't, so that is his fuck up.

The state of the economy is not his responsibility.  The fed influences economics in a very long term game, he is the arbiter of law, not the creator, and the bailouts and "obamacare" are products of congress that he signed, and the fact that a president and his party can jointly write legislation that gets passed through in weeks to vote on the floor of congress is a failure of the system, not of the individuals.

Which brings up another critical flaw, which is that the reason people seem to think presidents matter so much is because their parties are jointly drafting and passing laws and they are collaborating outside of the floor of congress all the way through.  The two parties are unified monoliths of policy where the individual members might slip in special considerations for their constituency but the overall policy is drafted not by any one politicians design, but by the collaborations of the entire organization into whatever represents what the party, not the individual politician, wants.

NCLB was a republican ideal, not a Bush one.  The attribution of a law that the president can not legally propose in congress to the sitting president is asinine.  The process of lawmaking in America is never about individuals, it is about a compilation of desires of disparate groups coming together to represent the groups desire in the political game, and what comes forth is not any one persons responsibility.  The archaic proposal system in place today is a farce in the face of two parties that already know very well in advance every policy they want passed and only try to play hardball to get through whatever they think is most important.  The only reason we have two parties in the first place is the fact that the system is so fundamentally corrupt that whenever one group takes control of the reigns and gets through a significant chunk of their desires, the recoil and resulting damage to the country shakes everyone in their boots and makes them jump sides.  But they jump between two fallacious extremes because neither of them represents their interests.

The problems are numerous and deeply ingrained in the American psyche.  A dozen fronts assault the good and well being of the political system in this country and they all contribute to the continue class war going on that is going to destroy the western world this century.  And nothing can ever be done about it, because the people who have the power and influence to turn course are reaping the short term benefits of selfish and arrogant power plays that harm us all but the disconnection from the world lets these people play puppeteers with all of us with disregard for the future or the consequences of their actions.

2012/09/01

Conceptualizing the Perfect MMO Part 1: Intro to Combat

The gameplay of a game is what I always find to be the lifeblood of the experience.  Story and visuals always supplement an experience, but can't replace it for me - plenty of games do this, be they the Uncharted Series, Alan Wake, etc - but for myself, a game is foremost an interactive experience, and those interactions are what make or break that engagement. 

I write this on the wake of the release of Guild Wars 2, and weeks before the free to play rendition of SWTOR enters the hard drives of thousands.  From the oldest MMOs of the form of Everquest to the most popular in the form of WoW to the more recent forrays into MMO combat such as Tera, not a single one of these games have ever done the combat right, in that someone who is still a paying customer who doesn't get disengaged enough to stop playing outright is still playing and is simultaneously decrying the combat as subpar.  I lack the patience to do the full expose on what this entails, but I will just suggest my interpretation of what I want an MMO combat system to be.

Start with a one dimensional axis of gameplay.  On one side, you are fully mathematical and logical, a fully "mental" experience.  Turn based games fall here, and if you are using a spreadsheet to play a game, you are very far into the territory of the brain teaser.  Games such as Everquest or Dungeons and Dragons occupy this space very plainly, and appeal more to the laid back experience than the adrenaline pumping spur of the moment embodiment of the opposite end of the spectrum.  We can categorize that by purely physical engagements, such as FPS games, especially a game like Counterstrike, where the instantaneous mandate of response means that any professional player must develop instinctual reactions in muscle memory to master the game.  While they often still require knowledge of the game to be effective, they are not a mental challenge once learned, since the headshot is all that counts, and processing the location of an enemy as fast as possible to aim a pull the proverbial trigger is what counts most.

In the MMO space, both ends of this axis are still fully represented.   Any online DND experience will predominantly fall into the mental challenge aspect, while a persistent FPS game like Team Fotress or CoD will fall at the other extreme.  If you want to discount non-persistent worlds, there is a paradigm shift.  One of the foundations of the traditional MMO model is a fantasy setting, and there are no real big name fantasy MMO persistent FPS games.  On the scale of turn based to FPS, action games fall closer to FPS, and rpgs fall closer to turn based, so we can group WoW, SWTOR, etc under the RPG banner and Vindictus, Tera, etc under the Action banner.

Guild Wars 2 is an interesting case, because it combines aspects of both in many ways, but I will argue the combination does not make for a positive experience.  It is still strictly hotkey based - if you are in range of an opponent and use a single target ability, it will hit them every time unless a probabalistic random roll says you don't.  But you can still use abilities out of range, or without an enemy targeted - they still go on cooldown, they just don't do anything.  The gameplay is centered around all the classes having different abilities per weapon, and those abilities having few interactions and a very distinct lack of choice in engagement - since every class is built around cooldown based weapons, they are mostly spam fests since any non-auto-attack ability that deals damage usually has some complement that makes it always worth using.  The only thought process is the order to spam abilities in.  Without a resource system or trade off of skills in actual enagements (you still pick your weapons and 5 class abilities in advance of combat) combat becomes dull.

It stays dull because you have no active physical enagement either - your dodge ability is prohibitively hard to use and cumbersome, and the combination of auto-aimed hotkey abilities with the traditional action dodge is obtuse because it isn't about getting out of the way, but about being "immune to everything" when an ability you don't want to hit you goes off.  Strafing is only effective against targeted zone abilities that can come in the form of lines or circles, but those are often long cooldowns and each class only gets a few at most at a given time.  Dodging area zone effects through positioning also isn't new - it is pervasive in everything from WoW to Vindictus.  In that regard, it is a good implementation - situational awareness combined with knowledge of class abilities combined with the chess like aspect of recognizing cooldowns and ability combinations can make a more skilled player apparent in how they avoid zone attacks.

So that is a good thing.  The problem is everything else I outlined, so now we can get to the meat of this discourse, is the perfect MMO combat system.

There are a few tenants to a good MMO - the sense of growing power, the sense of community, the sense of an engagement with something larger than yourself, and an engagement with a world with its own mysteries and pecularities, all while maintaining an enaging and fun gameplay experience.  Every game I mentioned fails in one of these critical areas in some harsh way, yet they all rarely overlap.  The consequence is that most modern MMOs are pushed as revolutionizing some aspect of the genre, but forsake the other key components of a successful persistent experience, and consequently fail.  WoW succeeded when it did and became as popular as it did because it was the first game to get most of them right.  Let us get into detail about what each of these aspects entails in another series of blogs.