Vacre Tei Up and Running

To those people who responded "Hell will freeze over" to my "When my web game comes out, ..." poll a few weeks ago, I hope you have your mittens on! The temperature is dropping where you are! ;-)

Anyway, it's up. Just visit vacretei.org, register and wait! See, you have to wait if you register directly at the site. It builds suspense. Also, when you're inactive, you give the people who are playing a way to get more gold. When they run out, they can choose to activate the next person waiting. That might be you! To know for sure, you can log in, as an inactive user, and see how many people are ahead of you. If it says zero, then you won't have to wait long, depending on how many people are playing.

Visit it and read everything. I'm putting together a FAQ, based on questions that I have received one time. I'll also be writing answers to questions that haven't been asked yet, but that I can foresee people asking or wanting an answer to without having to ask. This will help people get around my style of website development. I'm no interface designer people! I write backend, server code. It's miraculous that the game is not a console app. That would be fun...

vt:>list
vt-- listing works
Photograph by Voodoo, 23 gold (id = 1)
Photograph by cotraveler, 25 gold (id = 2)
vt:>buy 2
buying work by cotraveler for 25 gold
you now have 65 gold, bank has 20305 gold
vt:>show 2
showing work 2
[ you own this work ]

(opening image viewer in background ... )
(image sent to client)

success.

vt:>end
logging out
Good bye!


So, be grateful. I'll be adding more. I have some strategic elements in there, but I want to add a ton. Not so it becomes confusing, but so that people can do what they really want to do. I have no ads on the site, I never planned on making any money on it, ever. Well, there was one time when I thought that people could get more gold by wiring actual money for me... like $1 gets 500 gold, but I then remembered that I don't want people to have to pay for this.

So sign up already!

Hello Ruby Universe

The last two days I jumped into Ruby. It's a programming language. It's pretty easy to use, although I have to get used to it since I went like 3 hours yesterday without being able to do anything! But it's just different.

I wrote a solution to the dining philosophers problem (it shows threading and synchronizing access to data using mutual exclusion in Ruby), which you can find if you go to my downloads and search for the label "ruby". Its output looks like this:

Socrates is thinking...
>>>p=Socrates:s=thinking:lh=None:rh=None:to_l=Utensil:to_r=Utensil
Plato is dining...
>>>p=Plato:s=dining:lh=Utensil:rh=Utensil:to_l=None:to_r=None
CC is thinking...
>>>p=CC:s=wants:thinking:lh=None:rh=None:to_l=None:to_r=Utensil
DD is thinking...
>>>p=DD:s=thinking:lh=None:rh=None:to_l=Utensil:to_r=Utensil
EE is thinking...
>>>p=EE:s=wants:thinking:lh=None:rh=None:to_l=Utensil:to_r=Utensil


It'll loop indefinitely. The philosophers will decide whether they want to think or dine, and then they'll do it if they can! See, there's 5 philosophers at the table, and only 5 utensils, one between each of them. So, only two can be eating at the same time, but two will only be eating at the same time if they're not right next to each other, and two want to eat at the same time.

Here's another loop. It shows what happens when a philosopher wants to eat but can't:

Socrates is dining...
>>>p=Socrates:s=dining:lh=Utensil:rh=Utensil:to_l=None:to_r=None
Plato is thinking...
>>>p=Plato:s=thinking:lh=None:rh=None:to_l=None:to_r=Utensil
CC is dining...
>>>p=CC:s=dining:lh=Utensil:rh=Utensil:to_l=None:to_r=None
DD wants to eat but can't (CC has Utensil <--> EE has None)
>>>p=DD:s=wants:dining:lh=None:rh=None:to_l=None:to_r=Utensil
EE wants to eat but can't (DD has None <--> Socrates has Utensil)
>>>p=EE:s=wants:dining:lh=None:rh=None:to_l=Utensil:to_r=None


Download ruby at ruby-lang and a whole bunch of other places if you want to play with it. It's a pretty decent language so far.

Configuration proxies are a beautiful thing

Don't ask me what that means, I have no idea. I just came up with it. Proxy seemed like a good term, but I'll explain how it works, and why they were necessary.

