shadwickman 159 Posting Pro in Training

I finally got it. The fib code is a bit off anyways, but to fix the loop, I just needed to PUSH ECX right before my _printf block and POP it back after; It was getting messed with by the C function. Phew :)

shadwickman 159 Posting Pro in Training

Nope, no luck. It still loops infinitely...

shadwickman 159 Posting Pro in Training

please i need it

Way to show tremendous effort on your part. Not only did you not attempt it yourself, you didn't even specify the architecture (can I assume x86?) or the compiler (NASM? MASM? etc). I can't really write too much code until I know those details.

Don't try asking for help until you try this for yourself and then I can try to help you with anything that's wrong. Meanwhile, you can take a look at this educational post you obviously missed.

shadwickman 159 Posting Pro in Training

I can answer 1 and 3 for you right now.

1. As far as I know, Assembly IS machine language. It's the actual instructions that get passed to the CPU. Hence having to manually keep track of a lot of things that high-level languages do for you automatically.

3. Assembly isn't OS dependent. However, compiling it to runnable files can be dependent on the OS (like a .exe file for Windows). The source is unchanged by the OS it's run on, but what it IS dependent on is the architecture of the CPU. The most common is the 80x86 architecture (found in most desktops), but there are others like MIPS. This means that different architectures have different instruction sets, etc.
The other thing the source does actually depend on is the compiler too. Like, NASM and MASM use slightly different syntaxes in the ASM source code.
And I don't know anything about HLA

shadwickman 159 Posting Pro in Training

I started out a few days ago, and one of the first things I did was follow Narue's guide (a member here on DaniWeb). Here's the PDF of it:
http://www.daniweb.com/forums/attachment.php?attachmentid=1765&d=1142611276

It uses NASM and GCC (for Windows, use can use the MinGW binaries for that).

Narue's little guide was a good starting point for me for Assembly, and it definitely helped a lot with getting the basics down.

P.S. once you download NASM and install MinGW, an easy way to make the commands 'gcc' and 'nasm' function in the DOS cmd prompt as sort of global commands, you can add the folders containing 'nasm.exe' and 'gcc.exe' into your Windows PATH variable.

shadwickman 159 Posting Pro in Training

Wasn't 3.0 final released a few months ago? But I still agree with using 2.6 or 2.5 for someone learning.

Oh, I might be wrong. I haven't check the Python.org site in a long time, but I wasn't sure if they actually released more than the beta yet. I stand corrected :P

shadwickman 159 Posting Pro in Training

Yep, as I was saying, Python 3.0 can be quite different from 2.6 and below, so I would use 2.6 for now (I do too). There are WAY more modules still not compatible with 3.0, and it isn't a full release yet either. It's much easier to stick with Python 2.6 to try learning it from the ground up.

shadwickman 159 Posting Pro in Training

Ok sounds good. I would go even further with the Warrior and make a base Actor class, for all characters, and subclass that. Like this:

class Actor(object):
    def __init( self, name, age ):
        self.attributes = {
            "name": name,
            "age":  age
        }
        # etc...
    

class Warrior(Actor):
    def __init__( self, name, age, strength, stamina, weapon, armour ):
        Actor.__init__( self, name, age )
        for att in ['strength', 'stamina', 'weapon', 'armour']:
            self.attributes[att] = eval(att)
        # etc...

The benefits will be much more apparent as it gets more complicated.
I sent you a PM also, if you wanna check that, as we should stop just talking over the thread with more needless posts.

shadwickman 159 Posting Pro in Training

Have you planned out anything for the game yet? As in storyline, characters, aspects of gameplay like stats, etc?

shadwickman 159 Posting Pro in Training

I don't have the time to look at that massive section of code you posted, but in my above example, try changing that

event.location = item[3]

to

if len(item) >= 3:
    event.where = item[3]
else:
    event.where = "undefined location"

and tell me if that makes a difference in Google Calender!

shadwickman 159 Posting Pro in Training

Yay! I've been wanting to do this for a while, but never got around to completing this sort of thing on my own :)
I'd enjoy working on a project like this (as long as its in Python, no Java or C++ please :P)

P.S. There is a Game Development forum :P but it's ok

shadwickman 159 Posting Pro in Training

Ah, are you using Python3.0 or 2.6?
In 2.6, the above would be acceptable, but 3.0 does some major overhauls on the grammar, including changing the above, so it would need to be

