Skip to main content


Showing posts from May, 2010

Tester-driven development? What is the proper utilization of QA?

I was reading about more software development anti-patterns because on Tuesday I'll have to conduct a code review for a particular client. I managed to somehow stumble on to Tester-Driven Development. I honestly thought it was a typo and assumed they meant Test-Driven Development. I started laughing at the fact that there are projects that allow QA to drive the requirements of the application--but hey? Sometimes projects are so terribly managed that it happens!

If you ever find yourself on a project where production-level people (Developers, QA, Designers) are creating the requirements instead of the primary stakeholders, you better take a step back and think about how bad that could turn out. Oh wait, I forgot you could be telepathic and just automagically know what the client wants.

Here's my two cents.

When a web project starts, the respective discipline leads (developer, QA, design, project management, stakeholders) need to figure out what their strategic goals are whet…

Starcraft 2 Map Editor will use Galaxy (Blizzard's nerfed version of C)

I recently stumbled upon this video showing the power of Starcraft 2's new map editor. Blizzard intends to have a "map store" much like the Apple iTunes app store for people to buy and download maps to play. Based on a little bit of research, it turns out SC2's map editor will be using Blizzard's version of C called Galaxy. This is actually pretty awesome compared to their older games.

Warcraft III Map Editor JASS is terribad
Warcraft III's map editor uses JASS which terribly fails in all angles. Firstly, its context free, allowing developers to run rampant with their spaghetti code. Secondly, it's infested with memory leaks. Thirdly, it has the shittiest, dumb down syntax that you'll ever see.

Let's check this out:
function Trig_JASS_test_Actions takes player p returns nothing local integer i=0 loop exitwhen i==90 call DisplayTextToPlayer(p, 0,0, "Hello, world! "+I2S(i)) set i=i+1 endloop endfunction
"takes player p retu…

Plenty of Fish is able to predict who you will marry

I tend to read Markus Frind's blog a lot because he's a successful, local vancouverite developer that built Most of the time on his blog entries, he goes on to detailing his experiences with ad companies and how a lot of them are shady. In his latest post, he claims to have developed a dependable algorithm for predicting who you will marry or enter into a relationship with. This is rather interesting because I don't believe that any other free online dating site has this technology. Here are the dimensions the algorithm uses:

Self-Confidence: This dimension was created to measure the extent to which an individual feel comfortable with him or herself. The items in this dimension reflect elements of self-confidence in both private and public contexts.Family Orientation: This dimension was developed to assess the degree to which a person possess a family orientation.Self-Control: This dimension measures the extent to which a person exerts control over sundry …

Blast Mojo Tutorial (Episode 3): How to invoke a web service

In episode 3, we go over the following:

1) Creating the markup for our application
2) Enabling the templating feature in Blast Mojo
3) Creating a dummy data provider
4) Implementing a Service Locator
5) Invoking the web service within a Command
6) Rendering that data from the web service into the view

As for episode 4, I've started to employ full screen code in the recordings, overviews where I go over the parts in the video, as well as, copy pasting more and then explaining what the code does. In Episode 2, I did a lot of coding on the fly which led to spelling mistakes or syntax errors. Thanks for the feedback Loyal! That said, episode 4 has hit a snag. It turns out that Mojo's Standard Library is not open source, so I can't go about writing public code tutorials--so I've decided to change its topic from "Using Mojo's Reusable Controllers in Standard Library" to "Creating Your Own Reusable Controller".

Stay tuned!

Blast Mojo Tutorial (Episode 2): How to build a Hello World application

I've been playing around with for a while now and I recently started becoming more and more passionate about creating tutorials for aspiring web programmers. Even though this is just my first tutorial video (doing random episodes before I do episode one, as episode one will be quite heavy on the theory portion of Blast Mojo), I've learned a few things:

Use a higher zoom on TextMate so that the viewers can see the code more clearlyUse better transitions in between cuts, it seemed very jagged playing it throughBe consistent--you'll see that iTunes appears in the 2nd takeIncrease microphone volume, the music started to overtake my narrativesEpisode 3 will go over using the Service Locator, invoking a web service, and displaying data. Stay tuned for it next week!
Cheers, Jaime