I wanted to have filters on "dumbweb" (Read about dumbweb here). You know, the software running over at stringed.org... Well, filters are a configurable item. Just read this to learn all about them. "dumbweb" is a completely separate project, and you can't go writing very specific filter configuration parsing code in there. But, you would want dumbweb to be able to use filters in such a way that it's easy to configure, in the same config file where you define dumbweb. Hence the need for "configuration proxies".

Basically, now, in my dumbweb configuration xml, I can just write what would be in the filter configuration file but into the dumbweb configuration for the data item (i.e. "Picture") and a filter will show up for that item on the list page. Here's the xml

  <form className="jtccom.domain.data.pictures.Picture" name="Picture" listed="true">
    <filter helpIcon="https://storage.googleapis.com/jtc-public/static/images/helpicon.jpg">
      <fields>
        <field label="Album" name="PictureAlbumId" helpText="This is LONG overdue!!" />
        <field label="Labels" name="Labels" helpText="Search Labels" />
        <field label="# of Labels" name="Count(PictureId):PictureLabel" helpText="Find pictures with or without labels." />
      </fields>
    </filter>
    <operations>
      <operation name="edit" />
      <operation name="delete" />
      <operation name="add" />
      <operation name="view" />
    </operations>
  </form>


And basically what you see is the same as the filters on the Pictures, News and Downloads pages, only as a part of dumbweb. And those are configuration proxies. Configuration specifications that are used in the system but not in the current system, but the current system can... not load, but support or use the system that the proxy defines. So, dumb web configurations don't read the filter xml at all! It's read by the dumb filter system! It's neat. We can call this Configuration version 3. Read more about Configuration version 2 here, and that article links to version 1 if you're that interested.

Labels too big, had to do something...

First, here's the problem:



When you "subfilter" labels, all of them are returned and there's like a thousand of them.

Second, here's the solution:



And check out all this DOM scripting to accomplish that!

Pictures Labeled!!

This is different from the last one. I went through, for about 4 hours, painstakingly labeling each and every picture. It led me to a few conclusions:

1.) I take too many damn pictures of the same thing. I guess taking them isn't bad, but I don't have to upload 40 pictures of the Phillies game I went to a year ago. Then every picture gets the same labels "philadelphia, sports, phillies". It was very boring doing that.

2.) There has to be an easier way to label stuff.

3.) Labeling stuff sucks. I'm glad I'm done.

Also, I went ahead and got rid of download categories and replaced them with labels.

Labels are a centralized thing. If I create a label called "ducks" for example (there are pictures under that label!), then that label will show up as a choice for downloads and for pictures (and later news), whether or not there are downloads labeled "ducks" or pictures labeled "ducks". When you search the filter in downloads for labels like "duck" then "ducks" will show up. This will lead me to develop something cool in the future. Like, search a label and list anything that has that label, whether it's a download or a picture or an X or a Y. It will be pluggable.

If you want to see how I input labels, search pictures for the label "labels". Also you can search for "java" and "dev". Those two will give you a bunch, whereas "labels" will give you the four screens I took of "dumb web" and how it handles labels.

Pictures have labels

I decided to make everything have labels, and pictures are the first to be converted. There's more work to be done, but use the filter for most of your label needs. In fact, with the filter, there's really no more work to be done... I don't know, I'll probably think of something. So, now I have to go and add labels to all of my pictures... 226 of them.

But it took about a day to get the labels up, only because my data list that shows the pictures always goes back to the first record after I save a picture. It's pageable, and the first page was easy :) But after that, it goes back to the first page, so I have to keep track of what page the picture was on that I just added labels to. So I had to fix that. Now it'll keep go back to the last page you were on. That makes life easier. But isn't that what software development is supposed to do?

I've been hacking away at this site and my shared stuff (dumb, dumbweb, filter, etc, etc, etc) that I use on all my websites ever since I told my work that I won't be coming in anymore. Well, I actually just turned down the position offered to me, which was to do with VBScript, which I can't do. Not because I don't know it... it would just be a huge change in how I think when I program. If a language doesn't support standard object oriented features, then I'm f@#%@ed. I have a hammer and everything looks like a nail.