print( "Hello Monty Python!" )

I would suggest downloading Python 2.6 and using that to learn instead, as 3.0 is quite new, still in its beta form, and the majority of anything you find through Google or elsewhere will be directed at Python 2.6 or below.

shadwickman 159 Posting Pro in Training

PLEASE use code tags; re-edit your above post. As you can see, your indentation gets lost without them, and it's essential for Python.

Shouldn't

if h <= 0:
    print "Can't work less than 1 hour a week!"

be changed to

if h < 1:
    print "Can't work less than 1 hour a week!"

Tell me if that changes your error message for less than 1 hour a week.

shadwickman 159 Posting Pro in Training

I haven't fully confirmed this, but it would involve a change to this section:

# For each item, create a CalendarEvent object
        for item in input_csv:
            hour, minute = item[2].split(':')

            event = CalendarEvent()

            event.interval_from_start = int(item[0])
            event.description = item[1]
            event.hour = int(hour)
            event.minute = int(minute)

            event_list.append(event)

You could add other headers by writing something like the following into that block of code, after event.minute = int(minute) . Like this:

event.location = item[3]

and change the CSV file to have an extra value at the end of the line, so it looks like this:

"-2","Send out email","12:00","home"

In the above case, I used index 3 (indices start on zero) as the location header of the event. This is why I used item[3] in the above Python. So now this event has the location set to 'home'. I'm not sure about all the Python variables used for the various headers, but I'm guessing they follow the format of the header with spaces turned to underscores, and in all lower-case letters. I'm guessing here, but the header 'All Day Event' probably is 'all_day_event' in python.
The CSV file seems to be organized at your own whim (as far as I could find), so keep track of the order of the headers on the line, so in Python, you can call event.HEADER = item[INDEX] for in this same code block as above, where HEADER is the Python variable for a header, and INDEX is the location of it on the …

shadwickman 159 Posting Pro in Training

Well, int(arabic) should return the numeric value of the str arabic. If that's any help.

shadwickman 159 Posting Pro in Training

Hello! I just started trying to get the grasp of Assembly a few days ago, so I decided to write a program to print the Fibonacci numbers up to the 25th one. I'm using NASM, and it's for the x86 processor. I came up with this code, but it'll loop infinitely, not just 25 times (which I set ECX to). It's probably a simple mistake, but thank you to anyone who looks through it for me!

SECTION .DATA
    fmt: DB '%d',10,0
    
SECTION .TEXT
    GLOBAL  _main
    EXTERN  _printf
_main:
    MOV     EBX,1
    MOV     EAX,0
    MOV     ECX,25     ;set loop counter to 25, right?
fib:
    PUSH    EBX
    ADD     EBX,EAX
    POP     EAX
    
    PUSH    EAX
    PUSH    fmt
    CALL    _printf
    ADD     ESP,8
    LOOP    fib       ;maybe put in the wrong spot?
end:
    MOV     EAX,0
    RET

EDIT: I just realized that _printf is probably messing with EAX, but how can I save it before and restore it after? A PUSH and POP before and after the _printf block still kept the infinite loop and messed with the signs on the number? I think...

shadwickman 159 Posting Pro in Training

To start, '==' is not how you assign a value to a variable. Use '=' for that, as '==' checks for equality. Change those first few lines that have that (the ones assigning the letter to decimal values). And, you can't assign a int value to a str value. You need to use a variable, like this:

valueI = 1
valueV = 5

A better way of doing this is using a dictionary:

