Screw you .Net, screw you and you Color Structure

Tuesday, May 18th, 2010 | All categories | 1 Comment

So yeah, I haven’t been around this place much in a while… because you know… got me a new job programming. A real job that is! No more freelancing just to feed myself. Downside… it’s VB.net… ugh.

Speaking of .Net though. Those geniuses over there at Microsoft decided on one hell of a job designing the interface of the Color Struct in .net. See a Color can be easily stored as a 32-bit value which can handle Alpha, Red, Green and Blue all in one compact value. Win! This is how a lot of you guys on the internet see colours in that pretty little #RRGGBB or #AARRGGBB value with the a’s and f’s. Yeah that’s hexadecimal, and 8 digits of hex is 32 bits in binary, fitting nicely in the word length of a 32-bit processor.

But see there are two basic 32-bit values. Integer and Unsigned integer. They’re very similar, only difference is Integer reserves one bit for value compliments that represent negative values (basically if you convert all the 1’s into 0’s and all the 0’s into 1’s and + 1 you have the negative version of the value with the leading bit representing sign). This means that you only get 31 bits of precission, just 1 shy of the required number of bits for ARGB.

Well the brilliant thing that MS did… they made retrieving and creating Color structs from these values accept only Integers (not Unsigned Integers). These is fine when retrieving because a negative integer can be easily expanded into the bit length of a unsigned integer (31 fits in 32, and the negative bit just because 2^31).

See here: http://msdn.microsoft.com/en-us/library/system.drawing.color_members.aspx

But when creating them… well you run into an issue. Say I want to take the color yellow with full opaqueness 0xFFFFFF80, well this is larger then the max value of Integer. And depending on how you hand it to Color.FromArgb(…) you may get an overflow error. Ok… what?

Now you may be saying “well LoD, why not just always write them out as hexadecimal values???”. Well because sometimes I receive my colour values as something different. For instance say I store a colour value in a uint as some property of some object? Or say I store the hex value as a string in XML, and I parse out said value using some algorithm. I have one written that parses strings starting with ‘0x’ or ‘#’ as if they are hex values. I can get them as Long, UInteger, or Double… and all give overflow errors.

That’s just poor design on MS side IMO. There is no reason that they should be taking Integer as the type when the value quite obviously needs all 32-bits of the UInteger. That or it should implicitly convert UInteger into it’s 2’s compliment in Integer. The fact I have to take an extra step when creating a Color struct just because they decided on using the wrong damn type for the interface is NOT my problem.

Oh and while I’m bitching about .net… how about VB. OMG! &H??? Really that’s what I have to type for hex values? Why not the more standard 0x or maybe even #? C# uses 0x just like so many other languages. But nooo.

And IIf??? Really asshole? No (bool) ? option1 : option2… ??? No instead I have to evaluate both option1 and option2 because it’s a function call? Thanks, that throws out any null checking with IIf I can’t say:

I can’t say that, because it evaluates both 0 and something.value… and if something is Nothing, than we have null access! Thanks guys.

Another one…

And, Or… first off, I’m sick and tired of the verbosity of VB. Spelling out every god damn thing. But on top of that And, and Or don’t self terminate. Example, if I say:

and bool1 is False… it should stop checking. But it doesn’t, it continues on checking bool2 and bool3. Why? Because. Ohhhh, they give us AndAlos and OrElse which will self terminate… but come on, which is more useful? Self terminating, or not self terminating. I shouldn’t have to explicitly tell it to self terminate… that defeats the purpose of SELF terminating.

And speaking of verbosity… any of you VB fans out there… FUCK YOU!

really??? I prefer short and simple:

see how easy that is??? Yeah… easy, clear, concise… oh and those curly brackets!? Yeah they make it realllllyyyyy easy to see where the end of some member ends. End BLAH… it just blends into all the other crappy words all over the language. UGH!

Tags: ,

Random Thoughts On OOP

Thursday, January 21st, 2010 | All categories | 3 Comments

So tonight I fell into a thread on a forum just as I woke up. In my post waking delerious state of mind I started ranting… spewing out

crap on my mind about the topic.

I don’t why.

It’s about programming. And problem solving. Conceptualizing what the hell we are doing as engineers. Cause that’s what we are… every

last human on earth, we engineer our world.

it’s all here: http://www.actionscript.org/forums/showthread.php3?t=228460

Anyways, I thought it may be interesting to some people trying to grasp the ideas behind OOP. In a very open forum kind of manner. There’s

no real direction to what I’m saying, I’m just philosophying in very poor grammar what programming is to me. And outline the usefulness of

the concepts implied in OOP.

Small LoDGameBox update

Monday, November 2nd, 2009 | All categories, Flash, Game Design, Tech | 1 Comment

I’m here to release a short update about the condition of LoDGameBox, and to say happy birthday to myself.

