Log in

Tue, Jun. 19th, 2012, 01:11 pm
Scratch: A Simple Dice Roller Part 1

Started up scratch.
Scratch 1

I've added some commands to it, but I can't seem to make them do anything. Figured out I could rotate my sprite. I have these motions in a stack now. What in the hell do I do?


Ultimately failed and had to go to the guide... bad.

Apparently clicking on the pieces makes them apply to the action to the object you're on. When you've stacked the blocks though clicking on any of the blocks only runs the first action. I'll presume this is a bug. You have to separate them to get the other actions to do anything. Frustrating.

Turns out it was because of my stack that it was doing this. I remember a speach in Objects in Design about Alice where they noted that you *have* to show people what happened or it will be confusing. In his case he showed somebody setting the bunny to a move in a location that was off screen. He set it into the non-default immediate mode and the bunny simply disappeared. In the default animated mode you watch the bunny slowly slide off screen.

The problem this was meant to solve just happened to me. I set my character to move, rotate 15 degrees, and then point at 90 degrees. The final operation reverses the middle operation so it looked like nothing was working because I didn't understand that the stack would be applied simultaneously. I think this exact moment is instructive for what the Alice design was about, but I'm curious if, in the future, I'll prefer that this stacking applies everything at once all of the time rather than some running versus designing distinction.


The sprite editor is really easy to use and really helpful. It could use a few extra features like the size of the rectangle you're creating and the like, but for basic stuff it's easy to see all of the options. When you're done with a sprite it properly detects where you've drawn and cuts out all of the extra space for you. I like this a lot.


It was hard for me to adjust, but I think the paradigm makes sense. I started off trying to answer this using a far too complicated answer. I had forgotten the lesson from Visual Basic.



After rethinking it, you put the behavior on the costumes of the sprites to create a dice roller. I don't like that I can't easily duplicate code. I can only duplicate objects. Once you have that in though, it seems to work great!

I have some more work to do to get this thing to the full GURPs features I want, but today's exploration is successfully complete.

Sun, Jun. 10th, 2012, 02:23 pm
Visual Programming


Whenever I read articles like this it makes me wonder why other companies don't advertise the solutions they have that fit into this same niche. One of the VBs -- 5 maybe? -- is what I really learned to program on. Although it may be a toy language and IDE, the presentation was straightforward and easy to use. If I wanted this button to do something I double clicked on it. If I wanted that code to change something in another button all of the info for that other button and its values I could change were discoverable in the pane on the right.

During a class in high school on VB6 one of the less skilled programmers completely outsmarted me on a problem because he understood the visual system better than I did. We had to do this adventure game and I was trying to figure out how to store these massive arrays of text in a manner that didn't look horrible in the code. The other guy finished the project in about twenty minutes. I finally asked him to show me what he had done.

He dropped in a tabbed notebook into a dialog window, named each of the tabs after the chapters in the adventure, and then created labels from top to bottom wit the text he was looking for. I spent forty-five minutes trying to build some complicated data structure with arrays and he just used the obvious visual tools to build his structure in a hidden window.

It didn't even seem weird to him. He'd just noticed while using the IDE that the "tab order" number always went up by one when he created a new "thing" and if he reordered them with one button the numbers would shuffle to be top to bottom. He didn't have any idea what tab order was, but he knew exactly how to reference a number that grows in order.

This guy was an exceptionally weak programmer, but I gave him massive props for this. He really understood the system. Although his answer didn't have that grand structured computer science feel I think this was a hack that was much better than the formal answer.

This simple example starts me down one of two paths:

1] Why don't other companies that provide visual environments like this focus more fully on selling those?

2] How am I going to introduce my son to programming?

Let's start with the second one first. I just need to go hunting for something that has that simple feel to it. Something that's visual and works more like a puzzle or game than a text editor. At the same time, I want something that has that powerful text editor behind it somewher. When he gets old enough to really want to explore I want there to be something for him to explore. I don't want to rip out this interesting and intuitive environment and toss him into the text based slug fest that most programming is.

I think that the only way for me to find this solution is to focus my hobby programming around environments that I think are kid friendly. If it seems straightforward and pretty, but gives me access to the power I want, then I'll have found it.

On to the second, it seems that there may be room for me to try a minor side business on this similar to what JetBrains is doing it. Why don't I take Mozilla or Chrome and just rebrand them as an Internet IDE? It would take some work, but they're both very close to visual programming environments. What about Netbeans, or Qt's tool? What about Squeak or whatever that corporate Smalltalk VM is?