mydict = { 'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000 }
# so, mydict['I'] contains the value of 1, and so forth.

Also, 'upper()' is built-in to the str object, so you need to call it by saying

roman = raw_input("Enter the roman numeral to convert to arabic: ").upper()

Try making those changes and then proceeding with the code. Good luck!

shadwickman 159 Posting Pro in Training

And? Sorry if it seems obvious, but can you at least put a bit of depth into that response?
Running your script yields something like:

376.87  #what I input.
12345.9876376  #int_string afterwards

So what exactly do you mean by 'a lexer to read decimal numbers'? As in floats (numbers with a decimal point), or as in numbers with a base of 10 (as opposed to hex or binary numbers)?

shadwickman 159 Posting Pro in Training

Please use CODE tags! It's pretty much essential for Python so I can tell if your indentation is off. That being said, I put your code in tags for you:

myinput = raw_input() # Grab raw keyboard input
int_string = "12345.9876"

for c in myinput :
    if c.isdigit (): # state : digit
        int_string += c
    else: # state : accept
        break

Refrain from using 'input' as a variable name as it's already the name of a Python function; I changed 'input' to 'myinput'.

What exactly is it you need to do to? Sorry, I'm just a little confused with your description about state-transition diagrams and such. Why are you appending the digit characters from the user input into the int_string?
I'm just not fully sure what it is you're wanting to accomplish. The above code should work fine, but to what end?

shadwickman 159 Posting Pro in Training

Wow! That's embarrassing! My mistake, I accidentally copied out the 'def CreateWarrior' rather than changing it to 'class' :$
Sorry about that confusion, I'll proof-read my posts a second time from now on :P
P.S. I can't edit my above post now, so it's gonna stay the way it is for now...

shadwickman 159 Posting Pro in Training

I started reading through an article on gamedev about creating a game engine from scratch; a basic game engine, written in C++ and using SDL for the graphics.
It's a start, and I think after being able to successfully understand and create one like in this article, you can attempt to move on to something much more complicated, like this MMO RTS engine you want to make.
Of course, like PirateTUX explained, it'll be very complicated, and a skilled and highly-organized team of programmers can still take a couple years or so to pull it off. It really requires dedication.

Here's the article on 'Enginuity' (it's 5 parts) that you can give a read-through and follow along to.
http://www.gamedev.net/reference/programming/features/enginuity1/

Best of luck!

shadwickman 159 Posting Pro in Training

Everyone else is right. Please show some effort of your own; attempt the problem and then post the code you have so far. We can try to point out hints from there.

P.S. Remember to use CODE tags. We need to see your indentation.

shadwickman 159 Posting Pro in Training

Also, this is getting a lot more complicated, but I'm a huge fan of re-usability in code, and I - way back when - created a basis for a text adventure game, using external files for each 'room', organized in sub-directories. They were written up a certain way with special syntax so that they could be read into python and parsed. Making it from scratch was a good experiment, but once I got the system going, I could easily add a new room and it's options/actions and have it tie-in with other rooms very easily.
The room files were just written up in a form I decided on in order to make it usable, but fairly comprehensive, so that my main code was never cluttered with any blocks of 'print' statements, just the more important stuff :P

shadwickman 159 Posting Pro in Training

I'd do this:

def CreateWarrior(name):
    def __init__( self ):
        self.attributes = {
            #ID
            "name": name,
            "age": 18,
            #Developed
            "strength": 0,
            ##Wrestling
            "reflexes": 0,
            "speed": 0,
            "intelligence": 0,
            "discipline": 0,
            "physcondition": 0,
            #Body
            "fat": 0,
            "muscle": 0,
            "hunger": 0,
            "sleepiness": 0,
            "health": 0,
            "damage": 0,
            #Psychological
            "mood": 0, # 0 = ultrahappy, 1 = happy, 2 = normal, 3 = mad, 4 = ultramad
            "moral": 0
        }

The __init__ function is just what gets called when you create an instance of that class. And 'self' is a variable referring to the class instance, so that if you assign variables to self (self.attributes, etc), then they can be accessed from other functions within that class.

Also, inheritance is a wonderful thing, and creating one superclass for things and subclassing it for more specific things can prove very useful.

shadwickman 159 Posting Pro in Training

Nothing huge, but

print "You notice that the door is locked, so you should"
print " probably find a key."

should have the space on the end of the first line, just to keep it consistent with the lines above it.

Also, "did'nt" and "definitley" are spelling errors.

Finally, I wouldn't use input() for getting the user's choice. It can be exploited to have python commands run through it (it parses the input[?]). Instead, use raw_input() in a separate function and test for whether an integer had been typed, and if not, loop until True, then return that number. Here's an example:

def getNumber():
    while True:
        n = raw_input("Enter a number: ")
        try:
            n = int(n)
            break
        except:
            print 'Not a number.'
    return n

The above is what I came up with off the top of my head (untested), but it should point you in the right direction I hope.