Yep it’s my birthday… weeeee. Ok back to work Duct!

So for the past month I’ve been working on a videogame for a company using the LoDGameBox as the framework for it. It’s coming along beautifully and also is letting me pull apart the entire framework and getting it into a real life implementation. This has been accelerating the building of the framework and I am happy to say Alpha version 0.1 will be out very shortly.

That’s right guys, a version that can actually be used will be out very soon. Please check out the code at my google code project and expect some great stuff soon.

Some things that are working right now:

Physics - there is a functional physics engine. It’s not exact yet, but it can actually be used. I’m using the main backbone of it in a game right now, but I coded my own custom Arbiters and Resolvers. Which yes you can do by extending and implementing the Arbiter and Collision classes.

AI - At the moment I have an A* monotonic algorithm and the main interface for AI and pathfinding set up. Right now you can have some fun with the well known A* algorithm… more algorithms to come.

AssetManager - I set up a management system and support classes for loading assets into a project. It creates a central place to load and store external assets like sound, swfs, bitmaps, etc. I am also making simple methods for accessing SWF Libraries for use.

LoDTweener - the LoDTweener is in very early stages right now. It supports container transitions and the SimpleTween right now. Don’t expect the robustness of TweenMax or even TweenLite right now, but it’s on its way. Of course, per usual, it is extensible for your sake, you can create your own custom tween types for complex animations. Just implement the com.lordofduct.engines.animation.ITween Interface and go go.

SFXManager - Sound effects are at a very functional level with support for playlists, overlapping sounds, and simple sound effects. At the moment it is based on CS3 / Flex 3.0, but I hope to be updating this to CS4 / Flex 3.4. I’m a bit hesitant though because it kills flash9 functionality, but the new data sampling options can make for simple audio syncing and the sort. Please let me know what you think about upgrading it to Flex 3.4?

UI - the user interface package is coming along very nicely with Mouse Cursor controllers, Keyboard controllers, pop windows, and other cool stuff. Check it out.

Utils - also the utils package is building up nicely with simple methods for performing numerous actions. There are tools for random values, math, strings, matrices, timers, etc.

Enjoy!

Tags: , , , ,

I screw the screw with a screwdriver - Interfaces

Sunday, September 20th, 2009 | Flash, Tech | 1 Comment

Interfacing and Implementation

Several times on the internet I’ve been in some type of discussion in which I refer to interfaces and implementation. Several times I get a return with some statement about how they aren’t using an interface at this moment, or just explicit confusion to the entire statement all together. Now this doesn’t surprise me, I assumed the person understood the word when they didn’t. It took myself a while to figure out what the hell they are, and that was with both friends and books shoving the concept in my face repeatedly until the light lit up and went ‘ding ding ding!’ This entry here is written in the hopes that it goes ‘ding’ for you as well.

The words are just vocabulary describing concepts. The words travel from 1 language to another easily. It just so happens a few languages also have data types and keywords called the same thing. The only reason these keywords are called that is because the action they perform is equivacle to the definitions of the words as a concept.

Consider it like this… why is a screw called a screw? Because you screw a screw. The name of the screw directly relates to the action performed on or by the screw. I don’t know which definition of word came first (if the noun or the verb), but either way interface is kind of the same idea. We just know that the concept of interface came before the data type interface.

WHAT ARE THEY!? Ok ok, let’s get to the most important part of this article. What the hell is an interface and implementation as a concept.

Interface

Well let’s just look at the dictionary definition of this word. It’s not like this word was invented just for programming… it comes from English. Let’s take one of the several definitions of the word that closely relates to our situations from an English perspective.

interface - a common boundary or interconnection between systems, equipment, concepts, or human beings.

The commonality between all the definitions of interface is that it refers to a boundary. And that’s what a programmatic interface is, it’s the exterior boundary of an object. More specifically it’s the parts of an object you can see and communicate with when you aren’t inside the object. I can see a human’s mouth, I can’t see their lungs. His lungs play a large role in their ability to speak, but just from looking at them, it looks as if the mouth is doing all the work. That mouth is their speech interface.

In OOP the interface is nearly the same thing. When you define a class everything inside of the class tends to be protected and wrapped inside of it. This is called encapsulation, and is the simplest example of encapsulation in OOP. Once a Class is instantiated and other objects attempt to use it, the other objects don’t CARE what goes on inside of the Class… and the object doesn’t want the other objects to care. Instead we communicate to the object through its interface… that being the properties and methods defined by the Class.

