Sunday, April 6, 2008

Hi

Frequent checkers of this "abandoned" blog, you may have been wondering what is happening, and when this page would be updated. Also you may be wondering about what has happened to GC Forth.

The GC Forth project is long terminated. At the point where I stopped work on it, I had made it into something that was pretty neat, but ultimately the technical problems became so tiresome (ever try debugging undocumented hardware?) and the added burden of low-level compiler-writing, in ASSEMBLY language, coupled with my VERY limited capacity for systems design from a computer science standpoint, and the sudden realization that distribution of this system was becoming so scarce as to be practically impossible, made this project ultimately a dead end.

No harm done. It was, admittedly, a wild ride.

Now, coming back to this sphere after having learned, seen, and done a lot that is NOT the kind of programming GCForth was about, as well as having used most of my spare time to pursue art, music, and research, and having done a fair share of self-searching in terms of "what is programming?" I would like to say a few things about Forth.

Users of Forth are a shrinking minority, as the plethora of object-oriented languages offshoot into ever more high-level languages, such as the languages of Java, Python, ActionScript, and so on, and I have noticed the tendency, in fact the downright general sense of determination, to concentrate on the goals of making programming languages be ever-more "user-friendly" and ever-more "secure". There is no inherent problem with this in a general sense. Plenty of amazing software has been written using the modern paradigm.

Yet something about Forth continues to attract me. Something in its simplicity, its directness. Something about the way it seems to obliterate so many problems that I have come to recognize again from a different angle. I have done research on this unusual and engimatic language, from happily scanning the Wikipedia entry to navigating the piles of FIG Forth pages, old Forth Dimensions magazine articles, Chuck Moore interviews, and, Heaven forbid, actual source code. But I have been learning other languages too, partially, perhaps subconsciously, in an attempt to answer this question that begs answering simply because I don't feel that anyone has answered it with the proper completeness: why Forth?

I will start to tackle this question by illustrating what I feel to be the general feeling among the most modern programming languages, which seems to be that the development of software must be a collective effort, and that the ultimate goal of this "project", so to speak, is that of, for lack of a better term, a kind of "optimal virtualization".

It all started with some rather dumb hardware. Take for instance the first "personal computers". You have a 1 dimensional array of bytes, a means of reading from and writing to it, and some numbered wires that control input and output circuitry, which in turn can save a range of these bytes for later recall, make a light blink or detect the motion of a stylus. That setup worked beautifully - on the small scale foundation on which it was built. Furthermore, there were fewer computers, and they were more than a little expensive. $3000 non-inflated, was the common price in the early 80's for, say, an integrated computer setup for printing invoices - and nothing else. At the time, the achievement of an addressable memory of 16K from a technical standpoint was enough of a breakthrough, that programmers, their garage-office employers, and their nascent industry were in more than a hurry to program it. Thus began what I feel to be the road to virtualization, which is what the human race has been on since.

Now, it seems that the goal of the collective "free software" development movement, on the mainstream platform, which is the consumer desktop computer, is to create a virtual world that is liberated from the computer in its real state. The demand for ever increasing performance has even caused this inclination to leech into the design of the hardware itself; on top of a flat addressable memory, the good folks at Intel implemented virtual address space support on the chip in order to make programs like Windows possible.

It is impossible to measure, but no-one would argue that there are at least a million programs in existence on the planet, and no doubt terabytes upon terabytes of code. Then, multiply by 10 for all the English-language articles that have been written to explain and document and manage all of this code. One who says that the computer industry has "bloomed" wouldn't be wrong.

So what do we have? A lot of code, even more documentation, and billions and billions of IC's, all built on top of, or, maybe more accurately, around, that tiny of seed of a principle, the microprocessor-ram-i/o combination.

It is a lot of code, yet we are basically all using the same exact hardware, and more or less, doing the same stuff. Most of the code is there simply to make the identical software work on all of it. Stripped of all contingencies, it is all there to translate keywords into hardware addresses.

We have programming languages now, that turn a computer into something completely different. One is, supposedly, not supposed to know or care about the physical attributes of his actual computer, but rather, to treat memory as "virtually" unlimited, to use "application programmer's interfaces", rather than actual hardware, because, in theory, that hardware is undefined. And more alarmingly, what we are building, because of its nature as software, is something that is completely untethered to the world of real objects, or the realm of physics and electro-magnetism, or the world from which the quaint abstractions of files, icons, and menus were originally, and imaginatively, derived.

