It started back in the sixth grade. I really wanted to get into programming and creating websites. I would find free web hosts. I had a site up, a few days later my site disappeared. All It had been embedded games. So I went to the main hosting site and it was gone also! Then I found another free host which had a nice web based editor. I made the site I had on the other host, again from scratch. I didn’t know about backing up back then. So once I had the site created again, the next day at school I told some classmates about it. It was a sub domain. I told them the web address. Some of them mistyped the address. It took them to an adult site, I didn’t even know about it. So I never really liked free hosting, and I don’t think I will. Sub domains are really ugly and not full control over my site is also not a good thing.

I wanted to learn more about coding, the free website builders seemed like it lacked features. So I thought maybe if I learn how to code, I could do more, and it was true. Html seemed very basic and a good starting point. I went to the library and got a few html books. I flipped around and got to the forms section then I wanted to create a version of Office for the web. I was going to use a text area, I didn’t know about rich text JavaScript editors for the document area. Also this was before I seen web based office programs.

So I went ahead and created a mail page, to-do page and note page in the website editor by clicking html view. The mail page had a to, subject and body. The to-do page had 15 minute time slots with a text box for each time. The note page had a name and a body, each had a reset and submit button. I could type into it, reset the data even could print it out with just one button. The problem was, you could not save. I seen other sites that allowed you to login, save notes and send email, like Yahoo. I wanted to have my pages be interactive and dynamic. I had no clue what static and dynamic pages meant back then.

I had no clue how to find what I wanted. I knew about search engines but I had no clue what to type in. I think I might of put in something like “make web pages work”, but had no luck. I also didn’t use chat rooms or forums, i didn’t even know they existed. Since I could never find what I wanted, I gave up on building dynamic sites.

I got into RuneScape. In the summer time, I would spend all night mining and fishing on it. So for a time, my focused was not on programming. I got into using Paltalk chat rooms and I met other people interested in computers, learnt about how to style tables and css in a programming chat room. So that helped with making my pages look good, but they weren’t really functional.

My grandpa said there going to show this virtual world on the news, and I ran upstairs to see it after the commercial break. It was this really cool thing called Second Life. This woman was showing her house, talking about how you can create stuff and make real money. That really interested me. I signed up but had a problem signing up, I used my grandpa cell phone to verify your number back when you had to do this still, and never got the text. I don’t think his phone even allowed texts. I called Linden Labs, the makers of Second Life and they activated it for me! YAY! I was so excited. Then I logged in and it was slow. The radio didn’t want to play, it took forever to move. I knew I needed some money, so around the welcome area I begged for people to hire me to build for them, I was 0 days old on it and never messed with the build tools. No one hired me. Second Life really sucked on dial-up, I didn’t use it much.

A few months later we switched to cable internet. I then got back into Second Life. I forgot my login information. I called up Linden Labs, gave them my email, they gave me my avatar name, asked me questions to verify my account. The guy said he reset my password to “changeme” and to login to the website and change it. I did, and it worked! This was back when Linden Labs had really great support in 2006, now days they are like “submit a ticket” when you call them up! But second life was so fun on high speed internet! Another thing I didn’t know is, I was on the teen grid version of it, now its just one version. But back then they have an adult and teen version of it. I did make some friends and had fun with them! But lots of people were immature. I got into Skype since people in Second Life used Skype before voice chat, but when Second Life got voice chat built into the client, I was so happy since I prefer voice when chatting!

In Second Life I wanted to create gadgets like you have in the real world like vending machines, computers, PDAs. So I would build the interfaces and come up with ideas for them. Then beg a scriptor to script for free or give them like 50%. This never worked out. So I started to learn. I would use the LSL Wiki and LSL Portal. So my first project was to build a bar bot. A robot to sell drinks.  It was this cute 9 prim object and it would let you pay L$ to it for a Coke, Fruit Punch, Ice Cream or Pizza, each item had its own price in the pay menu. It was really messy code and was not indented. Used examples on the wiki also, so some of it was just copy and paste and had to ask in the scripting group. It wasn’t prefect but it did help me understand some of the scripting logic but it was a neat first project. If I was going redo this today, I would have used a llDialog to select the item.

