carlfoxmarten: (chair)
Current status on the CreateSimulator project:
  • Editor: Fairly complete. (I just need to attach a bunch of menu items and buttons and add a bunch of icons)
  • Creating projects: Close. (I just need to add the widgets to handle it and check to see if that project name already exists)
  • Project loading: Complete.
  • Compiling projects: Not started.
  • Downloading projects to the Command Module: Not started.
  • Controlling robots from the computer: Not started.
  • Simulating a robot: Nowhere near started.

My target for the upcoming open house event is to be able to have the same code controlling robots in thee different ways:
  1. Directly controlling an iRobot Create through the included Command Module.
  2. Using a laptop to control a robot through a serial cable.
  3. Simulating a virtual robot on a computer.

The last part ia going to be the hardest part, as I don't have to write my own compiler, I'm going to use variations on the GCC compiler.

Next week, I'm hoping to have two compilation paths completed (one for running on the local computer and the other for running on the Command Module's ARM processor) and the simulator at least started.
That should give me a week to finish the simulator, which ought to be enough time.

Let's hope I haven't overdone things again...
carlfoxmarten: (Default)
It's exactly three weeks until the campus open house event, and the software I'm writing isn't anywhere close to being done enough to demo.

At a bare minimum, it needs to be able to load projects, edit source files, compile the project (in two different ways, one for local execution and the other for embedded execution), download the embedded code to the robot, proxy the local code through the serial port, and run virtual simulations.

So far, it can list projects for you to choose from, and can't even load the project yet.
I'm going to have to devote a whole lot more time to this... =>.<=
carlfoxmarten: (Default)
I just got home from my Grandpa's house after watching today's Canucks hockey game where I was making notes about my current Create Simulator project, and realized I needed to have my notes beside my computer while I started adding more code to the project.
(it was the first game of the official playoff series. The visitors were the Chicago Blackhawks, who we solidly defeated with two goals in the first six minutes of play, and no goals after that)

Ordinarily, this wouldn't be much of an issue, but today it got me to thinking about what I would like to see in a desk setup.

I do a fair bit of typing when working on projects, which means that I need my desk to be easy to sit at and comfortable to type at.

Some other things I'd like the desk to allow is easy access to my growing selection of CDs, small reference books, and larger reference books, as well as having a convenient place to lay the reference material out so I can read it while typing.
In this case, I've found that reference material can come in many shapes and forms, not only including large and small reference books, but also sheets of paper and my varying array of clipboards.
(I much prefer to use clipboards for writing notes in over three-ring binders as they're much thinner than binders can be and don't take up as much width either, which means I can take more clipboards with me on my excursions and separate my subject matter earlier than with binders)