It is so out-of-touch, in fact, that we now have some rather strange abstractions, such as "scroll bars", "hyperlinks", and "XML Document Object Model"s. Should we consider it a blessing that our ability to abstract upon abstraction ad nauseum has enabled us to concoct such bizarre and increasingly "virtual" tools? A question with an implication, but still a worthwhile question.

What has it led to? Where is it heading? Apache servers, OLPC, the Unity Game Engine, .NET, AJAX, Flex, XBOX Live Arcade, Facebook, Google Reader. All of these, wonderful, beautifully complex, and remarkable achievements of the collective human mind.

There is a school of thought that looks critically at the state of modern programming languages and considers with mind-blowing attention to detail and precision of logic, alternatives for the present and the future, with a certain sympathy for user-friendliness, programmer effectiveness, and "thinking out of the box".

I suppose that is the root of my concern, that last statement. To be "out of the box". The phrase is heard so often that it really has no meaning anymore; we do not "know" what computers are for anymore. And this, perhaps, is because we now consider them to be simply for anything we choose them to be. Regardless of their actually appropriateness, practicality, or effect on "real" culture, the one that involves children, food, wildlife, microbes, natural disasters, and urban development. Ever more fetishism for making life "digital" and more "technological", and I am indeed talking about the one represented by the luxury class in Manhattan, makes it harder and harder to see life as anything more than a game. Computers are luxury. They represent the very essence of convenience; the power to get things done without doing any work at all. No wonder we are so obsessed with making them do more and more for us!

I think there is a growing belief regarding computers that they can be the stage for the great "model" of our human world, in which we can rearrange it with great ease and with such power that it is actually beginning to affect and seep into our daily lives. I am and may remain cynical to this idea. It may be against common thought but I will always believe that it is the physical world from which actual problems and their solutions must originate, not an abstract dream world with its own rules rooted in an offshoot from the idea of recording information. The idea of the Net being the means by which we change the world is an echo of how people felt in the 1950's; that they could do the same thing through chemistry. Where it has actually gotten us is up to debate.

However, the Net has given us a lot to talk about and has turned our attention back towards reality. It has turned mine, at least. Now that computers have reached a wider mainstream (I.E. so-called "non-techies") through the Internet, it seems that all of the code is justified, that it had a point and still does.

Which is perhaps why I have no problem with it today.

However, I have officially recognized that today I am no longer a programmer. I do not feel that today's programming in any way resembles the programming that I fell in love with. These were the languages that I built my programming foundation on: LogoWriter and QuickBasic. Like Forth, dreadfully under-powered languages, but simple. They did not need to get complicated, to "grow", to do more; they just needed to be customized. (Only, they just couldn't.) I find that my instinct tells me that the same is true of a number of pieces of software, where whenever I see that the programmers are again stuffing into a program more features that I have already seen elsewhere in many other programs, I immediately think, "hey! They're just creating bloatware again!!!" My customary reaction these days is to just shrug and say, "no one has figured it [programming] out yet." Because that's the truth - no one has figured it all out yet. And until someone does, we will not understand programming, because its design and application is inseparably rooted in the real world. All ideas come from the real world of real things; including the tools that we made out of the materials of the earth, things that were honed and evolved over centuries of human experience, of disaster, discovery, and unrivaled ingenuity.

Forth originated at a point in time when someone sat with a small computer and an idea to accomplish, and asked "what can I do with this thing?" While at the same time, somewhere else, some people were standing around the same type of computer, with a lot of problems on their minds, and asked each other "what can we MAKE this thing do?" The mainstream computer has, as a consequence, not progressed, from an engineering standpoint, simply by the nature of it as an industry - someone needed to make money by making this pathetic instrument do as much as possible, be as multi-purpose as possible; because someone realized that, unlike the staple gun or the totem pole, it could.

But only in a virtual reality. I am not really writing anything, no pen or typewriter is making a mark on any piece of paper, no fingers will ever flip through any pages containing these words, I am merely recording my thoughts so that I can share them with others. It's a more direct route.

It is easy to appreciate the system that we have in place for what it gives us on the surface. It is even easier to get excited about the possibilities without realizing how naive a "user" actually is about the details that hide underneath the surface of their favorite applications.