The next step is going to be to start reexamining these tools that are out there. Before I dive too far into that I'll need to make a framework for evaluating it. My draft of that framework is something like this:

Try to implement two programs. The first is a simple dice roller for GURPS. It's a system with a fixed number of dice and a lot of rules that have simple variation. The second would be a simple avatar creator where I can put clothes on a doll of some sort.

Evaluating them will be mostly about how far I could go without needing a text editor. I want to see how many of the relationships I can create and build without even needing to know how to type, but especially not with complicated typing. I also need to see how easy it is to pack up and share with others. Your kids needs a virtual refrigerator to show these things off.

Consider this the kick off. As time comes up I'll go out hunting and report back. Please leave any suggestions about where you think I should look or particular tools you think I should evaluate.

Sun, May. 6th, 2012, 07:05 am
Letting Go of Crack Attack!

I think it is well past time for me to admit that I'm not going to do any more actual work to maintain Crack Attack! The last commit I made was three years ago. Not too long ago somebody popped up wanting me to pull a patch and I never really got around to it.

Looking back there was a beta release of 1.1.15 in May of 2006. I was still attending Georgia Tech and living with the man I considered the co-developer Kevin Webb. There was a big surge of activity because Thorbjørn Lindeijer came out of nowhere with a stack of improvements for the project. We added better model loading, updated the networking library, created customizable textures for the blocks. There was a lot of momentum heading into that release.

I don't know exactly what killed the momentum, but 1.1.15 never became official. Rather than just push the code out of the door during the summer I let myself get side-tracked into a project writing an actual AI so that everybody could watch the computer play the game.

What a lot of people didn't realize is that the versus mode was actually just a set of rules on how many blocks to return based on the score you'd just made. I took samples of how Webb played at his highest level and set up a pattern that reflected this and at the top would keep him challenged. It seemed to work very well for everybody.

Instead of getting the release done I put my time into making this AI into a code base which largely couldn't handle it. I didn't have the skill to do it right and the natural bloat that came with a bad plan for the processing led to it languishing and never getting done. I did make great strides, but never enough to feel complete, and this became the ultimate stop energy.

Now I have to wonder what exactly should I do about all of this? I don't know that anybody still cares enough about this game that basically works with its last beta release. Is there a lock box I can put the nongnu.org keys into in case somebody comes around and wants to handle it one day? As much as I long to see this game back into the community consciousness, it's been enough years that I have to know I'm not the one to do it.

Wed, Aug. 4th, 2010, 11:13 pm
The "Failure" of Google Wave

Apparently Google will be shutting down Wave by around the end of this year citing a lack of adoption. More details are available at the Google Blog: Update on Google Wave.

I believe whole-heartedly that the Internet will be a worse place once this is gone. I believe that Google Wave is the only application to ever come close to getting real-time text collaboration and communication right. As such, it is the best text communication form that exists today, and it won't exist this time next year.

It had a lot of problems. The worst of its problems being that a lot of people got into the beta and didn't treat it that way. They saw a missing feature and simply complained and wrote it off rather than filing a bug or anything. Since almost everybody got in and never took the time to explore the feature set they left with a strange impression of what it could do that missed about half of the functionality. A lot of these hidden features have better and more up-front access points these days and most of the editing features are in a menu rather than hidden behind hot keys.

The second biggest problem it had was also its biggest strength: It ran in the browser. A lot of people's browsers just couldn't handle it. I'm not sure who's fault this is exactly, but I'm upset at how hard this affected it. The same people that would often complain that they wanted a "faster desktop client" version are also the ones that it never occurred to just install Google Chrome and run it that way. It is possible to have multiple browsers installed and to dedicate them to different tasks rather than having one-hundred tabs open and wondering why Wave is slow.

I'm not blaming anybody that this particular problem hit, because it was also Wave's fault, but you didn't give much either. The average computer user rarely does.

I do know that when it's gone that the things I used Wave for simply have no replacements. Most of the other services are replaceable by their other forms. If Facebook disappeared, I'd go back to any of the other blog services and Flickr. If all of the instant messaging services disappeared, I'd use email.

The next time I want to have a conversation with people what will I be stuck with?

Facebook or forums which have never effectively evolved past a flat inline view requiring all sorts of strange user-hacks to actually carry on a conversation with the person that you're talking to. If you don't know what I mean, then you've never read a reply with four or five "@blare," "@dudeman5," etc.