Honesty over the Internet: Sales of Virtual Goods

If you watch the video you'll see that Markee produced it because of a mishap recently. After a "customer" made about $20,000 in purchases for virtual goods, they did a reversal essentially having that amount of money returned. Incidentally, there is a certain amount of time that a user can reverse purchases ( I don't believe a user can reverse a purchase that was made 3 years ago)---in this particular case, the amount it was stopped at was approximately $13,000.

In the end, notice that Markee's message is about stealing from companies that sell virtual goods and how the level of honesty in parents can directly affects their children's perspective on stealing.  Although his company did take a large financial hit for the customer's reversals, it is more of an issue for his company to step up their legal strength.

A customer should never be able to reverse purchases after 30 days. A terms of service/use is very important. If you look at company that has an …

TextMate Tutorial: How to add a Strikethrough keybind to your Markdown bundle

Markdown is awesome for quickly generating Readme's on Github. After looking at other projects using the strike tag, I've decided to create a custom keybind for it in my TextMate Markdown bundle. Here's how:

1) Click the + sign on the bottom left and click New Command.
2) Paste this into the editbox and make sure you name your command "Strikethrough".

For the input field, select WORD in the drop down.
For the output field, select "insert as snippet".
As for the keybind, you can totally map it to whatever you're comfortable with but I chose Command-D as it is the same thing in Microsoft Word.


World of Warcraft Ninjalist addon: version 0.1 coming along quite nicely

After toying around with more GUI related issues in World of Warcraft's API, I've decided to take a totally different direction. Originally when I architected this addon, I knew in my mind it would be a super simple Console application that a user could easily paste in a name and add it to the database; however, why stop there?

After discovering AceGUI, I can easily start developing UI components in no time! As of right now, I've got it saving data in between game sessions--the interesting part will come when I'll have to develop the web service that will parse the SavedVariable.lua, eliminate duplicate entries, as well as, do a huge merge between their copy and whats on the server's (per realm basis of course).

Here's a screen shot of the responses when adding new Ninjas to your list:
When a user clicks add after entering a name in the textbox, it'll go ahead and add that person to the ninjalist tagging the user's realm and current date/time. Someday, I…

How to persist data between sessions in your World of Warcraft Addon

After fiddling around with trying to save data between game sessions, I've laid out a few lines of code that could easily used in any sample addon you ever decide to develop. Assuming that you've already setup your hello world addon, you can simply add these lines to to your OnInitialize callback to create a new data store.

Now if you want to save data to it (or insert a row), do the following

If you want to read off of the data store, do the following

The reason why I put 'global' is because global signifies storing data for all characters between the account. As the developer, you have a choice of scoping:

'profile''char''realm''race''faction''class''factionrealm''global''profiles'Since the addon I'm developing stores data across all characters I set mine up for global data collection.

Google "Jaime Bueza"--I've come a long way since I was a young Ninja

Have you ever googled your name? I recently went about googling other colleagues of mine and the results were always their digital portfolios or resume; however, mine turns out to be a broken blog and 6 year old forum topic I created about how to set ranges on randomly generated numbers. I was terrible.
October 10th, 2004 I posted on asking about how to set a range on a randomly generated number in Java. I can't believe that still shows up on Google's search results when you search "Jaime Bueza". 
Here's a few points of advice for aspiring software developers: If you're going to ask a trivial question, ensure that you sign up as a troll. Name yourself: "lolyougotowned" or "trollpride" or "trollingftw". Don't put your real name down when you're asking technical questions. I'm sure that these search results will be detrimental to my career down the road.If you're going to ask a trivial question, ensure…

Iron Man 2: Apache configuration files show up on Iron Man's HUD UI