One last suggestion is to take full advantage of the object-oriented part of Python. Such as a base class for Items, and classes for Weapons, Armour, Miscellaneous, etc that inherit from the Item class. Also, make an Actor base class, with NPC and Player subclassing it, etc. Good luck!

shadwickman 159 Posting Pro in Training

Yeah Shadwickman is right. Anything with TK you have to import it first before it will work. Good Luck

Or any other modules (or parts of modules) you want to use, like os, sys, time, threading, wx, etc. :P

shadwickman 159 Posting Pro in Training

So, your explanation is really difficult to follow, but I think you mean something about raising an error if it finds a blank tag in the Mp3tag object? Like an instance of it having a blank 'title' string? If that's the case then you could just write a function to check each of those tags and then if it detects one as blank, execute the appropriate code you want for dealing with it.
Sorry if I'm way off with what you're actually wanting to do. I've reread your description/explanation of it, but I'm having trouble understanding precisely what you want; it seems a bit vague to me. Sorry if I couldn't be of help.

shadwickman 159 Posting Pro in Training

Yes, Arrorn, but she said she was at a basic level, and it sounds like this program isn't really going to need much future expansion. It's a simple probability program consisting of very few lines. And even if it did, rewriting it requires pretty much no time to do. Plus, I know your code isn't very advanced either, but at a basic level, most people have trouble handling such large blocks of code together.
I hope the new program works for you Stephanie953! You should try to work your way through Arrorn's code though, it's a good resource too, and a great example of another step up.

shadwickman 159 Posting Pro in Training

I guess if you know how many pixels wide the image is, you could just figure out what indices correspond to the cut-off for each row in the list. Like if an image was 10 pixels wide, then items 0 - 9 in the list would correspond to the first row, and 10 - 19 to the second, etc. So item 17 would have the coordinates of 8th from the left, and in the second row? I think haha. Sorry if that doesn't make much sense. I tried :P

shadwickman 159 Posting Pro in Training

What exactly do you want returned by the __len__ function? The length of the genre string, the title string, album string, etc? Or do you want it to return something to do with some of those strings being blank?

Also, as far as I know, len() is for strings, but I could be off about that. Like len('Hello World') returns 11.

P.S. you should restructure your Mp3tag class I think. Just like:

class Mp3tag:
    def __init__( self ):
        self.error = ""
        self.date = ""
        self.trackNumber = ""
        self.artist = ""
        self.title = ""
        self.album = ""
        self.genre = ""
        self.numFiles = ""

Whenever you initialize a Mp3tag object, the function __init__ gets called. Self just refers to the class itself, so in other functions within the class, you can access the variable title by writing self.title .

shadwickman 159 Posting Pro in Training

Why do you have this section:

try:
    name= int(raw_input("Enter a name"))
except:

The except junction needs an indented block after it for that respective action. Such as

try:
    name= int(raw_input("Enter a name"))
except:
    print 'There was an error'

And even then, I'm confused why you're trying to cast the raw_input for a name as an integer...

And also, shouldn't

NAMES_list=cPickle.load(NAMES.file)

be

NAMES_list=cPickle.load(NAMES_file)  #underscore, not period
shadwickman 159 Posting Pro in Training

Um, I think you missed the part about code tags. You need to use them in order to preserve indentation! I can't be bothered to help until you've done that.

shadwickman 159 Posting Pro in Training

Can I see the rest of your code?
I don't use Tk (I find wxPython to be much better), but what happens if you replace that line with

tk.FileDialog.askopenfilename()

Of course, that would assume tk has a class named FileDialog and that you use Tkinter like

import tk

Hope that helped with something.

shadwickman 159 Posting Pro in Training

EDIT: The below isn't too helpful as vegaseat posted a better (and full) verison.

What do you mean by

d={"flight":T34712, From:ABERDEEN, scheduled 0800, remark landed}

The other keys need to be enclosed in quotes to, so that

d['flight'] = 'T34712'
d['from'] = 'ABERDEEN'
#etc...

The best solution I think is paulthom12345's suggestion. Although, I'm still confused about the set-up you seem to want. There's a better way to organize it, such as one list with each index a separate flight, and each of those indices holding a dict with the keys for 'flight', 'from', 'scheduled', 'remark', etc. Like:

