<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8153250334683800977</id><updated>2011-09-09T10:06:24.362-07:00</updated><category term='apache'/><category term='linux'/><category term='ludum dare'/><category term='mod_fcgid'/><category term='mocker'/><category term='jquery'/><category term='mod_fastcgi'/><category term='game development'/><category term='fastcgi'/><category term='ryan guthrie'/><category term='python'/><category term='php'/><category term='ryanguthrie.com'/><category term='perl'/><category term='server'/><category term='lamp'/><category term='catalyst'/><category term='ssh'/><category term='testing'/><category term='gd'/><category term='space exploration'/><category term='mod_perl'/><title type='text'>R.Guth Development News</title><subtitle type='html'>Site updates and general programming comments</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://rguth.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8153250334683800977/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://rguth.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Ryan G</name><uri>http://www.blogger.com/profile/13057267173033962130</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>7</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8153250334683800977.post-4890391796800922968</id><published>2010-12-12T06:18:00.000-08:00</published><updated>2010-12-12T06:23:17.088-08:00</updated><title type='text'>An Intro to 52 Weeks of Code</title><content type='html'>D.I.C is shorthand for DreamInCode.net, a large community forum of all types of programmers.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;I have been gone from D.I.C for a long time, but always thought 52 Weeks of Code was a great idea. I am now dedicating a chunk of time in order to go through each of the already posted weeks and post code to prototype a new idea with that technology. I will be working my way back from the current #37 and see how many I can get done before mid December.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;What is 52 Weeks of Code?&lt;/b&gt;&lt;/div&gt;&lt;div&gt;If you are from DIC you have no doubt seen the posts. Every week since the beginning of 2010, a new language/framework/technology has been posted with the challenge of creating something with it and posting that. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;All weeks are posted here: http://www.dreamincode.net/forums/forum/126-52-weeks-of-code/&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Since I am playing catchup when the year is already almost over, I will be trying to average 3-4 "weeks" per week from now on, working my way backwards.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Onto my first entry - #37 XML&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Completed Entries&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.dreamincode.net/forums/blog/1426/entry-3001-week-37-xml/"&gt;&lt;b&gt;#37 - XML[&lt;/b&gt;&lt;/a&gt; - Parsing Google Buzz with Javascript&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.dreamincode.net/forums/blog/1426/entry-3006-week-36-java3d-simple-examples/"&gt;&lt;b&gt;#36 - Java3D&lt;/b&gt;&lt;/a&gt; - Creating Simple 3D graphics with Java3D&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.dreamincode.net/forums/blog/1426/entry-3014-week-35-javascript-generating-and-drawing-a-procedural-maze/"&gt;&lt;b&gt;#35 - Javascript&lt;/b&gt;&lt;/a&gt; - Generating a Procedural Maze and Drawing it on Canvas&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;#34 - SQL (in progress)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;#33 - Groovy&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8153250334683800977-4890391796800922968?l=rguth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rguth.blogspot.com/feeds/4890391796800922968/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rguth.blogspot.com/2010/12/intro-to-52-weeks-of-code.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8153250334683800977/posts/default/4890391796800922968'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8153250334683800977/posts/default/4890391796800922968'/><link rel='alternate' type='text/html' href='http://rguth.blogspot.com/2010/12/intro-to-52-weeks-of-code.html' title='An Intro to 52 Weeks of Code'/><author><name>Ryan G</name><uri>http://www.blogger.com/profile/13057267173033962130</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8153250334683800977.post-4619402727215123983</id><published>2010-01-28T12:16:00.000-08:00</published><updated>2010-01-28T14:06:23.229-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='server'/><category scheme='http://www.blogger.com/atom/ns#' term='gd'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='lamp'/><category scheme='http://www.blogger.com/atom/ns#' term='ssh'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='ryan guthrie'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><category scheme='http://www.blogger.com/atom/ns#' term='apache'/><title type='text'>Setting up a LAMP server from scratch</title><content type='html'>In the past week I migrated my main LAMP based vps to another vps with a newer version of CentOS running cPanel, as well as got another CentOS server with absolutely nothing on it. (Didn't even have make)&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So the point of this is to make a listing of common programs and dependencies you need to set up  a basic functioning lamp stack. It is designed for CentOS but I imagine the only main difference between distro's is what package manager you use. It is also meant for people connecting remotely via ssh. If it is your own physical machine than you will be able to bootstrap yourself by using physical media.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Software assumptions:&lt;/b&gt; The distro has a package manager installed (yum for centos). The distro has sshd running (so you can connect). The networking is configured so it can resolve and access urls. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;First move: "yum install make" . I'll be building most things from source to make sure I have the latest version, so make is necessary. &lt;/div&gt;&lt;div&gt;Also, "yum install gcc" . I didn't have gcc on my vanilla vps.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;SSH and User Configuration:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Before you get too much further, it's also a good idea to add at least one other user beside root and to harden your ssh access. &lt;/div&gt;&lt;div&gt;Add a user: "adduser username -d /home/username" Create user 'username' and give them a directory in /home&lt;/div&gt;&lt;div&gt;Switch to the user in ssh "su username" and then "passwd" to set the password&lt;/div&gt;&lt;div&gt;Go back to root user "exit if you used su", and edit /etc/group . Find the line starting with "wheel" and at the end add ",username" - so it might look like :&lt;/div&gt;&lt;div&gt;"wheel::10:root,username"   - the number in the middle may vary, don't change that&lt;/div&gt;&lt;div&gt;This adds the username to the wheel group, which gives you permission to switch to root user from there.&lt;/div&gt;&lt;div&gt;Last you'll update ssh so it only accepts logins from your new user, to prevent people from bruteforce password guessing directly into root.&lt;/div&gt;&lt;div&gt;Edit /etc/ssh/sshd_config and look for a line starting with "DenyUsers" . If there isn't one, insert&lt;/div&gt;&lt;div&gt;"DenyUsers root" . Any username added to this line will be blocked from logging in directly through ssh.&lt;/div&gt;&lt;div&gt;Another good move is to change ssh from the default port of 22. At the top you can add&lt;/div&gt;&lt;div&gt;"Port 43545" for example to change to running on 43545. Most hack attempts are automated and look specifically at port 22 for ssh, so simply changing the port is a good way to prevent those types of attacks. &lt;/div&gt;&lt;div&gt;&lt;i&gt;Security Note:&lt;/i&gt; The best way to make a secure login is to use Authorized Keys and completely block out password logins, as well as only authorizing specific IP's.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Firewall Configuration&lt;/b&gt;&lt;/div&gt;&lt;div&gt;By default your firewall should be blocking everything except a few ports (like 22, which you used to connect). Whenever you setup a new service you'll need to add lines to your iptables firewall to allow connections. If you changed ssh ports previously, you'll need to allow the new ports access with (replace NEW_PORT with the correct port):&lt;/div&gt;&lt;div&gt;"iptables -I INPUT -p tcp --dport NEW_PORT -m state --state NEW,ESTABLISHED -j ACCEPT"&lt;/div&gt;&lt;div&gt;"iptables -I OUTPUT -p tcp --sport NEW_PORT -m state --state ESTABLISHED -j ACCEPT"&lt;/div&gt;&lt;div&gt;then to save your changes for future restarts&lt;/div&gt;&lt;div&gt;"service iptables save"&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;MySQL&lt;/b&gt;&lt;/div&gt;&lt;div&gt;MySQL is one of the first applications I install, because several programming languages need it to compile mysql support in. The easy way to install is&lt;/div&gt;&lt;div&gt;"yum install mysql mysql-server mysql-devel"&lt;/div&gt;&lt;div&gt;The more complicated way is to go to &lt;a href="http://dev.mysql.com/downloads/mysql/#downloads"&gt;The MySQL Download page&lt;/a&gt; and download generic linux packages or distro specific packages for MySQL Client, MySQL Development and MySQL Server (you'll need all 3). I used the rpm's because they were newer than what the yum repository had.&lt;/div&gt;&lt;div&gt;-Setting Root Password-&lt;/div&gt;&lt;div&gt;Once you install, make sure you stop mysql from running "/etc/init.d/mysql stop"&lt;/div&gt;&lt;div&gt;Start mysql without grant tables (used for authorization) "/usr/sbin/mysqld --skip-grant &amp;amp;"&lt;/div&gt;&lt;div&gt;Set the password with:&lt;/div&gt;&lt;div&gt;mysqladmin -u root password NEWPASSWORD&lt;/div&gt;&lt;div&gt;then restart mysql in normal mode "/etc/init.d/mysql restart"&lt;/div&gt;&lt;div&gt;This is a good time to set your mysql configuration how you want while it is not running anything&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Perl/Python&lt;/b&gt;&lt;/div&gt;&lt;div&gt;These both usually install easily. I usually put the source for anything I'm installing in /usr/local/src. You can get the latest copies at :&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.perl.org/get.html"&gt;http://www.perl.org/get.html&lt;/a&gt; &lt;/div&gt;&lt;div&gt;&lt;a href="http://www.python.org/download/"&gt;http://www.python.org/download/&lt;/a&gt;&lt;/div&gt;&lt;div&gt;For perl do "./Configure -de" to use the defaults, for python just "./configure" . &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Apache&lt;/b&gt;&lt;/div&gt;&lt;div&gt;I install apache first and then when I install php I use Apache's apxs to install it into apache.&lt;/div&gt;&lt;div&gt;&lt;a href="http://httpd.apache.org/download.cgi"&gt;http://httpd.apache.org/download.cgi&lt;/a&gt; , select the latest stable option and then Unix Source&lt;/div&gt;&lt;div&gt;There is nothing tricky here either, once you have the source it's configure,make,make install which should default to installing in /usr/local/apache2&lt;/div&gt;&lt;div&gt;For easy use, you can copy the script at &lt;a href="http://www.faqs.org/docs/securing/chap29sec247.html"&gt;http://www.faqs.org/docs/securing/chap29sec247.html&lt;/a&gt; to your /etc/init.d directory. You'll need to change the paths to point to /usr/local/apache2 however &lt;/div&gt;&lt;div&gt;Next you'll need to add the httpd service to chkconfig&lt;/div&gt;&lt;div&gt;"chkconfig --add httpd"&lt;/div&gt;&lt;div&gt;"chkconfig --level 2345 httpd on"&lt;/div&gt;&lt;div&gt;"chkconfig --list" to verify&lt;/div&gt;&lt;div&gt;This associates httpd with level 2,3,4 and 5 run levels, so it should run whenever the server is started in those modes (which is normally).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Mod_Perl&lt;/b&gt;&lt;/div&gt;&lt;div&gt;If you want the option to run Perl through Apache instead of as a cgi process, you'll want to install mod_perl.&lt;/div&gt;&lt;div&gt;&lt;a href="http://perl.apache.org/download/index.html"&gt;http://perl.apache.org/download/index.html&lt;/a&gt;&lt;/div&gt;&lt;div&gt;To install run "perl Makefile.PL MP_APXS=/usr/local/apache2/bin/apxs" (assuming that's where you installed apache)&lt;/div&gt;&lt;div&gt;then "make &amp;amp;&amp;amp; make test" , "make install"&lt;/div&gt;&lt;div&gt;You can check your httpd.conf file to make sure it added the LoadModule line for mod_perl.so&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;PHP Prerequisites&lt;/b&gt;&lt;/div&gt;&lt;div&gt;PHP builds support for a number of libraries directly into the core, which means before you build php you need to install the libraries you want to use. &lt;/div&gt;&lt;div&gt;The major ones I want to start with:&lt;/div&gt;&lt;div&gt;GD: which requires libjpeg, zlib and libjpeg (and freetype for text)&lt;/div&gt;&lt;div&gt;zlib: &lt;a href="http://www.zlib.net/"&gt;http://www.zlib.net/&lt;/a&gt;&lt;/div&gt;&lt;div&gt;libpng: &lt;a href="http://www.libpng.org/pub/png/libpng.html"&gt;http://www.libpng.org/pub/png/libpng.html&lt;/a&gt;&lt;/div&gt;&lt;div&gt;libjpeg: &lt;a href="http://www.ijg.org/"&gt;http://www.ijg.org/&lt;/a&gt;&lt;/div&gt;&lt;div&gt;freetype: &lt;a href="http://freetype.sourceforge.net/index2.html"&gt;http://freetype.sourceforge.net/index2.html&lt;/a&gt;&lt;/div&gt;&lt;div&gt;Curl: &lt;a href="http://curl.haxx.se/"&gt;http://curl.haxx.se/&lt;/a&gt;&lt;/div&gt;&lt;div&gt;All of these should be pretty straightforward. Only thing to pay attention to is if they install in /usr/lib or /usr/lib64 depending on your machine, as you'll need the path when you install PHP&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;PHP!&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Now you can grab a copy of the latest stable source at &lt;a href="http://php.net/"&gt;http://php.net/&lt;/a&gt; and untar it.&lt;/div&gt;&lt;div&gt;The configuration line for PHP is usually the trickiest part of installing it, so I usually write it out in notepad(++) and copy it over. &lt;/div&gt;&lt;div&gt;My configure line ended up as:&lt;/div&gt;&lt;div&gt;./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-mysql --with-zlib-dir=/usr/lib --with-png-dir=/usr/lib --with-jpeg-dir=/usr/lib --with-gd --with-curl=/usr/lib --with-xsl --with-mysqli --with-pdo&lt;/div&gt;&lt;div&gt;Then make and make install&lt;/div&gt;&lt;div&gt;Last, to associate .php files with PHP, edit your Apache httpd.conf file and add the line&lt;/div&gt;&lt;div&gt;"AddType application/x-httpd-php .php"&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;At this point you'll probably want to add some VirtualHost files to your apache configuration to serve up different domain names.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8153250334683800977-4619402727215123983?l=rguth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rguth.blogspot.com/feeds/4619402727215123983/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rguth.blogspot.com/2010/01/setting-up-lamp-server-from-scratch.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8153250334683800977/posts/default/4619402727215123983'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8153250334683800977/posts/default/4619402727215123983'/><link rel='alternate' type='text/html' href='http://rguth.blogspot.com/2010/01/setting-up-lamp-server-from-scratch.html' title='Setting up a LAMP server from scratch'/><author><name>Ryan G</name><uri>http://www.blogger.com/profile/13057267173033962130</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8153250334683800977.post-8538193785298518250</id><published>2009-12-11T18:18:00.000-08:00</published><updated>2009-12-11T18:53:30.945-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ludum dare'/><category scheme='http://www.blogger.com/atom/ns#' term='mocker'/><category scheme='http://www.blogger.com/atom/ns#' term='ryanguthrie.com'/><category scheme='http://www.blogger.com/atom/ns#' term='game development'/><category scheme='http://www.blogger.com/atom/ns#' term='space exploration'/><title type='text'>Ludum Dare - Exploration</title><content type='html'>&lt;span class="Apple-style-span" style="font-size: large;"&gt;Ludum Dare 16 theme is ... Exploration!&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;The 48 hour Ludum Dare competition challenges solo contestants to develop a full game in 48 hours from scratch. They can use existing, public game engines, but all assets (art,sounds and game logic) have to be developed from scratch.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;(http://www.ludumdare.com)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt; &lt;b&gt;Drifting in the Stellar Winds&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;b&gt;(working title)&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;I've decided in a game that is essentially, way too complex for someone who hasn't made any working games recently. The basics are:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;b&gt;-Top Down 2D: &lt;/b&gt;Simpleish topdown 2d movement, 4 directions with a giant seamless map loaded in the background &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;-&lt;b&gt;Space Exploration: &lt;/b&gt;You are in a smallish space ship powered by &lt;a href="http://en.wikipedia.org/wiki/Light"&gt;solar sails &lt;/a&gt; . &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;b&gt;-Persistent Endless Universe: &lt;/b&gt;The 'map' is procedurally generated on my server and streamed to the flash client. The universe limits are essentially limitless as any time a player approaches the existing 'end' of the map, it will generate new data for that area.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;b&gt;-Psuedo Physics: &lt;/b&gt;simplified game physics basing ship speed off of 'solar winds' and gravitational pulls. Certain solar bodies like different star types, black holes etc will have different and potentially deadly affects on the ship&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;b&gt;-Planet Exploration: &lt;/b&gt;All planets that are generated will have different environmental variables. Once that the player is able to approach will generate their own procedural based data that the player can explore via small landing craft. Exploring will be 2d topdown and streamed as well.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;b&gt;-Planet Interaction: &lt;/b&gt;ideas for what the player can find on a planet&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;-primitive life forms&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;-resources (fuel, alien artifacts, food, tradeable resources)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;-civilized non space-faring life forms ( limited interaction available)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;-environmental hazards&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;-empire building? (at some point allow players to build their own settlements)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;b&gt;-AI Civilizations: &lt;/b&gt;Randomly generated civilizations with their own ships, planets and space stations. Will react to player differently with various options for trading, missions, diplomacy and aggression, and various technology levels&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;The game portion will not have an actual objective. The player data can be saved to the server, so it is essentially a single player online game, with the potential of adding mmo support. You can however upgrade your ship and your technology, collect map data (allowing faster access with the ability to bookmark areas), increase reputation with alien civilizations and also collect warp points.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: medium; "&gt;Since this is a 48 hour game competition, I'm aiming for an extremely simplified version of the above. Art assets are going to be tough for me, so maybe just a handful of different classes of planets,stars and other solar bodies. A very small tech tree and ship part list, and maybe two civilizations with variable personalities. &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: medium; "&gt;Within 24 hours I want playable streaming map support for both space and individual planets &lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8153250334683800977-8538193785298518250?l=rguth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rguth.blogspot.com/feeds/8538193785298518250/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rguth.blogspot.com/2009/12/ludum-dare-exploration.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8153250334683800977/posts/default/8538193785298518250'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8153250334683800977/posts/default/8538193785298518250'/><link rel='alternate' type='text/html' href='http://rguth.blogspot.com/2009/12/ludum-dare-exploration.html' title='Ludum Dare - Exploration'/><author><name>Ryan G</name><uri>http://www.blogger.com/profile/13057267173033962130</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8153250334683800977.post-3643034444283466460</id><published>2009-08-15T03:56:00.000-07:00</published><updated>2009-08-15T04:26:05.473-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mod_fastcgi'/><category scheme='http://www.blogger.com/atom/ns#' term='catalyst'/><category scheme='http://www.blogger.com/atom/ns#' term='mod_perl'/><category scheme='http://www.blogger.com/atom/ns#' term='fastcgi'/><category scheme='http://www.blogger.com/atom/ns#' term='mod_fcgid'/><category scheme='http://www.blogger.com/atom/ns#' term='apache'/><title type='text'>FastCGI rocks mod_perl and FCGID</title><content type='html'>Reconfigured apache again, as mod_perl was just eating up way too much memory. I am running my site on a vps with 512MB Ram, which is fairly low for a webserver, but if you just have a few sites that aren't getting hit too hard is usually fine.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;However, using mod_perl to load my Catalyst into apache on startup makes it eat it huge amounts of memory just to get started, and limits how many apache processes I can have going. The processes that do get started can respond quickly, since they already have the app loaded, but can't start up new workers, which means all websites, even those not related to my Catalyst app, go down. Since I run several other sites on my server which do not need the memory overhead of Catalyst, this is not a good solution.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So I went to the next method listed in the Catalyst deployment guide (&lt;a href="http://search.cpan.org/~hkclark/Catalyst-Manual-5.8000/lib/Catalyst/Manual/Cookbook.pod#Deployment"&gt;http://search.cpan.org/~hkclark/Catalyst-Manual-5.8000/lib/Catalyst/Manual/Cookbook.pod#Deployment&lt;/a&gt;) :&lt;/div&gt;&lt;div&gt;Shared hosting using FastCGI&lt;/div&gt;&lt;div&gt;However this failed, as the site_fastcgi.pl script reported it was unable to read the input from STDIN.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Next up was a regular  FastCGI deployment, which has apache launching the actual FastCGI processes. That's when the next stumbling block came up:&lt;/div&gt;&lt;div&gt;cPanel decided to completely replace mod_fastcgi with mod_fcgid . In general I have very good things to say about cPanel, but this decision seems fairly short sighted.&lt;/div&gt;&lt;div&gt;Mod_FastCGI is the Apache module designed to allow apache to work with applications running as a fastcgi app ( FastCGI is just a faster way of running external server side programs to handle your website)&lt;/div&gt;&lt;div&gt;Mod_FCID is :&lt;br /&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;span class="Apple-style-span"  style=" ;font-family:'Times New Roman';"&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;What is mod_fcgid? It is a binary compatibility alternative to &lt;a href="http://www.apache.org/"&gt;Apache&lt;/a&gt; module &lt;a href="http://www.fastcgi.com/"&gt;mod_fastcgi&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;mod_fcgid has a new process management strategy, which concentrates on reducing the number of fastcgi server, and kick out the corrupt fastcgi server as soon as possible.&lt;/p&gt;&lt;/blockquote&gt;&lt;/span&gt;&lt;p&gt;Doesn't sound so bad right? And maybe in a typical apache-managed setup it works fine. But for my Catalyst app, I wanted to run an external FastCGI process,  and FCGID couldn't handle that. Their solution for people who want to run external processes? "&lt;span class="Apple-style-span"   style="  white-space: pre; font-family:-webkit-monospace;font-size:13px;"&gt;If you really need External server support, you can check out the last release for mod_fastcgi"&lt;/span&gt;&lt;/p&gt;&lt;p&gt; &lt;a href="http://www.mail-archive.com/mod-fcgid-users@lists.sourceforge.net/msg00222.html"&gt;http://www.mail-archive.com/mod-fcgid-users@lists.sourceforge.net/msg00222.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;There are many reasons why running something like Catalyst as an external server is a good solution. It allows for much more flexibility as you can make changes to it without messing with apache's internals, don't have to even touch the apache processes when it is changed, can run multiple versions of the same app for debugging, testing, or load balancing, etc. It strikes me as somewhat narrow sighted for a module billing itself as mod_fastcgi's alternative dismisses these benefits out of hand. &lt;/p&gt;&lt;p&gt;Luckily, mod_fastcgi can be installed quickly as a dso, so you don't even need  to bother with mod_fcgid -&lt;br /&gt;Download the mod_fastcgi source from : &lt;a href="http://www.fastcgi.com/dist/"&gt;http://www.fastcgi.com/dist/&lt;/a&gt; , follow the few instructions in INSTALL.AP2 , and you are a good to go.&lt;br /&gt;So far the speed of Catalyst on FastCGI has been very impressive; much, much faster than mod_perl or even it's own test server. The rest of my sites still respond quickly and are essentialy managed completely seperately, as well as the static content my catalyst app points to. I haven't been running it long enough to declare it's a perfect situation, but so far it sure beats mod_perl and mod_fcgid&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8153250334683800977-3643034444283466460?l=rguth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rguth.blogspot.com/feeds/3643034444283466460/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rguth.blogspot.com/2009/08/fastcgi-rocks-modperl-and-fcgid.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8153250334683800977/posts/default/3643034444283466460'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8153250334683800977/posts/default/3643034444283466460'/><link rel='alternate' type='text/html' href='http://rguth.blogspot.com/2009/08/fastcgi-rocks-modperl-and-fcgid.html' title='FastCGI rocks mod_perl and FCGID'/><author><name>Ryan G</name><uri>http://www.blogger.com/profile/13057267173033962130</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8153250334683800977.post-7590104768572004299</id><published>2009-08-14T02:20:00.001-07:00</published><updated>2009-08-14T02:28:36.838-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='catalyst'/><category scheme='http://www.blogger.com/atom/ns#' term='mod_perl'/><category scheme='http://www.blogger.com/atom/ns#' term='ryanguthrie.com'/><category scheme='http://www.blogger.com/atom/ns#' term='apache'/><title type='text'>Apache 2.2, Catalyst and Suhosin</title><content type='html'>I just ran a full PHP and Apache upgrade and am now running a much more robust server configuration.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Apache now uses mod_perl, which works very well when running a large website framework like Catalyst. The Catalyst module gets  loaded into memory once, when Apache is first started, and is then accessed to by every  new apache thread without having to reload all the same data, keeping visible response times to a minimum.&lt;/div&gt;&lt;div&gt;The other configuration I considered was FastCGI, which runs Catalyst as a seperate process. While this is also a fast configuration, it adds extra complications by managing multiple processes trying to access the same files. Unless the mod_perl setup runs into any issues later on, I am holding off on trying FastCGI.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;PHP has also been updated and has better security hardening built in, including the Suhosin module. The server is using suPHP now, which means php apps no longer run under the webservers username, and therefore do not require special user permissions to write files to the server. The old setup often caused conflicts  when users tried to manipulate files that their programs had created.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8153250334683800977-7590104768572004299?l=rguth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rguth.blogspot.com/feeds/7590104768572004299/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rguth.blogspot.com/2009/08/apache-22-catalyst-and-suhosin.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8153250334683800977/posts/default/7590104768572004299'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8153250334683800977/posts/default/7590104768572004299'/><link rel='alternate' type='text/html' href='http://rguth.blogspot.com/2009/08/apache-22-catalyst-and-suhosin.html' title='Apache 2.2, Catalyst and Suhosin'/><author><name>Ryan G</name><uri>http://www.blogger.com/profile/13057267173033962130</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8153250334683800977.post-5911465808840362611</id><published>2009-08-13T09:21:00.001-07:00</published><updated>2009-08-13T09:32:01.251-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='catalyst'/><category scheme='http://www.blogger.com/atom/ns#' term='ryanguthrie.com'/><category scheme='http://www.blogger.com/atom/ns#' term='jquery'/><title type='text'>RyanGuthrie.com Update</title><content type='html'>The initial revamp of RyanGuthrie.com is almost complete. It is sure to undergo some tweaking in the weeks to come, but it is now fully functional. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The past day I have:&lt;/div&gt;&lt;div&gt;-Added the portfolio page, which includes&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;-extremely customized 'Slider', built off jQuery tab library and effects.&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;-all portfolio data is loaded into a data model in the backend, making changes extremely easy&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;-TT displays the project model into jQuery tabs, which include lightbox image thumbnails&lt;br /&gt;&lt;br /&gt;-Added projects page&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;-Started on jQuery based projects listing. Sliding project information is not currently adjusting the surrounding elements correctly however.&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;-Loaded project data as a Catalyst module for improved flexibility&lt;br /&gt;&lt;br /&gt;-Finished tweaking contact forms&lt;br /&gt;&lt;br /&gt;-Added Catalyst handlers for ajax form submissions and verified email&lt;br /&gt;&lt;br /&gt;-Added Profile page, using a jQuery plugin to create rounded corners&lt;br /&gt;&lt;br /&gt;-Linked to and updated this blog&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;-------------&lt;/div&gt;&lt;div&gt;I have a few more cosmetic tweaks until I am happy with this first edition, but not bad for one day. I should have it ready to move from the test server by the end of today.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8153250334683800977-5911465808840362611?l=rguth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rguth.blogspot.com/feeds/5911465808840362611/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rguth.blogspot.com/2009/08/ryanguthriecom-update.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8153250334683800977/posts/default/5911465808840362611'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8153250334683800977/posts/default/5911465808840362611'/><link rel='alternate' type='text/html' href='http://rguth.blogspot.com/2009/08/ryanguthriecom-update.html' title='RyanGuthrie.com Update'/><author><name>Ryan G</name><uri>http://www.blogger.com/profile/13057267173033962130</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8153250334683800977.post-2504573736322299023</id><published>2009-08-10T16:50:00.000-07:00</published><updated>2009-08-10T16:51:13.246-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ryanguthrie.com'/><category scheme='http://www.blogger.com/atom/ns#' term='testing'/><title type='text'>Test blog 1</title><content type='html'>Starting test blog. Testing out Catalyst integration&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8153250334683800977-2504573736322299023?l=rguth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rguth.blogspot.com/feeds/2504573736322299023/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rguth.blogspot.com/2009/08/test-blog-1.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8153250334683800977/posts/default/2504573736322299023'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8153250334683800977/posts/default/2504573736322299023'/><link rel='alternate' type='text/html' href='http://rguth.blogspot.com/2009/08/test-blog-1.html' title='Test blog 1'/><author><name>Ryan G</name><uri>http://www.blogger.com/profile/13057267173033962130</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