Whenever they show Iron Man or War Machine's HUD user interface, you'll see at the very bottom it said:<IfModule ____></IfModule>Are we to believe that Tony Stark was adamant about Apache configuration file syntax? Just joking--the person who designed it from a movie was probably being creative, so he copy pasted some stuff from his Apache configuration file.I don't want to spoil it for you but I felt like I had to talk about this: whenever someone non-technical tries to be technical. A perfect example of this was the Hammer Industries CEO. When Ivan "hacks" his encrypted software and the Hammer Industries CEO says, "Wow, you totally bypassed the firewall so fast". Wait a second. Firewalls essentially protect the system from outside attackers (emphasize outside trying to come in). So why would they even care if it was a terminal INSIDE the corporate infrastructure. Totally defeats the purpose of network security. Another terrible example of …

The absolute best site for Apple product buyers, after a terrible experience on Ubuntu for my father, I've decided to just go buy him a Mac Mini. Firstly, before I pull out the credit card, the first thing I do is go to MacRumors and look up the last update date for the Mac Mini. Incidentally, the Mac Mini was last updated on October 2009. That said, I'll be holding off on my purchase for a while as Apple may be updating these machines sometime within the next few months.After buying so many Apple products, I've come to realize that if you're going to buy any Apple hardware, you need to buy it ASAP after it comes out. I made the huge mistake of buying an Intel Core Duo Macbook a few years ago, receiving it, and then 4 days later Apple releases an Intel Core Duo 2 Macbook with a bigger hard-drive and a lower price tag.It's okay though--Pudge (the name of my old Intel Core Duo Macbook) lasted for a good 3+ years until he passed away from an accidental swim in "diet…

Dear Adobe, your Flash player has terrible performance on Linux platforms

After doing a simple 1-2 hour install on a new Ubuntu box, I decided to surf a few HD videos on YouTube. The reason I installed Ubuntu is because I wanted to test out the user experience of 'web surfing' on a Linux platform. Turns out, Adobe Flash Player has terrible performance when loading anything labeled "HD" on YouTube.At first I thought it was just YouTube's video player, but I went to Vimeo and tested a few of their high definition videos and the same issues occur:Ridiculous CPU spiking to 95%Framerate for videos drop to 1-3 FPSIf you take the same box and view the videos on WIndows or Mac OS X, you can see such a huge difference in performance. Since pretty much every video site you'll ever encounter is powered by a Flash player (instead of HTML5 video!) I doubt that Linux will ever be a great user experience for a casual user (only watches videos, reads news, checks email).Now that I've mentioned HTML5 Video, go check out my fork for HTML5 video …

Part 2 on dealing with Ninjas: This addon will blow your mind

If you've checked out the code on my github, you can see that it's already setup to take commands and start saving names in between game sessions. Incidentally, this doesn't exactly solve the problem with providing users with an early warning system of any ninjas in tehir raid group (for themselves yes, but for others no). To solve this problem, I thought of a web service that I'd have to build that gave users the ability to upload their .lua file of SavedVariables. Essentially, the following flow would happen:A user will upload their WTF\Account\ACCOUNTNAME\SavedVariables\Ninjalist.lua file to the web serviceA user will then have to specify what realm they are on in order to scope the queryThe web service will take their Ninjalist (Table variable type in Lua) and merge it with any other Ninjas in the database but is specifically scoped to only those within the same Realm.The web service will return a new Lua file with the merge completed and the user can place the new…

Social architecture of World of Warcraft: Dealing with Ninjas

Contextually speaking, Ninjas in the World of Warcraft are people who purposely make the effort of lying to 24 other people (a raid) about fair looting rules when in reality their intention is to steal all the items.
Can software really solve the inherent problems in World of Warcraft's social system?The problem with World of Warcraft's social system is there are no enforcers that punish people for stealing. Can you imagine a world where anyone could steal from you because there was no law enforcement?As soon as I saw my distressed guild mate say that in chat, I started to think: if there's no enforcement on who steals something in WoW, could a tool be made to at least warn the user before cooperating with a ninja so he/she could avoid getting stolen from? Ding.After I gathered my thoughts, I said to myself that I would create a World of Warcraft addon that will query a remote database for a subset of names inside their current raid (when the user enters a raid group). Ulti…