flights = [
    { 'flight': 'T34712', 'from': 'ABERDEEN', 'scheduled': 0800, 'remark': 'LANDED 08:00 ' },
    { 'flight': 'BE171', 'from': 'SOUTHAMPTON', 'scheduled': 0820, 'remark': 'LANDED 08:07 ' }
]

OR

flights = {
    'T34712': { 'from': 'ABERDEEN', 'scheduled': 0800, 'remark': 'LANDED 08:00 ' },
    'BE171': { 'from': 'SOUTHAMPTON', 'scheduled': 0820, 'remark': 'LANDED 08:07 ' }
]

using the flight number as a key in the dict, and it's value as a dict with the other info.

shadwickman 159 Posting Pro in Training

Ah, that was perfect. Thanks so much for clarifying it!

shadwickman 159 Posting Pro in Training

Wow, I hadn't seen that functionality before. Thanks so much, it's definitely going to be a big help!

Just out of curiosity, what about something like:

[ print "No, it's false", doTrueFunction() ][ booleanValue ]

where the two options aren't similar. Is there any special syntax for that?

shadwickman 159 Posting Pro in Training

Hello, I've loved Python ever since I picked it up a couple years ago, but I have a question about the proper way to do something. There's a way of condensing an if/else conditional that has 2 options (True, False), for simple things.
Assume that playerWins is a boolean:

if playerWins:
    print 'You win!'
else:
    print 'You lose...'

Now, this can also be executed just as easily by writing:

[ print 'You lose...', print 'You win!' ][ playerWins ]

Which way is the proper way? I'm assuming that the first one is due to it being slightly more readable (a nice goal of Python), but if I'm looking to condense simple things in my code like this, is it wrong to use the second way? And what about speed? Is there any difference in efficiency between these two?

I'm self-taught so I never had anyone explicitly tell me these fine details of Python, but if anyone knows the 'standard' for this sort of thing, can you let me know? Thanks!

shadwickman 159 Posting Pro in Training

I don't know about awk, but I what would happen if you changed

ot, et = ex.communicate('''abc
def
ghi
jkl
mno''')

to

ot, et = ex.communicate('abc\ndef\nghi\njkl\nmno')

It just didn't seem to like something about the triple-quoted string. But of course I could be completely off seeing as I don't know anything about awk, but I thought I could suggest that one thing :P
Tell me if that change fixes the errors!

shadwickman 159 Posting Pro in Training

I would say you could take the input string, and split it at each whitespace into a list. Index 0 would be the function name, and each index after would be the arguments. Like:

cmdlist = usercmd.split(' ')  # split at each space

This would make a list like:

[ 'test', '1', '2', '3' ]

Then you just need to call the function and pass the indices 1 and above. If you want more details, just ask but I hope this got you started in a new direction!

crumpet commented: thanks! put me on the right track straight away +1
shadwickman 159 Posting Pro in Training

There are multiple issues with your code. The first one to catch my attention was