Meebo or, even worse, desktop clients where everything has to be sequential and, if nobody screws up, we may individually have the logs.

Usually when these conversations become sufficiently complicated everything reverts back to email. Email wouldn't be so bad if it weren't for the people with horrible netiquette and that most clients force some weird hybrid HTML upon the world with little option. The average style for inline comments is inconsistent at best and often entirely unreadable if you have a different client from the person that read it. Most people also leave an increasing number of crap on the bottom of the email that modern clients have learned to cleverly hide, but not cleverly stop them from wasting space on the Internet.

This, ultimately, may be why Wave failed. The format it imposed worked well rather than working the way people wanted it to. The average Internet user has no conception of the standards that actually make things operate more smoothly. They have no understanding that the way smartphones top-post is a sign of poor engineering, not adherence to "corporate standards."

The consequence of this is that a great collaborative system is going away. Part of me wishes that this thing had come out of the corners of the Internet where highly technical people tend to reside first. Maybe if they'd picked the right communities like the online role-playing communities and such. If nobody had ever heard of it, I'd at least still have it. The sort of people that made it wouldn't be shutting it down based on adoption problems and other such nonsense.

Mon, Mar. 30th, 2009, 05:41 pm
Fittsmenu and libsexier

I recently decided to do another Google search for my name and came across an old post about a new cairo gtk widget called Fittsmenu. I had some complaints about it, but, overall, it's a really cool implementation of a concept for a radial menu. After doing some more hunting I found out that it's now in a thing called libsexier being hosted by codethink.

I'm mostly writing this post to remind myself about this project because I'd like to pick it up and play with it. It looks like nobody's actually messed with it since 2007 and I still wonder if I can fix the radial rotation to my liking. I'm also curious about how well sub menus can work by layering them in successive rows.

Mon, Mar. 16th, 2009, 02:54 am
KDE 4.2, Or, How I Love A DE That Doesn't Use ...

I recently decided to give KDE a try on my Fedora 10 box. I was a nearly instant convert because it is the only desktop environment I have ever used that gets the task manager right when you place a panel on the right side of the monitor. Every other desktop I have ever used seems to think that I care about the icon and not the name of the application. They come up with all sorts of ways to compress the space that make the entire task manager absolutely useless to me.

I like the initial organization where the display is split along the spaces with it faded away. You can still read enough of the window title to get the context you need to know what to click on. When I first saw this I worried that it would just end up like the Gnome picture because it was so similar in structure, but the lack of ellipses alone was actually an improvement.

Here we see the task manager with a whole lot of windows open. This is absolutely perfect. Every icon is still essentially visible in case that matters. The opening text of the window is still clearly readable. The KDE task manager here tries very very hard to make sure that all of these window titles never turn into a bunch of meaningless "..." crap.

As a note, normally KDE would group these windows up. I actually disdain grouping as well and have turned it off.

In essence, I'm switching to KDE because of the task manager. These are the only guys that get it right for me, and, in my not so humble opinion, the only guys that get it right from a usability standpoint for us precious few that like vertical panels. Thank you KDE people. You are awesome. Should I meet you, I will buy you a drink of choice.

Tue, Jan. 27th, 2009, 10:22 pm
More on Fedora 10

I bought some components for a new computer. Phenom x3, 4G of ram, and a Gigabyte MA78GPM-DS2H. While I was really having problems with Fedora 10 on my laptop, I must say that with a fresh install on this new box I absolutely love it.

The most "holy fuck yes!" moment so far was when I went to download a video online. It pulled up the integrated totem player rather than just download it. In the past this has spelled defeat, anger, and other bad things. This time around PackageKit (I think) came up, hunted around for my missing codecs, quickly installed them, and then the video played fine inside of Firefox.

All I have to say is this: Job well done guys.

Sun, Jan. 25th, 2009, 02:15 pm
Laptop Performance Woes on Fedora 10

Since about Fedora 9, the GNU/Linux install on my laptop has been essentially worthless. Things that used to work fine like browsing on the internet while compiling a small piece of software just couldn't happen anymore. For some reason during this process something would start attacking my hard drive. On this particular laptop, touching the hard drive is likely signaling all processes to suspend and never return. Initially it clicks while the hard drive light flashes. As the horrible smashing continues eventually the clicking sound stops and the light goes solid. This is the time when I physically power off the laptop because it will never come back from this state.

Today it occurred to me that maybe the "random hard drive smashing" really was random and had nothing to do with what I was doing at the time. This would explain why no sequence of events seemed to be the trigger right? Definitely.