All of this shows that, increasingly, programming needs to become less about computers than it is about the world, which is what computers were invented to make better anyway.

In that sense, because computers are real objects in the world, I do not agree with OOP principles because the virtual world it professes does not actually exist, and is therefore dangerous. I like classic Forth because it is unpretentious. It provides a close, simple map to the real computer, or the operating system. For my own personal quirks and tastes, and based on my early "training", probably already crystalized forever, Forth's flavor and lack of complicated rules seem to suit me.

Even though I love Forth, I don't have any immediate plans to program in it, or in any other language, because Forth is unsupported, and I don't like other languages, and the ones I used to like are underpowered or ran on machines that for all practical purposes, don't exist anymore. And I am tired of "trying out" languages. For the time being, I'm going to steer clear from coding and scripting.

But I will definitely continue thinking about programming, about Forth and other programming languages, and about applications and related subjects. Maybe one day I will come up with a well-formed idea that I'll have the determination to code myself. That would be cool.

Monday, October 8, 2007

Why I Should Quit Programming

I think I've just had it with trying to program anything.

In the past couple decades, the programmers devised and promoted naming conventions, libraries and software-hardware systems, professing all the best intentions. But, the situation that we have is far from the picture that they paint with loose, vague, words intended mainly to excite and bring followers.

No one is making any significant criticisms or arguments for change, whether to simplify or improve the usefulness of anything, because either you are a programmer, resolved to plugging into the world of programming modern operating systems, or you are an outsider, and you can't begin to comment on it because you don't understand any of it. And rightly so - the face of programming has become increasingly complicated. Complication is the way that programmers, like many other professions such as politicians and scientists, insulate themselves from accountability.

Whenever I try to start programming with advanced libraries, with an original idea in mind, the obstacles I discover constrict and try to mold my idea until it is something else. I feel like all I can do then is the exact application the library was "intended" to make. Anything else would be too difficult to be worth it. Anything different or unplanned by the library writers requires learning dozens of new things to get around the odd behavior of the library or the operating system. Behavior that they don't document because the majority of people don't reach for beyond what they are told to do.

In this general environment it's impossible to do what you really want unless you are committed to a point beyond what I'd consider healthy or balanced. So programmers either 1) work on shared distributed projects, following bullet-point lists for specifications or coming up with features that are impossible to evaluate holistically, or 2) they create average software that offers little of anything new or 3) they work for large companies that rely on procedures that result in applications that use hundreds of megabytes of hard disk space and RAM.

And sometimes I get the disturbing feeling that someone wanted it this way.

Programming has changed. It used to be that programmers were the original thinkers, the artists, the ones interested in improving daily life and in enlightening themselves and others. But that is over. Programmers today are engaged in an activity of a different sort - controlling others. Software is one of the hidden avenues to power that exist in the modern Information Age. The only people that programmers really deal with is other programmers or people with an interest in learning more about it, but they just want to make them more like "programmers", not so that they can be empowered but so that they can feel that they have some control over them. They treat other programmers like computers.

The kind of control that programmers do is, mainly, keeping others in their boxes, creating boxes, and thickening the boundaries of already existing boxes. Information has become the new territory and programmers mark out their territory by compartmentalizing everything, by turning everything into a module, and by writing software licenses.

To be an artist programming computers takes being of a certain breed, a kind of person with above-average symbol recognition and recall, someone who can feel comfortable using the provided structures to make castles in the air. But so far I feel that the majority of New Media to be limited in ways that are not appreciated. And that there is very little that could be done to change things from within the system.

Sunday, September 30, 2007

Pros and Cons of Using GC Forth

Regarding the practical aspects:

Pros:
Quicker startup than cold-booting a conventional OS
Clean and isolated; no spyware from the internet or garbage cleanup reducing performance
Includes a simple, easy-to-use, reasonably fast version of Forth

Cons:
Crashes a lot due to incomplete drivers and memory layout
Too minimal
40x25 block layout sometimes restricting
Takes a lot of desk space
Requires a users to buy extra accessories. all of which are pricey, obscure and/or kludge-y
No true file-system support


Regarding the software graphics and sound drivers as of version .70:

Pros:
Efficient, molecular control of sound and graphics

Cons:
Software based - uses CPU cycles
The API is incomplete and sometimes buggy
Still no 240P