The other day I went to a User group meeting for Philly on Rails. I don't use rails or ruby, but I might start soon. Zatko said he'll play Dawn of War with me if I learn ruby and rails, so I have to since that's the best game ever, and I haven't played multiplayer yet. Actually, we have to play first then I'll learn Ruby. Jared went too. We were the bomb.

New Filter Features!!

First, notice the "Possible count" on the bottom right.

Then filter by this text exactly : Cigarettes and Carrot Juice

Then notice what it says. Cool huh?

Then, notice the help icon! I know they don't look great, I'm a n00b when it comes to CSS and DHTML. Plus, I hate Internet Explorer because I use the w3.org specs and they never work on IE. So, if you use IE, there's no support. Download a real browser.

But you're not a real programmer if you don't support IE!!

I'm a lazy programmer, as I've said many, many times. It might work... I did some standard checks, but haven't tested it. I'm on Linux and a Mac. No IE.

So that's it. I could go on explaining what I did but I'm not terribly proud of the count stuff. I did it and couldn't help but think I hacked it together. It's just not beautiful yet.

This year's trip to Lewes, DE

Awesome. I left around 7pm on Sunday night. As I pointed out before, my tape adapter(s) for my iPod is/are broken. I had no coffee, and no smokes, so I had to make three stops on the way. It would have been two but the stupid drug store I stopped at didn't have tape adapters... well, unless I wanted to pay $40 and also purchase a portable CD player that I would probably throw in the garbage on the way out of the store. I didn't want to do that. So, I got smokes at the first drug store. Luckily, directly down the road, on the way to Dunkin Donuts, there's a competing drug store that does much better business. I stopped there. They had it but it was locked up in the audio glass. I got the girl, who has been working there for three days, to come unlock it for me. She had no idea. I helped her though. $10. And it's a nice one too! My car would have spit out the other ones at least 6 times on the way to Lewes (a 2 hour trip) but it didn't spit this one out at all.

So, I made my way to Dunkin Donuts and got a huge coffee and left for Delaware.

As what always happens when I leave the house, it started to rain. Like, terrential downpour. I'm on 95, heading south, and I can't see a damn thing. I can't find my glasses either. I keep them around for such an occasion. It's getting dark out, and my windshield wipers just can't keep up with the rain and water from the cars in front of me hitting the windshield. I just kept an eye on the car's tail lights in front of me, since it was all I could see, and was well on my way. Almost. Having literally no view of anything except tail lights, I missed the exit. By like 20 miles. I damn near made it to Maryland before realizing it. SOB!! It's one of those weird things where I figured 95 South heads SOUTH, but here it twists west on route to Maryland before heading south through Baltimore. I figured I was fine just trucking along. Oh well. I got there at 10:30, also, since the traffic was thick due to no one being able to see anything but the tail lights in front of them. If an alien race came along and looked like tail lights, we all would have followed them into the bottom of a lake somewhere. Or to their space ship.

When I got to my parents' spaceship... I mean... condo in Lewes, everyone was ready for bed. Jeff and Bean came back and brought ice cream, ate it, then watched tv until they dozed off. They were surfing all day, that's one of the most exhausting activities anyone can partake in. I tried, it's much too intense. When everyone went to bed, I figured I better try also. I went into the bedroom, grabbed a book (The Bleachers by John Grisham), and would read it until I fell asleep. Problem is, I didn't fall asleep! I started it after watching a movie and a few shows, probably around 1:30 - 2:00. I finished the book at 5 in the morning! I might be tired the next day for golf.

I was tired for golf. Although I had about 6 hours of sleep, it was about 130 F and humid. The sun was beating down. We had carts luckily. The course we went to was normally a 9 hole course, but it was under construction, so there were only 7 holes available. We played around once and then played 4 more for 11 total. I played pretty well. It came down to me vs. my Dad again, and he won because I choked. I can't beat him ever! It was good, though, because I started off pulling the ball to the left. When that happens, I usually quit because I never have a way to cure it. But it was different yesterday. I figured out what causes me to pull the ball, and I fixed it by the 3rd hole. Then it was on.