I later met up with Jeroen, a dutch guy which I always pronounces his name wrong. I forget how I met him, but I think it was in a sandbox or a group chat. He knew LSL which stands for Linden Scripting language. He would teach me things like chat, link messages, to use if, if else, if else and else. I always used just if, if, if, if, if, else before. He also got me to focus on making the source code look pretty after just going off on a rant about how I didn’t indent. Plus he taught me about LSL email and more!

I really liked LSL, but then I seen shopping type websites, a inworld ad network and other stuff you could control from the web. I also seen reading the forums that other people used PHP and MySQL which LSL can use http requests to talk to! I didn’t really know much about PHP so I started reading into it.

I needed a host with PHP and MySQL. I found this cheap hosting company and started using them. I first learnt how to use PHP includes. That Paltalk chat room with the admin of the room teaching people HTML, also knew some PHP! He showed me PHP includes. They were AWESOME! Before I knew about them, I would come up with a design and then copy it for each page. So if I changed the menu, I would have 2 or more files to edit! But with PHP, I could change all the files to .php and create a menu.php file and copy my menu into it. Then I could just write a PHP block.

 [code lang="php"]
include 'menu.php';
[/code]

So it wasn’t like I would have to learn and code my pages in a special way. I could still write HTML, but make parts use PHP to do more! I then made the header and footer use it also. I still had a hard time with PHP didn’t understand it all, so went back to Second Life.

So I would mess around trying to understand LSL and get better at it. I did. I wanted to build a heads up display like a phone, so I built it. This project needed a backend, I was going to allow people to save wallpaper, ringtone settings outside of Second Life, so when I issued an update it could have the same settings as the device they had before. When you update in Second Life, you give them a new object, can’t really update the software in the object. I did experiments with doing that, and got it working, but the issue was you had to be in the same simulator for it to work, and had to drop a box on the ground.  So wasn’t that user friendly, so I went with building an off world datastore.

I found some text tutorials on PHP. I also found a podcast on iTunes U that really helped me also. It was Server-Side programming. It’s an audio podcast. It was at East Tennessee State University and taught by Dr. Tony Pittarese. He updates the podcast course so often, so now its the spring 2010 class on it. I listened to his class in about 2009. it really helped me understand basic concepts. Like he explained Post vs. Get. He compared it to sending mail via the post office. A get is a postcard, anyone can read it. A post is like sending mail with a envelope. This is a really great podcast, and I would recommend listening to it. He tries to make things very understandable and seems like a really great guy! You can check out his class on iTunes, oh and did I tell you its free? It’s not going to give you a degree or anything but if you just want to learn, its great for that. As i got really deep into PHP, i started comparing it to LSL. Like flow control is very similar to php.

The system would use multiple scripts for the phone to communicate with. One PHP script created the account, it would just check if this user has an account, if they didn’t it would create one, else it would say they had one. The phone would connect to this PHP script each time the user got the object out of inventory or logged in. It would have a settings dialog and allow you to edit settings, so also when the device booted up, I did more http requests to grab more data. Some data had colons to separated it to have less requests. Also it would send the Universally unique identifier of the device, each time it gets out of inventory gives it another one. So it would send the UUID to the server. The update server would get a new UUID if it got returned by accident or something. So the device would also check for updates on start and with a button. It would get the UUID of the update server, which if anything did happen when it went back into inventory, I could put it out and it would update the UUID for it in the database.

These devices would only use http to store or get data. Never talked to each other over http. So it would be Your Device -> Server and Server -> Device. It was never Your Device <- Server -> Another device. The way the call process worked was, you would enter in the number, your number would show in your account information. When you enter the number of another user, it would send that number to the PHP server, it would grab the device UUID and the owner UUID of the other device. Once your device grabbed the information from the server, the rest of the communication was Peer-to-peer, meaning all done inworld. your device would check if the owner was online, if they were, it would send an email to start a call.

