Jason Stredwick


Current Residence:
Bothell, WA 98011

CV / Resume
Masters Work
   Various Code
Misc. Ideas
If you wish to make comments about these ideas, please feel free to send me email. I had a forum previously, but no one was using it except spammers so I took it down for now.

April 21, 2007 Cross-platform compiling

Something that may be nice at some point is to define a header file to standardize a minimum set of #define symbols that are used for compiling across different platforms. For instance, whether you are using g++, gcc, visual studio, etc. Some other ones include which platform you are on, basic system features that may be important. Of course this would not be an all inclusive list. Somethings may still need to be hand coded.

The point of this idea is to move away from configure scripts, which I have never been a fan of. Instead, cross-platform programmers would simply create their code with the standard defines that they wish to handle. Then each compiler, which should already be configured for certain situations, would then pass their defines on to the built programs. Essentially, this would be the same as passing state from the parent (compiler) to child (program). Of course, there would be ways of bypassing the default heirarchy, and leave the ability to use configure scripts if one wants. However, I would like to see configure scripting minimized, and the coder and compiler handle the necessary states.

April 21, 2007 Hardware such as graphics and physics cards

I have been annoyed for a long time about graphics cards for many different reasons. One such reason is a lack of chip design focused on reducing power consumption, noise, and thermal output. Intel has made great improvements in their chips but these improvements do not filter out to other companies typically unless those companies merge. Otherwise, the specialty companies probably would not get around to making these types of improvements because their focus is on their reason for the new card. Also, it seems to me that these types of companies are moving away from the idea that if I buy hardware it is mine to use as I want, even if my purpose is unrelated to the original purpose. I understand the different reasons such as proprietary information and such, not that I always agree with it, but I do understand. While I have other issues, they are not the point of this idea and do not need to be mentioned.

What I would like to see is a reduction in specialty hardware such as graphics, physics, and sound cards. I think a push should be made to extend the market of reprogrammable devices. It has been a long time since I dealt with FPGAs and Flash ROMs and such, but it always seemed that this concept of reprogrammable hardware is the way to proceed for the future of programming. Perhaps as new material and methods of chip creation are discovered, this will be become more feasible. Unfortunately, I do not have the statistics on speed difference between such devices and normal hardware devices. Is there order of magnitude differences in speed? Could parallel processing techniques be used to compensate for the speed differences until better reprogrammable devices are created?

I have many ideas of what would be cool, but no idea of their feasiblity, so I will just name a few. One would be to have this hardware on something like a credit card type device that would be pulled in by a reading device similar to DVD devices such as the Wii. This device could also be built to support cooling for these processors. Another idea is snappable devices. Basically the processor is encased in some sort of thin shell, as would other types of hardware such as memory. Then you would be able to snap together chains of memory to a processor and/or chains of processors. It would also be nice if these devices were somewhat smart in that they have a basic language to describe themseleves and their capabilities. Programs could be uploaded, at least partially, to a specific memory region on the processeor itself or be designated remotely like the current method of running a program. Programs could be written to look at a hardware configuration dynamically and adjust how to proceed. This could have new meanings for OSs what they do and how they do it. As the connectors are able to provide information about their interfaces and adaptors would be created to bridge between incompatible interfaces one could begn to be free of where the information is coming from and more dynamic programs could be created. Data could come from a processor totally dedicated to storing information, hard disks, networking devices, USB, etc.

Anyways, I have tons of ideas of how this could be useful, and hopefully I may see it some day. However, while it interests me I am not sure if I would be able to accomplish this task myself. I have though about building a simple dynamic computer out of FPGAs or something and seeing how it would work.

April 21, 2007 Compiler Types

As I have worked more on my programming projects, I have realized that something needs to be done about types. For example, as I work with pthreads they pass their arguements by void*, which is very problematic. I understand that this is a problem with the underlaying OS to some extent at least on Windows. Getting into a major conceptual redesign of an OS is beyond the scope of this idea, but is somewhat related. What I am wondering is if there is a tradeoff between compiled programs, iterpretors, and JIT compilers that could be used for more dynamic programming. I know this is already done to some extent in programming systems such as CORBA, I believe. What I want to know is if there is a way to maintain the speed and efficiency of compiled programs with something similar to an interpretor. Maybe I am all wet on this one and it is already out there, but I do not know what it is, so I will continue to think more on this issue.