This one hole was a ripoff. The hole was shortened, due to construction, from about 400 yards, to... I swear to God... 80 yards. The green was awful. I took out a pitching wedge and totally skied this thing. About 4 minutes later, it came down onto the green. I figured it would just plop and stick, but this thing bounced like it hit concrete and flew over the green. I was like "You bastard".

Later, we all sat on the back porch and I played guitar and everyone sang. Good times.

It's up!!

Thanks to my host working on Sundays (shout out Nexpoint), the game is up! Just visit Vacre Tei and sign up. Make sure to read the about and privacy policy things at the bottom first.

w00t.

That rocks. Of course, as I'm uploading the site, I have new ideas for it. Damnit. Good ideas too. I'll get to them, no rush.

Game Named

I've decided to name my game "Vacre Tei Market". Weird huh? I was losing sleep, not eating, searching google intensively, trying to think of a name. Then it just came to me. If you've ever seen "Sneakers", then you know where I got that name from... "SETEC Astronomy" was a jumble, where words are formed from all the letters in the initial word. I forget if there's a scientific name for it. Anyway, you can tell, probably, that the original word was "Creative". This sounds pretty cool. Like German. It's pronounced "Vokker Tie", as if it were German. I haven't checked if it's an actual word or phrase that means something really bad or not. I don't think of those things until after I register the domain name "vacretei.org". Why would I? Anyway, when the domain moves over and I get back from Delaware, the game will go into beta. If you want in, just shoot me an email.

July w00t!

I always love July because of no special reason... other than June afternoons make me sleepy. You got me, I'm just quoting a Cracker song, kinda. But they do make me sleepy.

"Hey June, why'd you have to come, why'd you have to come around, so soon? I wasn't ready for all this nature. The terrible green green grass, and afternoons that make me sleepy."

I miss my iPod. Well, I have it in my glove compartment, but I don't have a tape adapter anymore. I mean, I have two, but neither work. I experimented with one because it was making too much noise and always got popped out by my car's tape deck complaining about "Clean Tape" or something. Like, WTF, there is no tape. It's just reading off of the metal thing at the top. And now it's missing all of its insides... and the tape deck pops it out immediately, saying "Check Tape". I wish it would just play it. It's the only thing I hate about my car. I have a CD player too, but I depend on my iPod.

When I don't listen to music that I love for a long time, I get very angry. You should see me, I'm always pissed off. My neighbor's six year old daughter asked me to play catch and I'm like "What for?!! Catch sucks. You just throw it back and forth, accomplishing nothing... don't ever ask me anything ever again." :D I'm kidding, I told her I'd play, and we did... but you could imagine if I could possibly get that angry.

I almost ran over a guy on a bike the other day. It almost wasn't my fault. A car was in front of me turning left, and they went, and I was checking left and moved up. I stopped. And I noticed that I had to move quick in order to make it before this huge line of cars coming would delay my arrival time by at least 2 minutes, and I just can't wait that long. So I was still looking left. I started going, and looked, and this bike was right in front of me, so I gunned it right and JUST missed his back tire!! He saw it, and was all angry and yelled "JERKOFF!!" I'm like, dude, did I hit you? No. I missed him by an inch or so, but close only counts in horseshoes and grenades, so he should have just not said anything, or he should have said "Woah, nice driving dude!" Of course, I was out of it, hung over... it was on my way back from watching the food channel over Billy's all day after drinking all night at the Dave concert. So, it wasn't exactly my fault because he should have noticed my head only looking left :D Jerkoff.

Tonight, I went to happy hour at the Boathouse in Malvern. It was my last appearance with the company I worked for. I turned down the full time position they offered me because I would be miserable working in the technology with which I would be working. Some people from work were there, including Hitomi, who I worked with at a previous job. That job together was hell, but everyone there was awesome. Most of the people on my MySpace friends list were from that job. It was awesome. We'd drink every f@#$ing Friday! And A LOT! Sometimes, we couldn't wait til Friday night, so we'd head out at lunch, and some other times we couldn't wait until Friday at all! Anyway, we were party animals. So, the new coworkers were a new experience for me. It was my last day there and the first time I'd hung out with any of them. They weren't party animals. Oh well.