The word can also relate to other data types as well. Such as user interface, a user interface is the parts of a program as a whole that are made available to a user to alter the program. We don’t let the user into the program to play with anything, we have a definite boundary through which there are a few defined openings they can act upon. Or a graphical user interface, its like a user interface, but displayed as graphics as opposed to command entry (ui is accessed via a shell or command prompt, gui’s are accessed through a more intuitive visual display). Further more larger design patterns can have implicite interfaces. For instance, say you create a large framework… that framework can be designed with implicite boundaries. Certain data types that can be created, and others which are hidden and internal. For instance consider the DisplayList in flash, coders of AS3 don’t get access to the nitty gritty of the DisplayList like how it is rendered or anything. But we have an interface to gain access to it and use it via the DisplayObjects, Stage, and EventDispatchers made available to us. These kind of interfaces are very complex and take a lot of planning. The boundaries of them are sometimes hard to visualize.

Implementation

When you have an interface, what are we interfacing to? Awww, the implementation. Let’s again take the English definition of the word as a verb (not as a noun).

implement - verb - to put into effect according to or by means of a definite plan or procedure.

And that is exactly what implementation is in programming as well. It the WHAT the interface is allowing you to do. Remember how I described the mouth as the interface of speech for a human. And the lungs played a role in the ability. Well the lungs are part of the implementation. It’s the what that is occuring to allow voice to be created, of course there are other parts that consist in the implementation; larynx, tongue, etc.

In OOP you can see the implementation as the actual operatable code inside of a Class. So the method definition is the interface, and the code inside that method is the implementation. Again though the word isn’t just restricted to OOP and Classes. Anytime there’s an interface, there is an implementation of that interface. In the user interface, the implementation is what occurs when you access some part of the UI. Same for a GUI. Or in a framework the implementation is the entire framework’s structure.

Let’s bring this back into flash again with its DisplayList. I said that the DisplayObjects and the sort act as an interface into this structure. Well the implementation is what the structure is actually doing. Its all the internal code of the flashplayer that renders your DisplayObjects on the stage.

Data types and keywords

So what about the data type interface and the keyword implements. Both these keywords don’t exist in all languages, in more recent languages they’ve been put into use to allow a high level language to easily describe these concepts in code form.

Both of these keywords are explicit rules defined by the language to perform the concepts as defined above. An Interface is a way to describe the interface of a Class. And when a class implements an Interface you are deciding to now write the code which defines the implementation of the Inteface. Yep that’s a lot of reuse of the same word to mean different things… and that’s why it is confusing. But it’s just like the ’screw’…

I screw the screw with a screwdriver.

See the confusion??? That’s all it is.

I once got in debate with someone about how C++ doesn’t have interfaces, and through out the debate I was trying to explain how C++ does, it just doesn’t have these keywords or the data type. But the concept was there, and you could perform it. The act of extending abstract classes is basically the same idea as implementing an interface. Just abstractly… the only difference was that the same data type could be used to extend and implement certain Classes as well. Still though it’s all there. The same goes for AS3 (which I bring up a lot), it has an interface data type, but you don’t have to use it. I’ve found several open-source projects on the web where the programmer uses an Abstract Class to define the interface. The rule this abstract class is enforcing is the same exact thing as the interface data type.

Tags: ,

LoD AS3 Game Framework - update 3

Friday, September 4th, 2009 | All categories, Flash, Game Design, Tech | No Comments

This update is small, but important.

I’ve moved the source of my project onto Google Code for easy sharing. It also allows me to easily update it through SVN and for you to checkout the entire project out easy. Or you can just sift through each individual file on google code through the directory tree. In the end this will streamline my blog entries about it, I can post and share new stuff so much easier!

Furthermore I’ve changed the name of the project, from now on I’ll be referring to it as “LoDGameBox”. Please come on over and check it out. Version control and comments are available to see what changes have been occuring.

LoDGameBox at GoogleCode

Tags: , , , ,

LoD AS3 Game Framework - update 2

Friday, August 28th, 2009 | All categories, Flash, Game Design, Tech | 6 Comments

So I return with another update about the LoDGameFramework. I know I said I’d have the physics part done by now, but it isn’t… sorrz. It’s really close though. And that’s what I’m here to show an example of. Above is an example of a collision detector using Separating Axis Theorem, along with a resolution algorithm devised from the same algorithm used in FOAM (credit given in source). To show the point you can easily swap in and out different algorithms. There are 3 other algorithms for collision resolution and 2 other for collision detection.

Furthermore, though you can’t visually tell, the collision meshes used for all the objects vary here. The red shapes use my IGeometricShape interface describing circles, ellipses, and polygons. Where as the black blocks are described by regular Rectangle objects in flash. You can mix and match all of these collision meshes at the same time. I still want to get the Bitmap ones running, but I have some other work to do as well.

If you want to play with this example below, just click it with your mouse and 10 new geometric shapes are generated and set to collide against each other.

DIRECT LINK

You can still download the library in its current pre-alpha state in the link bar. Or here!

Tags: , , ,