The problem with figuring out what was going on is that top shows CPU usage and memory usage. It doesn't tell me a damn thing about which process is eating hard drive. So far I haven't found any software that does and this is upsetting. Especially since *anything* that gave me *any information* about what was going on with the hard drive would have made the task easier.

Today I finally tracked it down and, to some of you, the answer will be obvious: cron. There's a bunch of crap that cron does that comes at about the worst possible time imaginable. Rather than try to figure out exactly whet the stupidity it was running did, I just uninstalled everything "cron" related. My cursory examination of what it was doing led me to conclude that none of it was actually useful.

The primary scripts that were causing the problems are 0logwatch and prelink.

0logwatch seems to have the job of "emailing" the local user to tell me what logs already say. I'm sure if I configured this it might be useful, but, as it stands, I don't care.

prelink just seems to eat up a lot of hard drive time and I can't figure out what it could possibly be doing that's useful.

After cron was done with its horror next came yum-updatesd to eat up even more hard drive and sometimes lock me out of yum. I really have no idea what this daemon does because yum seems to run an update every time I use it anyway. That's another service down.

Since culling all of these things my whole system seems to be running pretty acceptably on Fedora 10. My next challenge will be to make my sound stop skipping and "scrapping" every few seconds.

Tue, Sep. 2nd, 2008, 05:43 pm
Google Chrome

I'm having a whole bunch of fun trying out Google Chrome. When this comes to GNU/Linux, it's going to offset Firefox until it can play catch-up. Here are the top five features that are going to hang on to me:

Task Manager

Default Task Manager View

Extra Nerd Info

Inspect Element

Comes with DOM Inspector integrated through right-clicking on an element on a page. This is a tolerable trade-off from View Selection Source.

Download Toolbar

Integration of my favorite firefox add-on.

Download Toolbar

Gears/Prism style integration

Gears comes with it. The second I logged on to rememberthemilk it started asking for verification. With a few clicks, I now have a link on my desktop to load rtm in offline mode.

Places style front page

There is a firefox development that does this, but, looks like Chrome beat them to it.

Chrome Default Home Page

Wed, Aug. 13th, 2008, 08:15 pm
Theoretical Foundations of the Ansible

I came across this comment in the arstechnica boards in a discussion about information transfer through quantum entanglement. The verdict seems to be that information isn't transferred faster than the speed of light, but, the poster made this comment:

"You can control two orthognal states (i.e. make measurements along one axis to send a 1 and then change axis to send a zero) but now the other end needs to know which axis to measure along (and when) thus one needs a normal commuinications channel to pass this information along.

The other possibility is using the statistical nature itself to send information (i.e the rate of up/down), however, this requires copying the quantum state which cannot be done.

I read that and wonder, "Why not?" Firstly, let's talk about the top part where we need a communications channel to transfer two important bits of information: Which axis should we measure and at which time. It seems that both of these can be theoretically settled *before* extra-light distances are between the two subjects. Assume we have a protocol which maps axial shifts as a function of time. For example, to transmit an "A," we shift axis five times evenly distributed over a five-second period and then make no axial changes for another five second period.

For timing, each of the subjects start at the same point with a device they synchronize to the same timing sequence. A "second" is relative to the synchronization of these two devices. After they separate, rather than synchronizing them to each other, use known physical properties to augment drift due to whatever forces act upon the devices. Maybe even have them send physical sub-light waves and use the known properties of the transmission timing disparities to handle drift.

Now, on to the second paragraph, our storage of the protocol need not be tied up in the entangled photons. Rather than copying quantum state we simply have two communications devices which each only communicate one way. Since we have devices that can currently "read" the results of entanglement at a local level, these two devices can store the data at sub-light speeds.

It seems to me that the trick is developing a statistical protocol that makes error detection reliable within a certain percentage. It seems doable if we develop an appropriate statistical model for the 50% chance of change when forcing a quantum bit out of a superstate. Like all of those models you make a certain number of transmissions to enhance certainty of accuracy rather than ever expected your result to be perfect. If you find the right mix between valid and invalid, you can be relatively certain of the message.

Now, why what I have stated theoretically impossible? I know there are lots of really tough pieces to what I've outlined, but if the idea is doable, then those pieces are worth pursuing, and I want "instantaneous" communication over arbitrary distance damnit! Whittling interstellar communication down to a protocol that takes minutes to communicate a solid message is better than one that takes years.

10 most recent