Hitomi and I went to Ruby Tuesdays afterwards. That was funny. We go in there and she's freezing, so I give her my shirt. Then, we order coffee. We order soup (brocoli and cheese) and an appetizer, like a four way sampler which has chicken, mozzarella sticks, some other thing and some more chicken. On top of that I ordered a burger with fries. After the soup and appetizer, I was done. The waiter brought out my burger and I was like "I can't even take a bite of this, can I have a box to take it home in?!" The only thing that was eaten off that plate was a pickle that Hitomi swiped from me. It looks delicious though :)

Not much else going on... I'll be down the shore in Lewes Delaware (there's a photo album from last year's trip in my photos section) from Sunday to Tuesday. Hell, I could stay down for a few weeks if I wanted to, but I have to find a job soon... that sucks. I wanted to possibly take a trip. Just head out across the country with my laptop, my guitar, and my digital camera. I have some extra money in my cushion of my car, so I could do it. I should.

Dave Concert

A Dave concert is one of those things that need no explanation. If you're going to a Dave concert, you're obviously seeing Dave Matthews. I went the other night. We got RIPPED.

The usual suspects, Mara, Billy, Jen and I. Drinking in the parking lot from around 6:30 (I forget honestly) until around 7:30 (again, no idea). We pounded a case of Molson Canadians in that time. It rained a few times. Mara and Billy were already drinking since 2pm. We go into the concert and found a nice spot on the lawn. We stood the whole damn time.

I'm honestly not a fan of Dave Matthews, but I don't hate him, and he has the best drummer ever. Basically because when I was in college, everyone was a Dave fan. It was annoying. I decided to devote my time to Sublime. And to Cracker. Not everyone were fans of these two. Strive to be different is my motto. In fact, Mara commented on how I am different everytime she sees me! Different haircut, new look, facial hair. Kate talked to Mara and asked "What does Jason's hair look like now?" So, it pays off. Right now I have short hair, long sideburns, and a goatee. Two weeks ago, I had a beard and longer hair. Last week I just had the longer hair.

I remember being in the concert, and someone had one of those glow sticks, but it was red and about 8 inches long or something, and bent fairly easily. I grabbed it and put it in my mouth! I was making smily faces at the girls behind us, and in the dark it had to look freaky! Like, all you can see is this outline of a head and a huge smile. I was having a good time.

Sublime came on at the intermission. I love Sublime.

On top of all that, it was a blast. We each drank about 5 of those 20 oz lagers they serve at the Waterfront. If you've been you know what I mean. Wax paper cups. I may not be a fan of Dave Matthews but I love concerts and would go to every one. I've never turned down an invite :) The crowd at a DMB concert is a good, fun crowd.

The day after, aka Recovery Day. Hung out with Billy since I slept over their place. We watched the food network all day. He loves the food network. I don't mind it, those people make some amazing things. The one girl, Giada de Laurentiis... she's a hottie. I'm surprised I remembered how to spell her name, and I have no idea how to say it. And the guy on Food 911 has some major skillz. He goes into peoples' houses, uses their tools, and still makes awesome stuff. Today he made steak, and I now have a few more tips to add to my arsenal of steak making (currently two items : 'Marinade', 'Grill to medium / medium rare'). Of course, watching cooking shows all day and being hung over makes you starving. So we ate hot dogs. Then I got home and ordered a stromboli and some hot wings and took a nap. I'm recovered.

What about a music log?

Beaner came over yesterday to record some music on my Mac Mini. He had a microphone and a 300 W mixer, and his acoustic guitar. When he was done, he left everything on my bed. Instead of doing what I wanted to (or supposed to) do, I picked up the guitar and started recording stuff. It sounds pretty good, the mic picks it up decently. But during all this, I wondered "What about a music log?"

You hear of all new types of web logs ("blogs") coming out... Video logs, photo logs, podcasts, etc. What about writing a song each week?

I know a band called "They Might Be Giants", they're fairly famous. I can't find the article right now, but a record producer or a friend challenged them to record a song about every city they visited on tour. So it's possible.