Email was the device [email protected] plus each email script would delay for 20 seconds after sending an email. So the device had 7 node scripts, it would use link messages so the script would send a message to the email nodes. If you send to many messages to quick, the chat would delay. The message would be queued, so it would be sent, just not right away. So it was kinda like a gun. One script would fire, next script would fire, next script would fire, etc and then each would “reload” after 20 seconds.

If that device didn’t respond to the call request it would just do nothing after it said “Ringing…” in chat. by not responding, I mean not clicking on the dialog or the device is not at that UUID, say the person is online but had the device in inventory. The UUID could be old. Just because they were online, didn’t mean they had the device since the online check was done at the data server. The other device would get a message and get a dialog and a ringing sound, if they picked up, it would allow them to chat across grid using /2 message in chat. It would mark an integer named inCall with 1, so it would not connect to another call if someone had a dialog from a while back and accepted. The system was not perfect but it worked, but I was one of my most advance scripts in Second Life I think. It never did sell as people was like “Why not just use IM, its free!” so now the network is gone for it, not sure if I even have the backend scripts anymore.

But looking back at it now, this device was not as secure and the server was not secure. If someone found the URL for the server, and knew the post/gets they could have SQL injected. Then I moved on to another project. Second Life recently added in a LSL HTTP Server. LSL already allowed you to have scripts connect to real world servers, but real world servers could only talk to objects with email, XML-RPC or even having an object with a timer polling the PHP script. XML-RPC is very unreliable, and even the official Wiki says it. Email works, but had delays which you can over come with some work, and after sending so many emails on shared hosts, you can’t send anymore for a time limit or get flagged as spam. So this HTTP server method was way better but it did have its limits.

Each time the object moves to another sim, restarts the sim or takes the object out of inventory(similar to how email works) it gets a new URL, but there is an event that triggers if it does happen, so you can account for that in your program. For example tell the web server that object id 3920 changed its url. Also each avatar had its own limit of Http-in urls it could have if attached, so did each piece of land. But I don’t think you would run into this limit. So it was great. I messed around with it. I ran into a roadblock. Since each object with a url, the web server was running on the sim internal web server on port 12043. My shared web hosting was not connecting. I called up support, and they said you can only use port 80 and 443. It was time to switch hosts. I also wanted to get into OpenSim, which is an open source virtual world platform and it uses the same client as Second Life. So I switched to a VPS with Linode and I learnt how to set up a Linux server, and spent a week or two messing around with it, reinstalling the OS till I got it right.

Then I messed around with running my own grid which failed. Then I moved on having a sim on OS grid, which was fun. I kinda then stopped using OpenSim for a while. Sometimes I’ll go check it out ever so often to see how far it came. But on my VPS, it allowed CURL to talk to a HTTP-IN server in Second Life! I started building a shopping site for the teen grid since it didn’t have one, and had a working prototype. This one used mysql_real_escape_string() and did validation. It worked great, but I never polished it or released it. Since it used L$ which are worth real money so I’m not sure if it could be hacked which could have became a big issue.

I then went on to building a social network and cloud computing platform for the real world and that is my current project. It’s not really ready to show the public and still needs lots of work. part of the project uses JavaScript which I use the jQuery library. I’m still learning jQuery and getting better at CSS. I think programming is one of the topics you can never stop learning about as it’s always changing and getting more interesting. Like how HTML5 has a whole new set of APIs to use.

I still go on Second Life, but not as much as i used to. I also like to keep real life and second life separate. I’m not excited about Second Life as much as I used to. I’m now a senior in High School, and will graduate when I’m 19. I have an idea of what I want to do after high school, but not 100% sure. This is more of a story, then a how to guide but I wanted to tell my story.

Some people call Second Life a game and others say it’s a platform. I see it more as a platform as a developer, my sister would see it more as a game. Second Life really got me interested in programming and will help with my career. So I think this shows that “games” can be educational and have real value.