def area (math.sqrt (s(s-a)(s-b)(s-c))

Why did you say 'def'? That defines a function, not any other data type. Not only that, but you didn't even close the final bracket pair, you left it hanging unclosed. Lastly (still with this one line), you need to multiply 's' and '(s-a)(s-b)(s-c)', but that requires an asterisk * between them, like s*(s-a)*(s-b)*(s-c) . Putting the 's' right against the first parenthesis works in mathematics, but in python, putting parenthesis right after a variable calls the function that variable points to, and 's' is not a function, it's a float. So here's how that one line should read as:


Secondly, the last line is wrong.

print area

This will cause an error. Declaring 'area' inside of the function 'heron' means that 'area' is within that function's scope, and can't be accessed from outside of the function. If you want to get the value of area from the function, then return that value, and store it to a variable when you make the call to the 'heron' function.

Finally, you never actually made a call to the 'heron' function. You need to do this and pass the parameters (s1, s2, s3), and store the value it returns (the area). So the line

print area

becomes

area = heron( s1, s2, s3 )

Here's what the final code should look like:

s1 = …
shadwickman 159 Posting Pro in Training

The variable timesflipped used for the while loop is undefined before the comparison while timesflipped < 100: . This script should just return a NameError and not run.
Here's a fixed version:

import random

coin_heads, coin_tails, times_flipped = 0, 0, 0

timesflipped = 0  # <-- here's what I added.
while timesflipped < 100:
	coin_flips = random.randrange( 2 )
	if coin_flips == 0:
		coin_heads += 1
	else:
		coin_tails += 1
	timesflipped += 1
	

print "Out of 100 flips, " + str(coin_heads) + " were heads and " + str(coin_tails) + " were tails."

The above is the same, except that I declared timesflipped = 0 right before evaluating the while loop. Hope this helped!

vegaseat commented: thanks for spending your time on this! +11
shadwickman 159 Posting Pro in Training

Well, I would love to help you, but your post contains no indentation at all. PLEASE post your code in CODE tags! I can't help you if any code you post doesn't contain your indentation. So, re-post your code (or edit the above, preferably) and wrap it in [CODE] tags! Thank you.

shadwickman 159 Posting Pro in Training

Thanks woooee, I didn't really think about floating point inputs for the first program, just plain old integer input.

shadwickman 159 Posting Pro in Training

Now that is a great find. Thanks for sharing, I loved it!

shadwickman 159 Posting Pro in Training

Wrapping your code in the BB code tags is usually essential (keeps indentation), so remember to do it next time.

First Program
For the first program, raw_input returns a string, therefore when comparing the values, you're comparing something like "3" + "5" < "9" (i.e. "35" < "9"). This is why it's returning False each time. You need to take the inputs and turn them into integers, so the result would be 3 + 5 < 9 . To do this, you can do:

a = int( raw_input("Length of first side?") )
# example:   raw_input returns "9", then int() turns it into 9, and then it's stored in a

Plus, print isTriangle won't work, it needs to be print isTriangle( a, b, c ) .
And, finally, you can condense your function by writing:

def isTriangle(a, b, c):
	if ( a + b < c ) or ( a + c < b ) or ( b + c < a ):
		return 0
	else:
		return 1

(As a side note, importing the math module in this program is useless, as no functions or constants from it are being used.)

Second Program
The indentation has been lost due to not using CODE tags. As you (should) know, indentation in Python is essential. One thing I do notice that is odd is the line with print halfPerimiter . All this would end up doing is printing the object (pointer/address? I'm not sure of the …

shadwickman 159 Posting Pro in Training

Why not keep a list of lists for responses corresponding to each user answer? Such as:

responses = [
    ["Q1, A", "Q1, B", "Q1, C" ],
    ["Q2, A", "Q2, B", "Q2, C" ],
    ["Q3, A", "Q3, B", "Q3, C" ]
]

and if you collect the user input as an integer, and you keep track of the number of the question you're asking (0, 1, 2, etc.) you can just call up the appropriate response to print by saying:

print responses[questionNumber][userAnswer]

Collecting the user input could use a function that returns an integer from 0 to 2 (inclusive) depending on if the user gave A, B, or C as the answer. Here's an example:

def getAnswer():
    while 1:
        ans = raw_input( "Enter answer:  " ).upper()
        if ans == "A": return 0
        elif ans == "B": return 1
        elif ans == "C": return 2

answer = getAnswer()  # equals 0, 1, or 2 corresponding to A, B, C

There are better ways of writing this, but the above is a very basic and easy to understand form of it. The above does account for A, B or C not being given at all, and loops until it receives one of the letters.

The above isn't much, but it should be a good start on this sort of project. This sounds exactly like a homework assignment, so as such, I won't be giving any more in-depth tips, but I'll try to help a bit more if needed.

sneekula commented: I like your style +6
shadwickman 159 Posting Pro in Training

please edit your first post and place your code in CODE=cpp tags.

shadwickman 159 Posting Pro in Training

You can't use:

float theta, float cotheta, float sitheta, float distance, float velocity, float time, float height;

Instead, just put float once before the whole line. Like cikara21 said:

float theta, /*float*/ cotheta, /*float*/ sitheta, /*float*/ distance, /*float*/ velocity, /*float*/ time,  /*float*/ height;

Ah! Beaten to it! :P
Now you can mark this thread as solved!

shadwickman 159 Posting Pro in Training

This new question you're asking should've been asked in a new thread. Regardless, as far as I know, the wx.MenuBar widget attaches to the top of the frame, and has no SetPosition() method. If there's any way to embed a frame within another frame, then it's feasible, but it might be easier to just write your own class similar to a MenuBar and implement that.

shadwickman 159 Posting Pro in Training

Ok great, sounds like everything's solved for me. Thanks everyone!