Regarding the viability as a product:

Pros:
Proprietary everything means total control - more profitability and discourages directionless user-created contributions
Potential for a fun, clean and efficient game-making system
Should work on the Wii in Gamecube mode.

Cons:
Realistically, the market is limited to hardcore hobbyist-types with either an already compatible setup or the motivation to obtain it
Ugly, stark, unfriendly, and limiting user interface
No file support makes it very unattractive - you can't easily import or export anything, you can't organize your data or easily manage disk space.

------------------------------

I tried to think of as many Pros as I could. They are drowned by the Cons.

Should I port to the Dreamcast? It runs CD-R's directly with no modchip and could be remotely controlled through the serial port, eliminating the need for any peripherals at all. And it wouldn't be hard. I might even be able to include GPU support.

It even supports VGA natively.

I think I want to port GC Forth to the Dreamcast.

Thursday, September 20, 2007

Just wondering

Anyone actually have success running GCForth yet? I'm sorry to say I have no idea whether anyone has run it yet. Since there is a small community of GC homebrew people using SDLOAD I thought that there would be a few who would have everything but the keyboard accessory. But if the program for some reason doesn't work, that would be an important flaw!

Silence isn't golden! Reply through the comment system.

Sunday, September 16, 2007

Problems Running INSTALL.EXE ?

I just discovered that a couple needed DLL's that I didn't know about were needed by my install program.

Download and extract this .RAR file into the gcforth_70 folder. It should fix problems running the install program.

>dll.rar<


The main package has also been updated with the DLL's.

Saturday, September 15, 2007

New Music Section In My Game Webpage

>Link<

I've created a new page to showcase some of my game music.

Monday, September 10, 2007

GCForth .70 (alpha) Download

>Download<

Requirements for installer: A Windows PC with ~20 megs HDD free. Run the exe and tell it to unzip to the desktop.

See the >manual< for details (also included in package.)

Wednesday, September 5, 2007

What's Happening: The Botched GC Forth Beta

To get this post moving along, I think it will help to write it in a question-and-answer format.

1.) Where is GC Forth?

It's definitely on an SD Card. Due to a recent computer crash and failed attempt at system recovery, the source code may or may not be backed up properly on my external hard drive. But I have a working image that I could download onto the PC.

2.) Why haven't I released it by now?

For all intents and purposes the Forth compiler is finished; as are the rudimentary interfaces to graphics, sound, and input. But there is a lot more to access and frankly I've become more than tired of writing drivers; I'm sick of it. There are too many devices and not enough programmers. The former is the more significant problem because the 2nd can be alleviated.

Furthermore, a lot of the underlying code was unplanned and written impatiently. Its finished state was vague; I had no clear idea of what I was creating and I thought, at the time, that that was a good thing.

I also thought that I could pioneer a lot of technology but I've realized that the reason I've been having such a hard time and constantly having to rethink driver interfaces is not because I keep changing my mind but because I have been eschewing real-world up-to-date experience with other software, and I have been having the wrong attitude towards software development, confusing it for art-making. (Art-making being something that can be supported by software but low-level programming being a terrible medium for art.) And although I may be bright, I may not be the most logical thinker. I have been building blindly and running into traps that I set for myself.

It has not helped my goal that I basically stopped using my creativity to put anything artistic together - no games, no music, no stories, no drawings - thereby removing any chance of me knowing why or what for I was developing this software. This had been going on for a long time. To put it simply, I was running on fumes, and I ran out of steam. More at the bottom paragraph.

In other words, the Beta of GC Forth hasn't been released because it is not fit to be called a Beta of any program.

3.) Is GC Forth vaporware?

Yes, and no.

At this time I have no more plans to release GC Forth as a commercial program.

This doesn't mean that I've given up on creating the best game development software. In that sense, GC Forth, among the other experimental Forth-based systems I've developed, will live on as inspiration to motivate my next tool. Which I am hard at work in planning. More on that at the bottom.

I should and do realize that I am damaging my young reputation by declaring my own program vaporware. But I think that I am showing that I am developing as a serious software architect as well as the artist that I want to be. And at least I have the courage to admit that my idea may not have been so great.

4.) Do I think it will do anyone good to release GC Forth as it is?

Well, it can certainly be released - but I doubt it will go farther than being a mere curiosity in its semi-unfinished state. It can definitely be used to create amusing little games. But advanced things are very difficult with the low number of high-level functions.