I've noticed that I much prefer using lots and lots of shelves for storing things in, as items that are stacked are quite easy to nudge over, and aren't so easy to search through when you've misplaced something.
(unfortunately, due to living in a converted attic, the walls are only vertical for about the first two thirds, and are diagonal after that, so I don't get to have very tall bookcases)

My preferences for using lots of shelves also extends to my preferences for storing other items.
I once saw a picture of a Mariners' Library of some sort in England where each row of bookcases were on rails, and each bookcase was easily moved by turning one of the wheels on either end.
My thought when I saw that was that it was a relatively efficient method for storing large amounts of whatever happens to need to be stored on shelves.
(in particular, cooled pantries would be a good place to use something like this in my opinion, as my family uses the pantry a lot for storing food that needs to be kept relatively cool, such as root vegetables, fruit, flour, soft drinks, wines, sugars, etc etc)

Back on the topic of desks, I also noticed that I need to ensure that my computers are underneath the desk's surface and even behind a door to keep the noise down.
(I may need to have my ears checked when I finally have a job that provides medical coverage, at night when things are quiet my ears have strange static-like droning, the meaning of which I have little idea)

On a slightly related topic, I'm progressing fairly well on the simulator I mentioned previously. I'm currently working on the Integrated Development Environment's interface and am getting close to being able to hook things up on that end.

However, I still don't have any code written for the simulator proper or the code compilation system, so I'm feeling a little behind.
(even though I still have at least six weeks to go)

Well, it's off to bed I go, then up to finish delivering the papers that were late in arriving, and then more code writing.
What a cycle...
carlfoxmarten: (Default)
"How early are you?!"

I'm so early, I'm in charge of the most assured project that's going to be on display at the next campus open house.

I'd started asking questions about a month ago on what's going to be happening with this year's open house event, as it's usually held sometime in late March, early April, usually in the middle of the week, and in the evening.

So far I found out that it's on May 28th, a Saturday, from 11am to 4pm, and it's been delayed so we can show off the new space we've acquired.

I've been volunteering on open house duty for at least four years, maybe even all six or seven years I've been here, and have recently been in charge of the iRobot Creates that the Computing Science department has.
Mostly, this has entailed setting them up to run autonomously somewhere in the CS area to spark interest.
(unfortunately, the department doesn't have anything in their curriculum that uses them, so it hasn't been quite as interesting as it could have been if we were actually teaching with these robots)

This year's project is much more involved than last-year's was.
A simulator for the iRobot Create, and an integrated development environment that's simple enough for students to use.

The intent is for the university to use them to teach first-year students programming on a physical device, but that would penalize students who don't have as much time on-campus to work with the physical robots.
Hence the idea of using a simulator to allow students to work with a simulated robot in the same (or at least a similar) manner as they'd work with the physical robots.

A very ambitious project.

So far, I have a primitive editing window and little else.

However, it is a step in the right direction.
I've started having a look at another project's source code to see how they tackle certain aspects, and am going to see if I can adopt similar methodologies.
(they do make sense, after all)

So far, my deadline is about seven weeks away, which means I should get cracking.

Also, since they're expecting over three thousand visitors, I better make sure I take plenty to drink so I don't get hoarse.
(I mentioned this to the person in charge, and she thought it an excellent idea, so is going to pass that suggestion along to the other people who are going to be at the CS booths)
carlfoxmarten: (Default)
Right now I'm mostly waiting for my paycheck on Thursday so I can pre-order my copy of Portal 2.
The trailers Valve has on their YouTube page are quite impressive.


In unrelated news, I may need to nail down a mousepad to my desk's keyboard drawer.

Apparently, I lean on my mouse a bit on the hard side (not sure quite why just yet), and have rubbed a thin layer off the mouse's non-slip pads.
(yes, that was the layer with the non-slip coating)

Which means that the mouse isn't sliding around very nicely.

Because my keyboard drawer isn't very wide, there's just barely enough room for the keyboard and the mousepad, so it would be best to somehow affix the pad to the drawer itself so it won't slide around.
(I may need to use a larger mouse than what I'm currently using. My hands are a little on the large side)


As I've mentioned elsewhere, I'm in the process of applying for graduation.

I need to scrape up around $85 to pay for a late fee, then they'll actually look at my application.
(what bugs me is there was no indication that there were periods to apply in when applying to avoid incurring fees. It even claimed that there would be no fees for applying. Yes, I'm quite annoyed, in case you didn't notice...)


The next open house for my local campus if near the end of May this year instead of mid March, to allow the latest expansion to be completed in time to be shown off.

Again, I've offered my services to the Computing Science department.

This time I'm going to be showing off an integrated development environment for the iRobot Create.
(the educational version of the Roomba)

It's quite an ambitious project, as I'm essentially writing it from almost scratch in Java to run on multiple platforms, with at least three options for running your code.
(directly on a plug-in brain for the Create called the Command Module, running on the PC controlling the robot via a serial cable, or running in a simulated environment)

Much of the interface code that wraps the actual code written by the users has already been written, I just have to adapt it a little bit for the various other modes of use, while the biggest part is going to be the IDE itself.

I've never written quite this much code in Java without working on a team, but that's never stopped me before.
So far, I've found a library that allows me to provide syntax-highlighting, figured out what in-general needs to be done, but have yet to actually get somewhere useful with it.
(I have less than two months, so time is ticking away as I type this)

If I do manage to pull this off, it'll provide an excellent platform for future instructors to teach programming to first-year students.
(one day, I hope I'll be among them, but for now, I must wait and satisfy myself with finding a decent job, with coding projects like this as a hobby)
carlfoxmarten: (Default)
Well, I'd said that I was going to post information about my event system for my Tetris-Power project, so here it is.

The main idea behind this is a simple means for defining and detecting achievements.
If everything done in the game can be represented by a large list of events, you can simply scan the list for a matching sequence to see if an achievement has been matched.

In this case, everything really does mean everything, including keyboard commands, block motions, rows filled, rows removed, scores added, the advancement of time, error and warning messages for the log, and so on and so forth.

The overall structure of the modules then is heavily involved with the event system, with messages getting passed to the events system instead of directly calling other system, and each system that needs to read messages registers with the event system for the types of messages they're interested in.
(for example, if the logging system were enabled, it would read log_info, log_warning, and log_error message types)

This should greatly simplify the overall structure of the code so that not everything would need to know about everything else.
One of the main issues I have right now is that too many systems need to know about each other, which overly complicates my code.

So far I haven't actually added any code yet, as I'm still working on the concept itself.
Once I have that figured out, I'll have to rewrite large swathes of code to use the events system instead of directly calling.
Supposedly, it should be possible to gradually move over to the events system, starting with adding in code to trigger events, having each module listen for appropriate events, actually using the event listeners instead of the function calls as used now, then removing the functions used previously, then refactoring code to simplify things.

I hope it doesn't break while I switch over, but you can't tell until you start what might happen.
carlfoxmarten: (Default)
I've fixed the issue I'd been having with Tetris-Power's old font engine (it was as simple as an array being too small to fit the information necessary), as well as managing to fix a bug where the current block disappearing due to some values becoming NaNs.

It's been a good evening for bug-fixing.

Now I need to figure out how to approach writing the new font engine.

The old engine made it fairly easy to parse in a long, thin image with a single row of characters as long as necessary, but I can't do the same thing with the new engine.
With the old engine, I chopped up the image into a single character's worth of bits for each symbol and stored each one in the computer's memory.
With the new engine, I'll need to store the image, unprocessed, in the graphics card's memory, which means that the images have to be square and a power of 2 wide and high.
(ie, 128x128 pixels or 256x256 pixels, or larger)

This new engine with allow me to rotate characters as I wish, without getting limited by the screen resolution.

I don't think it's going to be an easy thing to write...
carlfoxmarten: (Default)
So I tried working on my Tetris-Power project again, only to find out why I'd dropped it last time: It was full of bugs.
(if it was literally full of bugs, it'd be easier to fix)

Something I'd done when upgrading the font system seems to have caused major bugs to show up elsewhere in the code, and even rolling back the font system doesn't seem to have fixed everything.

I'm racking my brains trying to find out what the problem could possibly be, but I'm not having much success just yet.

If I can remember how, I'll try to roll it back several versions to see where I went wrong, but chances aren't so good that it'll be that easy to fix.
(plus, there are some beneficial changes I've made since then, so there's no telling if I'll be able to undo all the damage I've done to it)

Though if I can't get anywhere with this, I'd hesitate a lot before I rewrite the whole thing from scratch...
(maybe I'll remember to put in more debug stuff and lots more comments)


Incidentally, I'm starting to work on my graduation application so I can get out of university for a bit.
Currently, I'm working on an appeal to use an arts course for one of my liberal arts credits, and need to find information dating all the way back to the Spring of 2005, which was less than a year after I got my very first "proper" computer, which means that I didn't have a good system set up for making backups.
(I'd had an old 286 with 1MB of RAM running Windows 3.11 and something like MS-DOS 6, so an upgrade to Windows 98SE was a huge jump)

However, I've still found time to try fixing Kathy's site under Internet Explorer (after about six months to a year, that is), and I just might be onto something, I'm just not sure if it works completely.
carlfoxmarten: (Default)
I recently stumbled across a DOS program I wrote a long time ago that simulated the Cellular Automata called Wire World and wondered if I could write all over again to run with a graphical interface.
(the most famous cellular automaton is Conway's Game of Life)

So far I've started writing the back-end, the part that internally stores and processes the states, as well as saves and loads the information to files, which is taking a bit more time than I'd like, as I also have to remember how to build the project from the ground up again.
(it's not too big a deal, though, all I have to do is go back to another project and check the applicable file from that to see what I'd done last time)

Wire World is a rather simple idea, it simulates almost any digital circuit and uses only four states, Substrate (the "background", which does not interact with the wires and signals), Wire (what passes the signals along), Pulse Head (the beginning of a pulse), and Pulse Tail (the ending of a pulse).
(without the two ends to a pulse, the wire wouldn't know which way the signal should be going)

At each step of the iteration, the substrate stays the same (otherwise it wouldn't insulate the wires), pulse heads fade to pulse tails, pulse tails fade to wire, and wire remains wire unless only one or two of the surrounding eight cells (horizontally, vertically or diagonally) are pulse heads.
(note that this means that if there are no pulses anywhere on the grid, nothing happens at all)

If I'm writing this software correctly, I should be able to compile it to run under Windows as well as my primary target of Linux, but that'll probably take some doing.
(and so is not very high on my todo list)

I'll post more as this project progresses, and may even upload this project to a public hosting service later, after it's completed enough for others to see.
carlfoxmarten: (Default)
So the instructor for the annoying course I complained about recently set up a day to meet with us individually (as there were at most ten of us, it wasn't very hard) to discuss our grades.
Naturally I was last (having done the worst of the bunch), and was pleasantly surprised that she gave me a C when I was expecting at absolute best a D or more probably an F.



In happier news, I found a book at the local public library that covers a number of different aspects of writing OpenGL programs, including writing fragment shaders or GLSL shaders.
(pixel shaders, for those of you familiar with Direct3D programming)

It's a rather interesting book, though I'd be more interested in separate books on the individual topics covered instead of one big, thick, heavy book on the whole bunch...
carlfoxmarten: (Default)
What good is a game if it doesn't move?
For that matter, what kind of game doesn't have at least some kind of background imagery?

Now, if your backgrounds have lots of bushes, trees, waterfalls and the like, and they kind of slide or swing into place, wouldn't it make sense for them to wobble back and forth a little bit?

There will need to be more than one animation type, as one type is terribly easy to do and another that I know I'll need will be a bit more difficult.

The easy one will be used for swaying objects, such as trees and bushes, and is accomplished by a simple and oft-used 3D transformation called "shear".
(shearing is like pushing a stack of CD cases over so they form a stair-like structure, with each case offset the same distance from the one previous. This means I have no need to modify the actual model, and can change it very easily on the fly)

The hard one I haven't quite figured out yet.
It'll be used for stuff like the water in waterfalls, and will depend on what the waterfalls look like when I finally design them.
(at least, the specific usage will highly depend on it, the implementation behind it just might be generic enough for more uses than that)

So, the upshot of all this is that I am still thinking about Tetris-Power, the only issue is managing to have spare time for other things, most notably all the homework I have, as well as playing some games.
(currently, LEGO Indiana Jones 2 with my brother and Team Fortress 2)
carlfoxmarten: (Default)
I haven't really been working on any of my programming projects for a while, mostly due to the amount of homework I've got right now.

However, this being Sunday, I have a little bit of time to work on other stuff.

So, I'm going to describe some of the things that my AniMidi project will require.
(maybe I'll get motivated and start working on it again...)

The end-goal that AniMidi has is to provide end-users (intended to be just above your average user) with virtual instruments to play your note-based music files.
(primarily MIDI files, though not limited to them)

This means that I have a fairly linear process for getting the music in one side and producing the (hopefully impressive) visuals out the other side:
  1. The user provides a music file in any supported format.
  2. The music file is scanned to determine which instruments are used.
  3. As the music file is scanned, a list of note-control messages are stored in a separate place, in such a way so as to make it really easy to control the instruments in real-time.
  4. As there may be more than one virtual instrument object that claims to match each instrument in the file, a decision must be made as to which ones to use. For instance, one virtual instrument may look more classical in nature and the other may look more futuristic, so the one that more closely matches the rest of the instruments should be chosen.
  5. Suggest a (fairly) random layout for the instruments based on the common type, including backgrounds.
  6. Allow the user to completely change everything if they want. (kind of like an "Advanced Layout" button)
  7. Play the music and virtual instruments together.
  8. Profit?

My primary concern is going to be in parsing the music files down to the individual note commands and making sure that the timing is always bang on.
I've been reading up on the MIDI file specification (as MIDI is also the name given to the wire-protocol used for digital instruments to talk to each other and has no timing information), and am still a little confused as to the timing part.

I've actually got a fairly thick book on the subject that I'm currently borrowing from the university library called "Beyond MIDI", and it goes into great detail on quite a number of note-based music representations, including Csound, Music Macro Language, and almost a dozen other formats and dialects.
(it's a good thing it's a four-month loan period, it's a tough slog!)

Once I figure out how to parse the music files down to an internal representation, it's a short step from there to the animation curves needed to control the instruments.

Well, fairly short, anyway.

If you've ever watched any of the Animusic videos, you'll have noticed that many instruments have common "striking" implements (ie, picks, hammers, drum sticks, etc.) that move around depending on which note they're supposed to hit.

All the work I've done so far has only had one "striker" per note, though I should eventually implement this common striker stuff as it really adds to the visual interest.
(plus, certain instruments really don't look right if each note has its own striker)

Anyway, the part I'm most concerned about is timing, as MIDI specifies more than one way to set it, and it can even be changed in the middle of a piece!
carlfoxmarten: (chair)
I thought it might be interesting for people to see how I'm going to specify fonts.

In the previous font engine (which was essentially sprite-based), each font was a long, thin image with characters running horizontally in alphabetical order from the exclamation point ('!') to the 127th ASCII character ('}', as it turns out), with the top line of pixels indicating where each character stopped and started.

The font engine would run through this top line, looking for the spaces between the dots or dashes and extract each character, putting each into its own sprite.

This worked very well up until I needed to put a line of characters in front of a row of Tetris blocks, as the sprites were positioned based on screen pixels, and the Tetris rows were based on 3D space coordinates.
(granted, I did figure out how to do a rough conversion, but that wasn't a very good method, and it wouldn't let me do any rotations or scaling, which would be rather handy for extra effects)

However, the line of pixels indicating the extents of each character was something I could readily add, and I really liked how everything that specified a font was in one file.
(unlike some font engines I found...)

So, my next font engine will again use that row of pixels to specify character extents, but as I will use only one image texture for all the characters at the same time (no more texture splitting for now), I'll need to do "character wrapping", which also means that the line of character extents indicating pixels will also need to wrap.
(for some reason, graphics cards happen to like square images instead of long, thin ones)

I've started some work on the new font engine, which also means I've broken all the current font code, which then means the project won't even compile now.
Good incentive to get the new engine done quickly, eh? =^.^=

The one thing I'm not quite sure about, however, is generating the new fonts.
So far I've used The Gimp to create a 256x256 pixel image and paste in all the appropriate characters, tweaking the font sizes and stuff until almost all the space in the image is taken up without having anything overlap anything else, then laboriously putting in all the alignment pixels.

I'm thinking I should write a font generator in Java...

Edit: Just so people have an idea of what I mean, here is a possible font descriptor image for the new font engine:

Note that the strip of pixels indicates how wide each character is by indicating where the spaces are.
carlfoxmarten: (Default)
So, as I'm bored today (at least until I start making dinner, then going over to Grandpa's to watch the hockey game), I've decided to rewrite my font engine.

The current font engine I have for Tetris-Power is strictly based on bitmaps which are used to directly affect the screen pixels, which means that if I need a different font size, I have to create, load and track another font file, which is not a recommended practice.

So, I need a polygon-based font engine that allows me to specify a size for each line of text without needing a new font for each point-size I need.

This will need to be almost a complete rewrite of the engine from the ground up, as my previous font engine used a vertically short and horizontally long image to represent the font, and graphics cards like square images to work with.

Another reason I need this rewrite is that when a row gets removed, the score you get floats up from the vanishing row, which means that I needed to figure out exactly where in pixels I had to start the score, when the rows exist in three dimensions. With the new engine, I'll be able to specify the location of the score text by simply taking the 3D position of the row and moving it closer to the viewer, so much simpler and with even less chance for mistakes.
(also, it makes graphical effects like spinning text SO much easier to do, and it even gives me anti-aliased text for nearly free, too!)
carlfoxmarten: (Default)
So, I was reminded today that the biggest contributor to a mess is half-completed projects, and that is certainly true in my case, both physically and virtually.

Physically, my room is a mess, and most of my attempts to tidy it up merely shift the mess to some other corner that I don't use often.
(also, getting more furniture doesn't always help either, especially when it's a non-computer type chair)

Virtually, I have several projects "on the go" that have kind of been "temporarily" dropped, kind of like all the webcomics you find on the Internet that went on indefinite hiatus.

I'm not proud of failing to complete projects, but like so many other people, my mind wanders pretty quickly some days and I run out of effort, motivation, and time to complete all of them.

I have an entire folder on each of at least three, maybe four machines dedicated to my Blender scenes, the vast majority of which can really not be called complete, in any sense of the word.
(if you look at my galleries on DA or FA you'll noticed that most of my submissions have "WIP" somewhere in the title)

Programming projects I'm not short of either, what with AniMidi, Tetris-Power, Sphereority 2, "Obsidian", and others I'm sure I've forgotten.

To help me remember to work on them, I'll list some of my projects with a description so you guys can find out what they are and I can try to remember about them myself:
  • AniMidi:
    A project for taking in "note-sampled" music files such as MIDI and creating virtual instruments to play them
  • Tetris-Power:
    Tetris with power-ups.
  • Sphereority 2:
    Balls versus Spheres, a third-person multiplayer game over a network.
  • "Obsidian:"
    A puzzle-adventure game I've been thinking about for almost five years now.
  • Game Engine:
    While not a game, per se, it would provide a mechanism for writing puzzle-adventure games more easily, kind of like the Plasma engine that Cyan Worlds is using for Myst Online: Uru Live (again) and some of its other games. So far, it's only in the planning stage, but even then it doesn't adequately cover all aspects of how the game will work (ie, it would work very well for playing the game, but does nothing for providing a UI for settings, saving and loading games, etc.), probably as I have no real idea as to how those parts should work.
Most of these are much harder to complete than they are to describe (in particular, Tetris-Power is a very good example), which makes them even harder to complete than I think they should be.
(some of this might be helped if I could find a reliable person to partner with to help keep me on track, but so far I haven't found anyone who might be suitable, though I am still kind of looking)
carlfoxmarten: (Default)
You need a way to translate the alien language into the human's native language, or at least a plausible explanation for why the alien wrote in a human language.
(especially when you have physical journals written in that alien language)

One option (aside from having everything written in a human language) is to have the player find some kind of communication device that the aliens use to communicate with other alien races and each other.
This communication device then can translate things as the user sees them.
(the only trick to explain is how the device knows what language to translate into, and that's easy enough to explain without too much trouble)

I have a couple of designs for this device that are easy enough to explain and integrate into the story.

The first is similar to Uru's "KI" (D'ni for 3. A round device that handles communication and navigation) and contains a very small but powerful hologram projector that could be used to project almost anything one wants.

The second option is a set of glasses with LCD-type lenses.
I'm not too fond of this option at present as it doesn't seem alien enough, and the aliens in my story might not be quite similar enough in form to humans, which would require further explanation I'm not prepared to make.

Once you have a device like this, other things become possible (it IS alien technology, after all, so it's supposed to be more advanced), such as displaying an object's combination lock pad (especially helpful for hidden doorways), acting as a controller for high-security machinery (if there's no physical control panel, you have to have one of these devices to use it), flashlight (poor example, but it works), digital journal (with translations), card reader (useful for the possible end-game I mentioned in my last journal), and many other things that I haven't mentioned yet.
(oh, and most of what I just mentioned may figure in my story in some way or another)

Again, the possibilities are only limited by your imagination.
Your imagination can set boundaries with the level of technology you weave into your story, and if you step outside of those boundaries with your design, your players will have a hard time understanding why it works the way it does.
carlfoxmarten: (Default)
So I was browsing through the dollar store last week and found these nice notebooks, good quality pages, nice covers, three different colours, all for a dollar each.
(only sixty pages, but I don't usually use all that much in a notebook)

I've started taking one with me specifically for writing notes on the adventure/puzzle game I'm working on.
So far, I've got some concepts down for several islands, transportation between islands, a communication device, and some of the background story.

To make some sense of things, I'm going to reference some of the history of Cyan World's D'ni culture (which you can find on the DRC's website):

The D'ni are refugees of a great disaster that affected their home Age and are really only one of a number of small groups that fractioned off from the population.
They managed to escape their dying Age by what they call "The Art" (the art of writing Linking Books), which essentially created portals to other realities or Ages.
(D'ni actually means "New Start")
ames
As the D'ni aren't the only refugees from the great disaster, there are other groups that stories could be told of, and it is one of these that I'm thinking of choosing to base my game's story on.
Though, unlike the D'ni that link with books, my aliens use strange machines to link between Ages.
(and the majority of my game will only happen in one Age, the one we live in, and even on our planet Earth)

Anyway, with that out of the way, I've decided that it might be a good idea for my refugees to escape to a separate Age from ours, and have the final action of the player be linking back to that other Age to report on what happened to this other expedition to Earth.
It gives it a great ending point, and even leads very easily into a possible sequel.

Is there nothing a man with a pencil, a pad of paper and an imagination can't do?

Link tags

Apr. 6th, 2010 12:45 am
carlfoxmarten: (Default)
Sheesh, you'd think I'd learn...

As I'm currently storing my bookmarks in several locations (one page per computer, a small number of links in the browser, and a fair number in a central insecure location), I figured I should try to merge some of them together so I can manage them a little better.
(before you try to get me to use an online service, remember that I like over engineering stuff and prefer stuff I write over stuff others have written)

So, my first homepage (at least, that's how I used it) was called New Links (technically a second-generation system for parsing up an XML file full of links, and it is this system that's spread across several computers), a centrally-located, insecure link storage system that allows me to view "feeds" of links as webpages or RSS feeds.

I plan on being able to search for links by given them tags, so I'm calling this revision Link Tags.

It will allow me to store Entries (containing at least one URL/name combination and a description. For example: A webcomic and its forum get one Entry), give them Tags (such as 'webcomic', 'search', 'art', and so on), search by tags, as well as arranging them in Pages in a similar manner to how I'm doing it right now with my decentralized system.
I will also be able to view RSS or ATOM feeds of tag searches or pages, thus containing all the features of both New Links and Link Feeds.

I'm writing it in PHP v5, and using SQLite 3 to store all the data.
I've used PHP v5 before (it's a vast step up from v4), and I'm quite familiar with SQLite 2, so I thought I'd see just how different v3 was.

So far, I have some of the code for talking to the database (I like writing wrappers around my data storage so I can easily reference it later), and am currently working on how the pages will look.

After I have the basic look of the pages down, I'll start filling in the code to interrogate the DB and fill the pages with data, as well as the code to insert new Links, Pages, etc. into the DB for later viewing.

Anyway, it should be pretty cool once I finish it, and I'll try to ensure that it's at least partially secure.

If I get it partially secured, I'll consider letting other people see it (by request only, and please don't post the link to any public space if you get it).
(if I get it reasonably secure, I'll even consider posting it up here, but that's a very big if)
carlfoxmarten: (Default)
So, I've started thinking about my AniMidi project again, primarily about the MIDI import library.

Right now, I'm looking for a free, cross-platform library for reading MIDI files into an internal representation so I can grab the relevant music info at run-time.

So far, I've no ideas of what library to use, though I'm more interested in C++ based libraries at the moment.

For those of you who need a refresher on what my AniMidi project is, it's intended to be a free MIDI file visualization program that you give a MIDI file (or almost any other kind of note-based music file, though my first target is MIDI) and it will create virtual, 3D instruments that will appear to play the music as specified by the given file.

I was inspired by seeing Animusic's videos of virtual 3D rendered instruments playing music.
(you should still be able to find one or two of their clips on YouTube, for a quick preview)

How my project differs from Animusic's approach is that theirs is a commercial plugin to existing 3D tools (not sure which they use right now, last I checked I think it was 3D Studio Max) and is specifically intended to create rendered animations, while my AniMidi project is intended to be an interactive stand-alone program for end-users.
(as I'm planning on using C++, I'll be able to borrow a fair amount of code from my Tetris-Power project, so I won't have to rewrite too much code)

I'd started this project as a final project for a multimedia course I'd taken about a year ago, originally written in Java, but didn't have a good enough grasp of the MIDI import part, which left the rest of the project without much to go on.
My current attempt is to write it in C++, which I've had more experience in now, especially with 3D graphics with OpenGL and the SDL.
carlfoxmarten: (chair)
To help me get more interested in starting up work again on Tetris-Power, I've decided to compile a list of all the modules I've written so far and what they do and support.
Large amount of geekery behind cut )
It's also looking like I might need to switch to a more event-driven approach sometime, as what I'm currently doing will require a fair bit of work to connect certain things together.

Profile

carlfoxmarten: (Default)
Carl Foxmarten

August 2023

S M T W T F S
  12 345
6789101112
13141516171819
20212223242526
2728293031  

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jul. 5th, 2025 02:33 pm
Powered by Dreamwidth Studios