Sunday, November 15, 2009

The Novemebr 2009 Vampire Tournament

The November tournament was this weekend.

After it worked quite well at the previous social, I opted to try my Ventrue vote deck. Unfortunately, the deck decided to mock me, very badly, in both rounds.

The first round was one of the stranger games I've been involved in. Simon (Tremere Thaum combat & bleed) (starting) bleeding me, bleeding Richard (Guhuri Brutal influence bleed), bleeding Hendrick (Thau combat & some wall). Simon's deck was in several ways the rock to my scissors - he got out both Carna (+1 intercept) and Oliver Thrace (no S:CE), and, when he placed a Pulse on Oliver, was able to keep me under a fair bit of pressure. I suffered badly in that I drew very few votes early on, and, with the number of other votes on the table (mid-game, the 13 votes I could generate from my vampires and locations was only enough to tie the rest of the table) I was unable to exert enough pressure on Richard. I was fortunate to draw most of my Minion Taps, so I was able to farm back fast enough to prevent Simon being able to overrun me. Richard was also farming quite successfully, but wasn't cycling into the bleed cards he needed to pressurise Hendrick. Hendrick took some time to get setup. He never had enough ways around S:CE to bother Richard, and, while he was able to trouble Simon in combat, didn't have enough ways of getting into combat with Simon, and didn't have the bleed push to pressurise him much either. The game was much more attritional than most, and never looked that likely to fold before we timed out. I gradually whittled Richard down to lunge range, but, due to a Smiling Jack, and a turn when I was short an untap card to bounce a bleed from Simon, was left with 1 less blood on my minions than I needed, and was thus unable to play both a Govern and a Conditioning to oust Richard. Richard, right before time, lunged at Hendrick with a Strange Day bleed, but it was bounced to Simon, ousting him with the last act of the game.

The next game saw Matthew (weenie pot Swarm with Brutal Influence) (starting) bleeding Hendrick, bleeding me, bleeding Dave (Brujah Cel/Pot). While I was never under much pressure from Hendrick, Dave went backwards a great deal, and, drawing into his Immortal Grapples quite often, gave me a very hard time, especially after he got a KRCG down. I didn't draw a single Voter Cap until the very end of the game, and thus wasn't able to refill my minions, which hurt me quite badly. Hendrick was unable to hold off Matthew's swarm although it did leave several of Matthew's minions in torpor. I managed to get Dave down to a couple of pool, but he was able to torporise all my minions . With no prospect of getting another minion out, I transferred myself out, giving Matthew a second VP. Matthew was unable to survive against the Brujah, and Dave duly collected the remaining 2 VPs.

I didn't see much of the final, as I went off to find some lunch, but Dave eventually won that with 4 VPs and Richard collecting the remaining VP.

Sunday, September 6, 2009

Pyweek 9: Feather

Pyweek has, since I first heard about it, been one of things I've always wanted to have a stab at, but never got around to. For pweek 9, with the benefit of enthusiasm from fellow members of CTPUG, we managed to get an entry together. We ended up with a rather fun little strategy game (in my completely neutral and unbiased opinion, of course), called "Fox Assault".

The whole development experience was quite interesting - I'm still somewhat amazed on how quickly we seemed to hit a concept in the initial discussion and were able to just run with it. Based on this experience, and the momentum the initial concept discussions gave us, for any future team entries, having an initial in person discussion & planning session is will be most useful.

The pace of development was more than a bit breathless, and, on a couple of occasions, I watched a throw-away comment in the code suddenly arrive in the codebase turned into something awesome, which was quite gratifying.