There are many good reasons to cancel GC Forth as a commercial endeavor. The new version of Action Replay blocks out SDLOAD as a mass-market platform. And, while interesting and wacky, using a keyboard and mouse on a Gamecube is expensive, cumbersome with the many adapters required, and not as smooth as a standard computer because of the limitations of the joystick ports. Also, it is not possible to burn your own Gamecube discs - so would you give or sell your games to?

Finally, and perhaps the most interesting, blocks - the simplest way to access disk. Virtual memory, when done the proper way with blocks, is a fantastic way to optimize any application. But I did not realize at the time that I was busy working with GC Forth that blocks are not much good if you don't have an idea of what you need to be doing with them; for instance it is not against the rules to write words for accessing a section of disk as if it were an array of cells; or to use blocks as the underpinning for a FAT16-compatible filesystem. All of these things COULD have worked - but again everything goes back to the problem of not having any applications. (Even flat blocks could simplify an applications by another order of magnitude - but only if the disk is structured out from the start!)

It remains to be seen whether or not GC Forth should be resumed in the future.

5.) Last paragraph: So what am I doing now?

I have begun a new project. It is a multi-faceted project. It is a slow, but progressive project. A large part of it is an exciting process of rediscovering my creative mind. It's like a muscle; I've got to exercise it to get it to where it needs to be. As I mentioned in a previous post, I am playing around with different platforms. At the same time as I am learning about them, I am also evaluating them, and making notes. (List of programs and platforms: Game Maker, Flash, NES, GraphicsGale, FL Studio 5, Reason, Audacity)

My primary interest is in exercising my imagination, my ability to come up with new ideas, initiate projects with a goal in mind, and see them to completion. And to tell stories, and to make points. As an artist I've let a preoccupation with programming, and an obsession with doing something pioneering, rob me of valuable time that I could be spending working on things intended for other people. Which would provide the essential experience needed to create a tool of my own.

The second part is plans for a game-making program. It will run on established computer platforms and it will be based on this singular idea; simplified, straightforward game creation for creative individuals.

I am selecting the best features from already-made software, piecing them together in the best way possible, and throwing in a healthy helping of original ideas to fill in the gaps and fix what doesn't work in my view. This is the right way to develop software. You've got to build on what others have done but you've also got to have a fresh mind - you shouldn't just keep adding crap and never evaluating ideas.


As for GC Forth, since I am very interested in documentation, I want to put together some kind of documentation that not only has the info, but looks good and is actually interesting to read. I have been thinking about doing it in software form but I'm not sure. If I release GC Forth, I'd probably get lots of questions and I think that would help guide me, so for that reason I'll be uploading the GC Forth image as soon as I feel comfortable that it doesn't have any live wires sticking out and that it doesn't have any confusing remnants from the past still lying around. I WILL GET AROUND TO THIS SOON I PROMISE!

Friday, August 24, 2007

Another Delay

My recovery from sickness continues, and my new Brooklyn apartment and my roommates have been needing my attention.

I also had to send out my laptop for repair because the video card seems to be shot.

So I'm using one of my roommate's laptops.

There is no news in GC Forth. Well, I cleaned up the project disk a bit. But otherwise development and documentation have been more or less stationary. I'm going to be very busy this weekend with visiting friends. I'll try to get a few hours on the dox in.

Wednesday, August 15, 2007

Note: I edited this post on August 24th.

So I got another week of work at the camp I "finished" the week before last. I'm right in the middle of it. I thought I might get some work on GC Forth done, and the director here was nice enough to lend me a monitor, but there's been little time and I am probably attending my roommate's birthday party tonight.

GC Forth is a starting-point language. I use it for my own enlightenment. It gives me a clean mental context that the Windows/C/Internet environment has little appreciation of.

ON THE OTHER HAND... it doesn't do enough on its own. I've been wanting to make games, but I've been finding myself wanting to do higher-level things much faster than GC Forth was really designed for. My desires have changed. I suddenly appreciate the tools that have already been developed; files, mouse-driven GUI's, graphics libraries- simply because they can help me make games NOW, even if they aren't ideal.

GC Forth is a great little environment to build off of. It has a lot of potential for improvement. But I need to move away from it. I'm not going to abandon it before release; it took too much time and care for me not to share it with others.