I just think it would be fun, if I could sing, to record a song that's like a podcast. It would be challenging, which would make it more fun.

What would be cooler, though, is if my site had a "jingle".

Problems with Dumb

All fixed.

First, it's common to want to do this...

Select * from Table1 join Table2 on Table1.ID = Table2.Table1ID where Table2.Something = whatever.

That now works in dumb by doing simply the following:

Table1 t = new Table1();
Table2 t2 = new Table2();
t2.setSomething(whatever);
t.setTable2(t2);

engine.load(t);


So it'll select everything from Table1 where a certain condition on Table2 is true. Like, selecting polls where a poll answer contains 'The'. Of course, this works in filters because the filter is actually generating its own SQL. Saving that object was never a problem, that's been a part of dumb since the old days, over a year ago.

Another problem I had... it's very common to have a table like this:

table UserFriend {
userId int not null,
friendId int not null,
constraint foreign key userId references (User) userId,
constraint foreign key friendId references (User) userId
}


Two fields are references to the same table. Before, my generated sql code would pretty much only work if no table was joined more than once, either from the same initial table, or later on down the joined road. Now, I can have any number of references to the same table either in the initial table or down the road. It all works now. It's beautiful.

Anyway, I'm still chugging away at the... oh wait, that last game update was the last one.

Last Game Status Update

Because I don't feel like doing them anymore. If you want to know, just ask me. Or subscribe to the newsletter...

The thing's almost done. When you have a document called "CWG_Status.odt", it of course means you're using the OpenDocument format, but also means that you are reminding yourself of what you still have to add. And when that file goes from 10.4 KB to 8.3 KB, it means your almost done! So, I poke a little fun at ODF for its size... so what? The price is just right ($0.00). It's fast enough for me. Anyways. Right now I have 9 lines of stuff that still needs to be added. One will be addressed after the initial version goes live. I know, it can't be considered "Finished" until it's actually "Finished" but, name one piece of software where the creator had no more ideas for new stuff to add after it was "finished". It's the great thing about my job, I just work and work and work, and my boss will ask "Are you finished?!" and I'll reply "Software is never finished..." And it's like eternal job security with no ship date.

That's funny though, because you can finish a work of art. Like, a song, or a painting, or a photograph. With art, though, it's like, you reach a point where you consider it done, and then you take stuff away. Especially in sculpting. They haul in a huge chunk of marble for Michaelangelo and he says "I'm done! I just have to cut some marble away now."

At some point in the last 3 years, I've learned to see computer science as more art than science, though. A program can be beautiful. It can be elegant. You can show it to other people and they may or may not (usually not) see the beauty in it. It's a messy process. I'm not talking about the user interface either. I'm talking about the code. The design. The implementation. The very little code that does a lot. The abstraction. The sweet, sweet pleasure of everything running correctly.

So the game is almost done. It's looking beautiful... not in the sense of how you probably think of beauty, but in the sense described above. The code is beautiful. The interface is not beautiful, at all. Well, it kinda looks like this site, only less gray, and more non-colorish. Here's my motto:

Function, then beauty

It makes life easier. Get it to work, then make it aesthetically appealing. That's down the road though, since this isn't like a 3D game or something. It's a web game. With an incredibly lazy creator.

There's more logic in this game than anything I've programmed in the last 3 years. Well, I guess that's an exaggerated statement. There's certainly a lot of logic in dumb and it's web counterpart. I guess I can say, there's more logic in this application than any other application I've ever done. Meaning, something specific, like this website, or other websites I've done, even in work. Underlying systems aren't applications, they're tools to help make application development easier, and that includes dumb and dumb web. And the security system, and my menu system which still holds its own. So this adds a level of complexity that I wouldn't normally find in an application, but not one that I'm not capable of handling. Basically, here's what goes on with my other applications...

select data from the database
show it


or

show a form
input data to the database


With dumb and JSF, there was literally no work do be done here. I can't say what's going on now, only because it's too complex and it would give away my great ideas.

I look forward to releasing this game on the web for the 4 people in the world that will enjoy it. Should be within the next week or so. w00t!