August 6, 2006 Characters and Strings

I have been thinking about internationalization and some of the problems. First, I would like to begin by saying that I dislike char as a data unit, or at least in that it defaults to a translated unit instead of a raw unit. Second, I have been wondering if strings should be a part of the core c/c++ language. I am sure there is much more to read out there than I have actually read, but after thinking more about GUIs and the like, I began to wonder if strings are more a GUI unit.

After looking over the generation of fonts in opengl, I realized that this is necessary for all languages. At that point, I found a few good websites that work specifically on converting alphabets into a digital medium along with translations between many of those languages. I am new to this area and I am continuing to learn more.

Finally, as someone who has worked with evolutionary algorithms, it may also be useful to think beyond human languages and setup an easy method to develop new languages based on given codes or symbols. Of course, this would have to lend itself for fast efficient processing. This may also be related to some of the thinking I began on moving regular expressions from language/text based processing to a more general pattern recognition type of processing.

August 6, 2006 GUIs

I have started work on a GUI API that focuses on actions instead of display units. Instead of a GUI being a set of 2D sprites that allow for text input or mouse selection, I am thinking of enumerating available physical and virtual devices as a set of properties that can be assigned to classes dynamically or statically that give them access to certain data. For example a remote keyboard could be a specialized network socket that signals a class of incoming data assumed to be in the form of specified keyboard values. What the incoming data is hooked to could be a button widget or a keyboard input manager for a game.

In this sense, the visual side of GUIs now become just another property to be assigned to an object. This means that I can assign 2D, 3D, plain text, or nothing as the display unit for an object. This brings up other issues such as tailoring output to a display device and at what level this issue should be handled. It also brings up the issues of detecting and managing the range of output devices.

July 21, 2006 Programming IDE improvement

One thing I would like to see happen or implement myself is to add a feature to programming IDEs and code editting tools in general. This feature is a code formatter. Everyone has their ideas about the way they would like code to be formatted from the trivial items such as number of spaces to indent and where to put the open brace to more complex items such as when, if ever, to put code on one line and the abbreviation of names. I was thinking that with the increasing control over the auto formatting of certain tools, maybe the next step would be to create a raw format for code that would be the minimum amount of formatting to ensure compilation using the file directly. Then instead of adding formatting directly into the file, it is only modifies the text on the screen not in the file. The main disadvantage to this approach is moving preferences between computers and tools.

July 21, 2006 Browsers

One thing that has always puzzled me is the quantity of effort put into creating web programming languages and tools to manipulate browser displays. What puzzles me is that the trend seems to be approaching full window GUI APIs. If this is the case, why hasn't effort be shifted to making html and such directly translated into GUI API calls? Essentially, the browser window is essentially becoming a glorified desktop that can only display and give input to online sources. Now there are certainly aspects of a browser that are useful such as the use of the address bar, easy access to favorites, and others. By translating html and other code into standard programming languages or accessing GUI APIs does not mean that those useful components would be lost. Anyways, it is just a strange trend in my opinion.

May 5, 2006 Added a short rant about templates

One of the problems I have been having recently with templates is the dependence on a const value for templates such as template < int value >. A simple example is an array class:

template < int N > class Array {
  int d_array[N];

This works great except when you want to create an array of a size determined during runtime. However, this is not allowed, as far as I can tell, because the template requires a constant expression. For example, this can be an issue when reading from a file where the first value read in is the size of the array and the next values are the array data. At least with dynamic memory, you can create an array off the heap:

int *data = new int[size];

and then you can read in the data from file. However, templates do not even allow you to create a pointer to a template class with a user defined size:

array<size> *data = new array<size>; // Error

Now I just need to figure out some way around this or find out the proper way to handle this situation, which means more reading.