The way the game took over my week was a little unexpected, and contributed to rather less sleep than was probably healthy (the VTES social and a C. J. Cherryh novel didn't help this either). Some of other events of the week really quite surprised me, such as #ctpug suddenly becoming our personal source of additional testers.

Our one major error was not looking taking more time to familiarise ourselves with pygame and the available support libraries more beforehand. We chose to use Phil's pyGame Utilities almost on a whim, and, while it helped a great deal in providing several useful framework tools, and did save us quite a lot of time initially, it also forced several compromises and hacks onto us, partly due to design decisions taken by pgu, and partly due the time pressure favouring "It works, that's good enough" over pretty much anything else.

Overall, the whole experience was simply gosh-darn FUN, and while I would like to see our game score well, I'm overall really not bothered about that, since I know it's quite cool. I'd certainly like to do this again, although I'll probably try and plan to have a day's leave towards the end of the week for the next one.

Monday, August 24, 2009

An annoying discovery

One of the great annoyances of manufactured items is they tend to be very symmetrical. This makes various approaches to automated registration more complicated, since there are often ambiguous possible solutions, so one often has to shove in more domain specific knowledge to get the correct answer. Domain specific information makes thins less portable, and generally requires annoying maintenance effort later.

This is all; relevant, since I've been trying to avoid shoving such domain specific knowledge into the registration step for the calibration cube for the x-ray system, which, being quite a precisely manufactured cube, is rather symmetric. I had thought I had enough information available from the views to get around this, and solve the problem fairly elegantly, but I spent the later half of last week and most of this morning failing to make the idea work. The answer obtained looked almost reasonable, but had a 5 cm offset, and a rather high error.

I thus resorted to a heavy-handed optimisation approach, using the domain specific information to ensure the minimum was near the correct place.

This did not work. Given the fairly specific constraints I had placed on the problem, not working was a very surprising result.

Much digging later, I discovered a sign error in the input data I had created to describe the cube last week, which meant I was trying to register the cube a collection of fairly widely spaced separated planes, and getting odd results out.

While I now have a correct solution, I will now need to revisit my earlier idea, and see if it works better with the correct data. Since I spend considerable time checking the data last week, and had convinced myself that it was actually correct, I'm currently rather annoyed with the universe [1].

[1] Because it's clearly not my fault, after all.

Wednesday, August 12, 2009

Dragonfire 2009 III (Mon)

(being the last in the series of posts based on slightly inaccurate memories)

Most of the day got taken up by the actual draft tournament.

The draft got going a little later than planned, due to Richard oversleeping, and much juggling to arrange that we got 8 players, rather than dealing with 7. Phillip and I got in a very quick 2-player game shortly before the tournament. In an environment without bounce, the Settite bleed deck is really scary.

The problem with the draft was the complete lack of stealth, and, with EK providing both a master out of turn for intercept and an intercept reaction card, the games were very block heavy.

My deck was based around being able to use Batsehava with an Abombwe master and Founders to accelerate out my crypt, but the intercept meant that didn't work out quite as planned. I had a couple of bleed mods, but no stealth, and my combat was more defensive than it probably should have been. I also suffered from having a large number of permanents - my second and third passes through the deck were very quick, which meant I was out of library by the end of all the games.

In the first game, I got a bit lucky, and was able to contest a small vampire with my prey (Simon, and thus revenge for the Imperator final), but, with both of us down a minion, I wasn't able to really push forward, and spent most of my time holding off Dan's deck. This allowed Richard to setup nicely, and, while I was eventually able to oust Simon, Richard took the table comfortably.

In the second game, I was bleeding Richard, bleeding Matthew, bleeding Verolin (Richard starting). I got screwed over as Matthew brought out the same Abiku a turn or so after I had, and, not being in a great position to force the contest, and not wanting Richard to be able to plow forward too quickly, I had to yield. While I was able to push the odd bleed through, I was generally down a minion and thus never able to really pressurise Richard.

However, the 1.5 VP's was enough to get me to the final table.

The final table saw Dan (starting) bleeding me, bleeding Matthew, bleeding Richard, bleeding Phillip. Since I knew that Mathhew, Dan & I all shared a common vampire in Abiku, I brought out Titi first. Phillip found himself in the awkward position of having made transfers onto Titi and Mamadou, the vampire Matthew brought out first, so was struggling to get into the game. Richard took the opportunity to bring out the Remnant and the Tunnel Runner - Phillip then contested Mamadou with Matthew, who chose to yield, which allowed Phillip to steal the Remnant with Legend of the Leopard, and use it to burn the Tunnel Runner. Unfortunately, being down a minion, Matthew wasn't in a position to really pressurise Richard, and consequently walled up against me, which slowed my game down a lot. This allowed Richard to setup a lunge which ousted Phillip. The game see-sawed for some time afterwards, with Dan trying to balance the table. I gradually whittled Matthew down, and was able to land 2 successive bleeds for 2 to leave him on 2 pool, but my minions were running low on blood. Dan delayed me ousting Matthew by putting a minion in torpor, but left himself in range of Richard, who promptly ousted him. I was ale to oust Matthew, but was in no position to withstand Richard, who completed the game win shortly there-after.

After the tournament, there was some complex juggling to fit baby Cthulhu into my car, before heading off to the final after party.

Dragonfire 2009 II (Sun)

(being part 2 of the series)

Due to the previous night, I decided not to try and make the first module, (which seems to have been a good one to miss), and only arrived around 11:30'ish or so. The trip across was complicated by road works on the N2 hat reduced it to one lane at the point the airport road feeds in, which wasn't a good idea.

While waiting for the afternoon module, I succumbed to temptation and spent rather more than I probably should have to secure the Doom board game and the Munchkin board game (I'm blaming the combination of tiredness and the 10% discount, but that's merely because I've always been good at finding excuses for myself). I also played a game of "Settlers of Catan", which is interesting, but not quite enough that I need to rush out and buy it.

The afternoon module was a great deal of fun - children playing monster whacker. The very downscaled capabilities of the child characters, and the local scale of the interactions made for a very enjoyable game. We teetered on the edge of disaster at the end, but came through OK to get the happy ending, so that was good. The module did run very late, though, and e only finished around 20:00.

The evening involved a bit more vampire. Notably, there was a game involving Marc, playing Tzimisce, bleeding one of the new players, playing his Brujah deck, bleeding Dave, playing my !Nos combat deck bleeding me, playing Tremere. Giving Dave my !Nos deck turned out to be a bad idea, as the Tremere combat didn't come up, and I got pretty much cremated by my own deck, and Dave went on to oust Marc (after Marc had ousted his prey), which is one of those situations which leads to rather conflicting emotions.

Since it had now become very late, I opted to sleep over in Rondebosch rather than trying to drive back home and then mke it in for the tournament.

Dragonfire 2009 I (Fri evening & Sat)

(being the first of a somewhat fuzzy and rather short series of posts about this year's Dragonfire)

Friday evening

Friday evening was the start of the con, and involved at least one newbie VTES game (with the usual advice), and a couple of social games.

I got to try my Gangrel aggro-poke deck, which worked surprisingly well - holding off Garrick's Assamite swarm and (admittedly slowly) pushing through both Kevin and Marc. I should add a couple of Amaranths to exploit Ariadne's text, and the deck could use a bit more ousting oomph (although it was hampered by Marc playing a Fame early).

I gave the Ventrue vote deck another run - it did reasonably well, ousting two decks (including Garrick, playing Marc's Ventrue bleed deck), before running out of S:CE at a bad time and folding to Marc's combat deck.


Saturday, I played in both modules, and some vampire in the evening.

The first module was quite a lot of fun - Werewolves in Iran with orcs, with an enjoyable group to play with. My character got to set the big bad on fire, which is always fun.

The second module was also quite fun, although the group I was playing with was a bit less focused, and didn't quite gel. The ending was also a bit of a downer, despite effectively "winning" the module, but, still, overall good fun.

After the second module, I attempted to go down to Kauai on Main Road, only to hit the "returning from the rugby" traffic, which meant crossing Main Road became exceedingly difficult, so I opted for Steers.

I returned to watch and actual help and hinder Kevin's running of a newbie tournament, also spending some time watching an attempt to explain and play the "A game of Thrones" board game, which was complicated by various of the players being distracted by helping prepare people for the evening's LARP.

At around 23:30'ish or so, Kevin, Marc and I finally started a 3 player game. Kevin was playing A modified Toreador starter, me playing my Ventrue deck and Marc playing a Brujah combat deck. I had a fast start (Hardesadt out on turn 2), but, due to Kevin having the vampire who can burn a blood to cancel votes from a not acting minion, and Marc getting out his Inner Circle member, and two minions with intercept when I was attempting political actions, I never got the vote momentum I needed. Marc went backwards to eventually run me out of S:CE, and then whittled Kevin out before finishing me off. However, the game stayed quite balanced for quite some time, and eventually only folded near 2 am.

Tuesday, July 21, 2009

Vignettes from the road trip

So, with Hodgestar and Confluence, I did the overly complex road trip to the Festival and ICON.

Various notes:
  • Agreeing to the trip isn't helping my "I'm not that crazy" case.
  • Remembering to wait for all the passengers to get into the car before driving off is a good thing - I should do it more often.
  • 5 shows a day is about my limit
  • Considering I saw 21 shows, there were very few duds.
  • Getting laundry done in Grahamstown sounded a lot simpler before we tried it.
  • We were unduly picked on by the various bicycle races and related traffic
  • There are far too many heavy vehicles on our roads
  • The roadworks don't help the "driving in Gauteng" experience in any way whatsoever
  • The lack of correspondence between the warning signs and the actual state of the road may have contributed to this.
  • LARP combat sucks when trying to do a sneak attack
  • Explaining VTES is hard enough without loud background noise
  • Email piles up surprisingly fast when I'm not checking it regularly
photos from the trip here.

Tuesday, May 19, 2009

Notes from the VTES tournament (Hallowed Tomes)

On Saturday, we held another vampire tournament at Tokai Library. A good turnout of 10 playes, with a few new faces, but none of the Fishhoek crowd, which, given that the Tokai tournaments were originally arranged as being easier for them to attend, is something I find somewhat annoying. I decided to give my Anarch Vote deck another tournament run.

In the first round I started, bleeding (new player who's name I forget) (Tremere antitribu) bleeding Dan (Osebo wall) bleeding Phillip (Tszicme) bleeding Andrew (Old school Toreador guns with bleed). The game took a long time to reach the endgame - Dan spent most of his time blocking bleeds, and kept having his minions dumped into torpor from aggravated Thaumaturgy. Phillip gradually whittled down Andrew a bit via an Army of Rats and a few bleeds, while I took a couple of heavy bleeds from Andrew while fishing for my Fee Stakes and votes, I was able to survive thanks to the bleed reduction of 'Detect Authority'. Eventually, I was in a position to call a Revolutionary Council and force it through, which allowed me to untap a minion and oust my prey with an Undue Influence bleed, but I then hit a run of Fee Stakes without stealth, and was forced to waste a couple of turns trying to cycle through to more useful cards - in the process, I had a minion Fame'd and knocked into torpor, which hurt badly. I did eventually draw a Revolutionary Council and was able to run Dan down to one pool (after he paid for the Fame), but was unable to push the final lunge through and was ousted by Andrew a few minutes before the game timed out.

In the second game, Simon (Nergal agg damage & bleed) was bleeding me bleeding James (old school Brujah with guns) bleeding Rudy (Guiallame hand-size madness Giovanni) bledding the !Tremere. I had a unfortunate crypt draw, without a single Anarch Convert, and erred badly by not paying one to see one early. I did get a Fee Stake down, by my single Baron promptly got a Haven Uncovered slapped on him by James, and was repeatedly rushed, which left me never able to call the vote. I was thus left fairly easy prey to Simon, who ousted me with an unblockable Force of Will bleed in due course. Rudy was able to whittle through the !Tremere, who were unable to deal with the potence combat from the Giovanni. James was at this point rather well setup, and was able to hold off the Nergal deck fairly efficiently, which allowed Rudy to push through Simon, but Rudy then ran into problems with the Celerity combat of the Brujah, and with the Brujah having minion superiority, was unable to stop James.

I didn't make the final (that annoying 1 pool of Dan's that I couldn't get through), but I did pop across to play a couple of social rounds on Monday, when the final was held. The Final saw James bleeding Andrew bleeding Richard (weenie Obf & Dom, and the highest seeded player) bleeding Dan bleeding Rudy. Richard was able to sweep the final table, which was a surprise, as I had expected more ganging up of the table against the weenie hordes.

I managed three games over the course of the evening - 2 3 player games and 1 4 player game. In the first game, I tried the anarch vote deck again, bleeding Simon's tweaked Nergal deck, bleeding Phillip (Gangrel animalism). I struggled initially, as it was a while before I pulled a Thaumaturgy master, but once I had a Crimethinc down, and 4 Anarchs out, I was ale to close out the table fairly quickly, given that I had the vote lock.

In the second game, I played my modified !Nos combat deck (since I finally have enough Immortal Grapples to not need the fragile Celerity sideline). I was bleeding James (Assamite Quietus) bleeding Simon's Nergal deck. Given that I seemed to draw rather more Master cards than I expected, and the amount of Aggravated damage on the table, it worked surprisingly well - I was able to get a Tension in the ranks and a Fame on a small minion of James' early, and as able to successfully push the minion into torpor, and was able to burn another of James'' minions, I did find my minions bouncing in and out of torpor a bit, but fortunately Simon didn't pull the base Nergal, and wasn't able to generate the really big bleeds, so I could survive long enough to oust James. I then drew into another Fame and was able to oust Simon quickly as well as a result.

The last game saw me (playing my Anarch bruise and bleed deck) bleeding James (Brujah deck) bleeding Simon (Kiasyd anarchs) bleeding Richard (playing Simon's Nergal deck). The Anarch bruise and bleed deck is still not right - I spent far to much of the game with bleed modifiers in my hand that I couldn't afford to use and no combat cards. I was also a bit overly cautious as a result, and thus didn't get the forward momentum I needed. Some of the changes worked - adding the Baseball bats made the combat more effective when I had it, and The Anarch Free Press was useful intercept. Richard had a good start, and was able to get Nergal merged early, and, with a couple of vessels to pay for Nergal's infernal cost, was able to work through me. Simon was able to put a fair amount of pressure on Richard though (partly aided by the Club Illusions I put down), so he never got away. This allowed James to get setup, and, after Richard had ousted me, Simon was unable to pull off a lunge on Richard (which he may have been able to make had he done things in a slightly different order), and left himself open to James, who proceeded to clean up the table.

The Anarch vote deck is in pretty good shape now - I think the crypt changes help. Having 4 Anarchs and a couple of Crimethinc's down is a solid position, and being able to do 8 pool damage in a single turn is a solid ousting strategy. I need to fit in a couple of copies of the Barrens or something to help address the card flow problems, but the deck is capable of gaining VP's on a fairly regular basis. The setup requirements do mean the deck is always going to be fragile, but it's fun when it comes off.

The modified !Nos deck shows promise. I need to look at the card balance a bit, and I'm not sure if the Street Cred angle is effective enough to be worth keeping, but it's first showing was quite reasonable. The Anarch bruise and bleed deck needs more thought. I still nowhere close to the balance I need for the deck to work, and the blood management isn't working either, which makes several cards too expensive to play. I'll fiddle further and see what happens.

Wednesday, May 6, 2009

Code Mainentance

One of the problems with an under-resourced development environment, such as the one I'm involved in at iTL, is the lack of decent code review. Consequently, the code base ends up with dirty little secrets, like the routines to automatically identify the calibration cube, a awkwardly tangled implementation of what still is actually quite a good idea. It's a chunk of code I'm both perversely proud of, and terrified someone else will look at and thus call me out as a total fraud.

Despite this, it actually works pretty well almost all the time, which is unfortunately an "almost" too many, so today was spent debugging this dirty little secret, which is never that much fun. It's easier than it may sound, though. Most programmers will have had the experience of looking at old code and thinking "How could this possibly ever work?", and most programmers will also have experienced looking at bits of old code and realizing "Oh, that actually quite a nifty trick". For me, reading this code tends to be a sequence of a's followed by b's followed by a's and so on. When the sequence doesn't end at b, it's probably a bug. The retroactive ego-boosting and deflating does make it a slightly bizarre experience, though, and not one I'm keen to repeat anytime soon.

Wednesday, April 29, 2009

The April 2009 VTES Tournament

The tournament was held at the new Outer Limits shop. It's a considerable improvement on the old 5th floor store, feeling a lot more spacious and less pokey. The access control system to get into the building is a little fiddly at times, but no less annoying than the sign-in requirement at the Strand Towers.

Due to only 6 players showing up, we decided to go for the 3 rounds of 4 player games, with two players sitting out each round. Since we also wanted to fit the final in, I opted to play the Settite Stealth Bleed deck, as being the most forward focused of those I'd brought.

Round 1 saw Richard (weenie Obf), bleeding Kevin (!Tor Bleed & Vote), bleeding Brendan (Ventrue Bleed & Vote) bleeding me (Richard starting). I had a less than ideal start, with Richard Archon'ing my first bleed, a loss that did slow me down rather more than I would have liked. Brendan was able to easily secure the vote lock, and Kevin wasn't able to generate enough bounce or intercept to reliably trouble Richard, who rapidly built up a scary swarm, and duly ousted Kevin. I was able to put some pressure on Richard, but was losing pool too fast to Brendan's votes, so my situation looked dire. A combination of a misjudgment on Brendan's part, which allowed me to survive bringing out an extra minion (although it did leave me on 1 pool) and place a spying mission on Richard, a fortunate Pentex from Richard on Hardestaadt, combined with a well-timed Ecstasy on my part to reduce a ousting bleed from Brendan that he was unable to boost suddenly left me with an opportunity to oust Richard, which I duly took. With Brendan then drawing a couple of votes, though, my doom was sealed in the next turn.

I sat out the second round, which saw Marc (Akunanse bleed & vote) bleeding Richard bleeding Simon (!Salubri combat) bleeding Kevin (Marc starting). Since I did a lunch run and was seduced by the shinies on display, I didn't pay close attention to the game. Simon suffered horribly from being the only pure combat deck in play, and never really got forward momentum. Richard ended up bearing the brunt of Simon's combat, which allowed Marc to oust both Richard and Simon, but Marc was ousted by Kevin.

In the 3rd game, Simon was bleeding me, bleeding Marc, bleeding Brendan. I had a funny crypt draw, never seeing a minion with OBF, and starting with 2 duplicates in my opening draw, which made things a bit more awkward than I would have liked. I also didn't run into many eternal masks in the first half of my deck, which also made things a bit tricky. I did get lucky in drawing the two Presence masters really early, which allowed me to protect the two minions without pre, which made it much harder for Simon to attack me. I was forced to juggle things a fair bit, with a Fame'd minion hanging around on 1 blood for much of the game, but gradually got setup with the hunting ground and Opium Den, and eventually got up to 4 minions out, although I did have a Waters of Duat burnt by Marc in combat. The game see-sawed until Simon caught Brendan without S:CE and was able to put a vampire in torpor, who was subsequently diablirised by Marc, providing Marc with the minion superiority he needed to oust Brendan. I was now setup, and drawing into my stealth cards, I was able to run through Marc in fairly short order, and then my minion superiority and available stealth allowed me to overwhelm Simon fairly quickly.

This meant I was the top seed in the final. I chose to sit as Kevin's predator, which, in retrospect, given that he was the most capable of generating intercept, was probably an error. The final table was me bleeding Kevin bleeding Brendan bleeding Richard bleeding Marc (I started). Being immediately upstream of the two decks with bounce was probably foolish as well, but I was worried about my defense against bleeds being bounced onto me, and didn't want to be Richard's prey. My crypt draw was on the expensive side for the deck, and I should have paid to see 1 more, as I only got three minions out. Consequently, the deck ran a little slow, and, although I did eventually oust Kevin, Brendan had ousted Richard by that stage (helped by bouncing some bleeds, including one of mine that Kevin had already bounced), and Brendan was well setup and had farmed back enough pool to be out of range. I had been whittled done most effectively by Marc, but Marc had been whittled down by Richard, and then by Brendan, so it was a race to see who would be ousted first. Brendan decided to resolve the matters by voting us both out in a single turn, and thus leaving both Marc and I with a single VP to his 3.

We manage 3 rounds and a final in under 6 hours, which is quite good going. The predominance of bleed decks on the table contributed to this though.

Overall, I had fun, and the Settite deck secured 5 VP's on the day, and generally functioned quite well, even when faced with odd crypt draws. There are a couple of crypt choices I'd like to adjust, and I should probably replace the Dream Worlds with Social Charms, for the occasional farm option, but the deck's pretty solid.

Friday, March 27, 2009

The benefits of expressivity

This is the result of a chain of thought kicked off by reading "The fallacy of high level languages".

While I agree with many points made, it did start me thinking about how the debate about high and low level language is framed almost entirely in terms of the main developers. This is probably since most people in the debate are heavily involved in commercial software development. One of the great strengths of FLOSS development is the existence of the casual contributor, the person who submits a fix to an bug they find personally annoying or such. They often are more interested in using the program than developing it, but they have the skills to make the occasional contribution.

Consequently, ease of contribution is a factor that is worth considering, and, based on my personal experience, the easier it is to get up to speed on the code around the problem, the more likely I am to write and submit a patch. Expressive, compact code is easier for me to get my head around, and thus easier for me to contribute to.

Of course, expressive code is only partly function of language choice, often being more a matter of developer discipline (nothing can save one from writing crap code, after all).

Compactness is just as important though. When dealing with a new codebase, the less I have to keep in my head in trying to follow the logic flow of the path of interest, the better. Here, language and library choices are important, and this is where high level languages can really shine.

Indeed, pretty much all of the arguments for the maintainability of code written in a high level language are much more relevant for casual contributers, who can't fall back on the sort of overview somebody who's worked extensively with the code base will have, than it is for the major developers.

Tuesday, March 17, 2009

Today's social (16 Mar 2009)

Today's social featured arguablely the longest 4 player game I've ever been involved in. Phillip (playing old-school Ventrue Vote & Bleed, and starting) was bleeding Val (Guhuri Restricted Vitae & some vote) bleeding me (new school Ventrue vote and vote) bleeding Kevin (!Toreador sneak bleed).

The game started fairly slowly, since we were all bringing out fairly large minions. With all the Zillah's Valleys and one of the Information Highways in the bottom 10 cards, and not drawing many masters, I was slower to get going than I hoped. I was always going to be in trouble as I only drew 2 masters in the first 3rd of my deck, so later one I was jamming rather horribly on masters. I also erred in the balance of vote cards, and didn't have enough aggrssive votes to really pressurise Kevin when I needed to, and, with the number of big vampires around, calling Honour the Elders ended up helping the table fairly equally. Kevin, relying on the power bleed from the Palle Grande was able to oust Phillip, although Phillip did come close to ousting Val a couple of times, but Val's farming was just good enough to hold him off. I did eventually oust Kevin, after much to-ing and fro-ing, but eventually minion superiority meant Val was able to end oust me (Val had 8 vampires to my 6). Considering that my cheapest two minions were 6 and 7 caps, and Val vampires ranging from 4 up to 11 (Eze) says a lot of how the farming went through the course of the game.

The game had several unusual events - I had to yield two titles due to contests, and had to burn my protected resources to eventually bleed Kevin out, which was extremely annoying. Both Kevin and I decked ourselves, and, when Val ousted me, he was down to only a couple of cards left in his library.

The Ventrue deck does show promise (with the Ventrue headquarters and Gustav, I could towards the end generate 17 votes without modifers, despite the yielded titles), but I do need to add a few more aggressive votes, and work on the master balance a bit. Fitting in a couple of vessels will a) provide an additional pool gain option, and the trifle will also be useful to help cycle through the masters a bit faster.

After the marathon, Kevin left, and we played a three player with the intention of playing fast. I (Serpentis bleed deck, mildly tweaked) was bleeding Phillip (Brujah concept deck) bleeding Val (Lasombra combat & bleed), with Phillip starting. I got off to a fast start, with an early hunting ground and a path not to long thereafter, and, since the bleed deck is fast, was able to sweep the table in less than 30 minutes. The combination of the path & the eternal mask is truly scary. This deck will suffer against bounce, and can be run out of S:CE, it's probably the best of my attempts at a stealth bleed deck.

An interesting, and rather educational evening.

Wednesday, March 11, 2009

Notes from the VTES tournament

So, Sunday was the most recent VTES tournament, being held at the Tokai Library. Although I arrived somewhat late (due to a misjudgement with the traffic caused by the Argus), I was still in time to play, which was good from a "note wasting the trip" perspective. Regrettably (presumably because of the Argus clash), we didn't attract a larger representation from the Fishhoek crowd, but we still had 10 players, and Phillip judging.

In the tournament, I played the Anarch Vote deck. It successfully got to the final table, which is a much better showing than the previous tournament I played it, though it remains fragile due to it's many moving parts.

The tournament was for me somewhat frustrating, as the deck didn't flow as nicely as it had at Monday's social. The crypt probably needs tweaking. The original idea of bringing out a huge swarm of minions out and RC'ing for double digits is proving to hard to pull off - 4 minions out looks much more reasonable, and I frequently suffered from not having both PRE and OBF available.

So in the first round, we managed to screw up and get the seating wrong from the announced order, and ended up with Marc (Ventrue antribu dominate bleed) bleeding Brendan (Ahrimane precense bleed & wall) bleeding Nick (Lasombra dominate bleed and vote) bleeding me (anarch Revolutionary Council) bleeding Kevin (Toreador antitribu stealth presence bleed). I didn't really get going, but was able to whittle away at Kevin's pool with a few bleeds, and did get one Revolutionary Council off. I made a tactical error in using a Detect Authority in a failed attempt to intercept a vote, rather than holding it for the bleed reduction, which may have saved me long enough to oust Kevin. Scariest event on the table was Marc bleeding Brendan for 13 in one turn, but he ultimately wasn't able to push through fast enough.

In the second round, Simon (Malkavain combat) was bleeding Kevin, bleeding me, bleeding James (Ventrue dominate bleed) bleeding Nick. For most of the game, I had too few votes available to go forward. Between Nick, James and Kevin, there where 7 votes from titles on the table, and James had the Ventrue headquarters, and I only got two Fee Stakes into play, one of which got burnt by a vote.

However, after a turn when James called a Parity Shift, and had thus tapped his Ventrue Headquarters, I was able to combine a inferior bewitching and a rant to force a revolutionary council through and oust him. Being forced to use Seren Sukardi's pre did mean I could never Voter Cap, so my farming strategy, such as it is, failed completely, and I was quickly ousted by Kevin.

Simon's deck was never able to really get around Kevin's combat defense, although, with 3 hunting grounds in play, and a Pulse, Santaleous's standing 6 bleed did generate a lot of blocks. There was an amusing turn, after both James and I were ousted, when Sanelous's bleed was bounced back and forth between Kevin and Nick. Eventually, Kevin was able to go through both Nick and Simon.

The final saw Nick bleeding me bleeding Richard (Akunase wall'ish deck) bleeding Andrew (Ishtarri bleed) bleeding Kevin. This round went rather badly for me. Where I'd previously suffered from not drawing Fee Stakes, in this round, I almost only drew Fee Stakes and wasn't even close to drawing a single vote modifier. Given that Nick got a regent down on the table, as well as another title, I was never in a position to even attempt a vote. Richard also went backwards early in the game, which significantly slowed me down as well. Nick was able to oust me fairly quickly, and Andrew ousted Kevin fairly soon thereafter. When I left, Andrew had also ousted Nick, and with minion superiority, was looking likely to oust Richard, which eventually happened.

In between the first two tournament rounds, I was also able to get 2 social games in.

The first, when I tried the Anarch deck, didn't go well, and Phillip's experimental trophy deck was able to red-list and then burn my single baron, which didn't help me. James's Assamite bleed-farm deck worked efficiently and swept fairly quickly.

In the next game, I played my Serpentis bleed deck, bleeding Phillip's trophy deck, bleeding James's Assamites, bleeding Marc's Liabon presence bleed deck. I was able to work through Phillip quite quickly, although I did end up burning through most of my strike combat ends card after he made one of my minions redlist. James was able to get fairly setup, and bled Marc for 8 in one turn after I'd ousted Phillip. I got lucky, and drew a Path of the Typhon just in time for it to allow me to afford two "Truth of a Thousand Lies"s, allowing me to oust James. Thereafter, I was able to push through Marc, although it was tight as I had very little blood left on my minions, and Marc was bleeding me fairly quickly as well.

After being ousted in the final, I played one more social, trying the latest version of the Mass Reality deck. I bled Simon's Malk combat, bleeding Phillips Aabbt deck, bleeding James's Ventrue deck. The deck performed incredibly poorly. Poor card draws contributed. I didn't draw a Mass Reality at all, and given that there are only a handful of guns in the deck, having 3 .44 Magnums in my hand after two turns was rather annoying. It's hard to say what parts of the deck actually work as a result, and I'll have to try it again to see what happens.

Still, the day was good fun, and I got quite a lot of vampire in, and the Anarch deck got to a final, despite the difficulties it had on the day, so I'm fairly happy with the day. The library is a very pleasant venue (and has a complimentary cat), and, when the event doesn't clash with the Argus, not that hard to get to, so I'm certainly in favour of holding more events there. I'm less of a fan of playing on the Sunday, though.

Monday, March 2, 2009

Today's social

With the benefit of sharing the table with James in all the games, despite the cut-off being moved to 11, I managed to get in 4 and bit games in between arriving at just past 7 and the deadline, which is pretty good going. In addition, I managed to sweep all 4 games that completed, although, in a least a couple of the games, a more aggressive predator would have probably ousted me.

I played two and a bit games with the modified anarch vote deck. It still feels like it has too many moving parts, but the dropping the Veiled Sight's for Forgotten Labyrinth's and some Lost in Crowds makes a big difference to the deck. The Groundfighting are also a useful option, since it an additional option in combat, and remembering that one can Crimethinc in the middle of a vote is very useful for the Revolutionary Council. A serious vote deck will still lock this deck down, and a fast stealth bleed deck will almost surely toast it, and a bad library draw will screw me over, but that's true of many decks. Still, it is quite fun when I manage to pull off the RC.

I also played two games with the Settite Serpentis bleed deck. The addition of the Path's certainly helps that deck. Being able to bleed for 4 at +1 stealth for 1 blood with inferior Serpentis is pretty scary, and the small minions means the deck can move forward fairly quickly. The lack of PRE is a bit of a problem for the S:CE, but the deck is fairly effecient. A good POT combat deck will toast it (I was lucky in one game that Mark didn't draw any of his Immortal Grapples), and bleed bounce will also hurt the deck, but it's been surprisingly effective so far.

Wednesday, February 18, 2009

Tuesday's Social


I managed to get two games in (1 4 player, 1 3 player) (Kevin not arriving meant it took a while before we could get a second table going).

In the first game, Gerhard (Blooded Sand) (playing a Tariq superstar deck), was bleeding me (Ahrimane), bleeding Phillip (Harbringers of Skulls) bleeding Val (Mid-cap Gangrel Protean), with Val starting.

I suffered from having a rather weird combat draw throughout (only 1 Carrion Crows, for example), and a somewhat unfortunate crypt draw (all 3 the non-Ahrimane vampires came up) and twice had minions toporised and then diablerised, which was rather sucky. I was able to pressure Phillip fairly well early on, but never got close to ousting him. Val's deck was too strong for both Gehard's and my decks. I didn't stick around to watch the end game. With a few different draws, I might have been able to survive better, but so the game goes sometimes.

In the second game, I tried the mid-cap Serpentis bleed deck. Val (weenie guns) was bleeding Gehard (Tariq) bleeding me, with me starting. I had a great start, being bring out the two-cap, and play the hunting ground early. This allowed me to pay for the Eternal Masks, and, although Val was able to bring out several minions quickly, the time taken to find his intercept locations meant I could bleed unhindered at the start. Gehard's deck was unable to resist the weenie swarm, and he conceded fairly early. Val helped my cause by paying for several guns, and I was never short of S:CE, so the combat was never an issue. There was a turn where things looked like they might be a little tight, as I went down to 6 pool, and was facing six minions, and some farm, but, with a Catatonic Fear at superior to knock a minion into torpor, and a vessel to destroy one of Val's blood dolls meant I was able to push through.

The Settite deck shows some promise, but the card balance needs work. I ideally also need to find room for the Path's as well, as being able to bleed for 2 at +1 stealth with one card at no cost will be useful, and it will make the Truth of a Thousand Lies a much more attractive option to play.

DVCS musings

Every so often, there are a spate of blog posts ragging on git. Probably because of who wrote it, and it's importance to the kernel, negative criticism of git tends to get rather widely broadcast, and attracts the same sort of stupid fanboy'ish flamewars that plague many bits of the free software ecosystem, and there always seems to be a "my DVCS is better than yours" flamewar just waiting in the wings to really get the discussion going.

To me, much of the discussion feels very much like the old emacs vs vi flamewars, before they became parodies of themselves. Given the trend towards easy interoperability, with tools such as git-svn, the bzr svn plugin, the various git fastimport helpers, and so forth, increasingly, the choice of (D)VCS is as independent of the other people in the project as the choice of editor. In a few years, hopefully people will actually realise this, and the whole debate will calm down. At which point, we can all return to arguing about the important things, like editors.

Tuesday, January 27, 2009

Yet more Vampire

(a further post in the "blog as a dump of deck notes" series)

So, at the social today, A had yet another stab at the Revolutionary Council Anarchs deck I'm trying to get to work. It's morphed a fair bit since the last attempts - I totally reworked the crypt, relying on Anarch Converts rather than trying to make Jack Drake work, which makes the crypt cheaper, although I still think the balance is a bit off. The existance of Herbert Westin, another 5-cap with OBF & PRE helps, but I'm still not completely happy with the crypt. I dropped the No Confidences, as just being to corner case, and replaced Anarch Manifesto's with Crypt Son's, since equiping them doesn't actually require an anarch, so can't be used to play Crimethinc. I'm relying on a smattering of tha in the crypt, and a bunch of discipline masters to boost my vampires.

In the first game, I was bleeding Andrew (playing old-school Toreador with some guns), bleeding Simon (Tremere) bleeding Richard (Guruhi PRE bleed) bleeding Marc (!Ventrue Wall/Bleed), with me starting. While I had a reasonable crypt draw (both Rennet and Herbert in the opening crypt), I had a sufficiently strange library draw that's it hard to say anything about the deck from it. I didn't draw a single Revolutionary Council, Effective Maangement or stealth card, and only drew 1 Crimethinc, immediately before I was ousted. Since I went through about 1/3 of my deck, that's fairly improbable (odds of around 1 in 1000, according to Sutekh (since I wrote that bit of the code, I'm reasonbly certain the maths is correct here)). Needless to say, the experience ended up being pretty annoying, and being hit by the occasionaly dominate bleed meant I was osuted without being able to put much pressure on Andrew. At this point, I went in search of some food, so I'm a bit hazy on the details of the rest of game, but, as I recall, Andrew having gradually built up, and, with Masika out to act as a repeat blocker, was able to defend himself well while bring out lots of small minions to whittle down Simon, with the occasional big presence bleed. Richard got several large bleeds through on Marc, but was unable to really get his pool farm going, due to having two Vessels Sudden'ed, which also stopped him burning Marc's blood dolls. Consequently, he was unable to survive a lunge by Simon, who soon fell to Andrew. Marc held on for a bit, but ultimately Andrew's minion superiority simply overwhelmed him.

In the second game, Andrew, playing a Ravnos deck (and starting) was bleeding Richard (Guhuri) bleeding me (Anarch Revolutionary Council) bleeding Marc (Nosferatu Rush combat) bleeding Simon (!Salburi). I had a much better library draw, and actually got some use out of the Poachers Hunting ground (until Andrew burnt Richard's hunting ground). I also managed to get three Revolutionary Councils off, although I had to direct 1 backwards to avoid being blocked. I was able to pressurise Marc quite successfully, but ultimately struggled to generate enough stealth. There were a couple of occasions where I was possibly 1 stealth card away from having the oust, but never quite drew the cards I needed. Having to juggle minions in and out of torpor because of Dragonbound being on the table also complicated things for me. I ultimately was ousted by Richard. Simon was able to oust Andrew via Fame, while Richard managed to strange day a bleed past Marc's 3-Raven spy Cock robin to oust him. Simon though, was eventually able to knock Richards minions down, diablerising Iniko and, had we not called the game at the point, would have probably been able to bleed through (although arguably the game was long past the timeout stage).

The major problem was the lack of stealth - I amybe need to rework the crypt a bit more so there is more OBF available, and run more different stealth cards - having the option of dropping the occasional Lost would make getting the votes to the table more likely. The problem is finding the space, though, as I need to have a number of slots for the Fee Stakes, I can;t reduce the vote push, since the anarch titlesjust aren't enough, and the defence package is already probably too weak. It needs more work, but it's much closer to a working deck idea than in the past, I feel.

Wednesday, January 14, 2009

Gtk+ lessons

I learnt of a couple of interesting gtk+ quirks over the last couple of days while hacking on Sutekh. Both rather surprised me, so are thus worth noting for future reference.

The first quirk is something I still don't fully understand. For various reasons[1] Sutekh uses strings to display the numbers with markup in the interface. I recently added a tweak so that these would sort numerically, rather than lexically. Since this involves stripping off the markup and converting to an integer, the sort is not lightning fast, but still acceptable. Unfortunately, adding the tweak the obvious way doubled the length of time to run the tests on the model, despite the model being unsorted by default. I've been unable to track down why this affects the tests so badly, since we shouldn't be using that code path at all. Fortunately, a simple lazy work-around exists, which is to tweak the sorting in a slightly less obvious way, and avoid it impacting the test suit.

The second quirk is something I do now understand, although the behaviour did surprise me. Sutekh is capable of generating very large gtk+ models (using "show all cards, show expansions + card sets" and editable options, it's easy to end up with a gtk.TreeStore containing more than 100000 entries). Loading these was unacceptably slow, with most of the time spent adding rows to the model, despite using the usual recommended tricks of disabling notifications and such while adding the rows.

It turns out that the underlying data structure for the gtk.TreeStore is glib's n-ary tree, g_node.
g_node, however, represents each list of children as a singly linked list from the parent. Consequently, appends into long lists are slow, since you have to walk to the end of the list. There's the obvious work-around, which is to insert thing in reverse using prepend, and it is indeed significantly faster, but you'd think this would be mentioned prominently in the docs, rather than requiring one to grub around in the glib code.

[1] i.e. We haven't got around to fixing this the right way yet.