<?xml version="1.0" encoding="ISO-8859-1"?>

<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
	<channel>
		<title>GiveUpAlready.com - Blogs - Carnage</title>
		<link>http://www.giveupalready.com/blog.php?10-Carnage</link>
		<description>GiveUpAlready.com forums. A discussion board for all topics, serious discussion and entertainment and hobbies. Also the Kings of Chaos game forums are hosted here.</description>
		<language>en</language>
		<lastBuildDate>Sat, 25 May 2013 00:21:43 GMT</lastBuildDate>
		<generator>vBulletin</generator>
		<ttl>60</ttl>
		<image>
			<url>http://www.giveupalready.com/skins/gua_def/misc/rss.jpg</url>
			<title>GiveUpAlready.com - Blogs - Carnage</title>
			<link>http://www.giveupalready.com/blog.php?10-Carnage</link>
		</image>
		<item>
			<title>you know the drill</title>
			<link>http://www.giveupalready.com/entry.php?200-you-know-the-drill</link>
			<pubDate>Fri, 11 Feb 2011 15:53:47 GMT</pubDate>
			<description>http://www.youtube.com/watch?v=cT_mijBypO0 
http://www.youtube.com/watch?v=OpKIOZPzwWw 
http://www.youtube.com/watch?v=yW0IYfGI2eA</description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">
<iframe class="restrain" title="YouTube video player" width="640" height="390" src="//www.youtube.com/embed/cT_mijBypO0?wmode=opaque" frameborder="0"></iframe>
<br />

<iframe class="restrain" title="YouTube video player" width="640" height="390" src="//www.youtube.com/embed/OpKIOZPzwWw?wmode=opaque" frameborder="0"></iframe>
<br />

<iframe class="restrain" title="YouTube video player" width="640" height="390" src="//www.youtube.com/embed/yW0IYfGI2eA?wmode=opaque" frameborder="0"></iframe>
</blockquote>

]]></content:encoded>
			<dc:creator>Carnage</dc:creator>
			<guid isPermaLink="true">http://www.giveupalready.com/entry.php?200-you-know-the-drill</guid>
		</item>
		<item>
			<title>another week: more tracks</title>
			<link>http://www.giveupalready.com/entry.php?198-another-week-more-tracks</link>
			<pubDate>Tue, 25 Jan 2011 15:59:52 GMT</pubDate>
			<description>http://www.youtube.com/watch?v=I-ylhRqB7ZY 
http://www.youtube.com/watch?v=27KtD4znxNg 
http://www.youtube.com/watch?v=EXPR-C_p0mw</description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">
<iframe class="restrain" title="YouTube video player" width="640" height="390" src="//www.youtube.com/embed/I-ylhRqB7ZY?wmode=opaque" frameborder="0"></iframe>
<br />

<iframe class="restrain" title="YouTube video player" width="640" height="390" src="//www.youtube.com/embed/27KtD4znxNg?wmode=opaque" frameborder="0"></iframe>
<br />

<iframe class="restrain" title="YouTube video player" width="640" height="390" src="//www.youtube.com/embed/EXPR-C_p0mw?wmode=opaque" frameborder="0"></iframe>
</blockquote>

]]></content:encoded>
			<dc:creator>Carnage</dc:creator>
			<guid isPermaLink="true">http://www.giveupalready.com/entry.php?198-another-week-more-tracks</guid>
		</item>
		<item>
			<title><![CDATA[Continuing my series of 'good' tracks i've been finding]]></title>
			<link>http://www.giveupalready.com/entry.php?197-Continuing-my-series-of-good-tracks-i-ve-been-finding</link>
			<pubDate>Tue, 18 Jan 2011 11:31:37 GMT</pubDate>
			<description>http://www.youtube.com/watch?v=AZL3Rsoee9Q 
http://www.youtube.com/watch?v=J5j46uSKiYI 
http://www.youtube.com/watch?v=3mR49GxuIdE</description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">
<iframe class="restrain" title="YouTube video player" width="640" height="390" src="//www.youtube.com/embed/AZL3Rsoee9Q?wmode=opaque" frameborder="0"></iframe>
<br />

<iframe class="restrain" title="YouTube video player" width="640" height="390" src="//www.youtube.com/embed/J5j46uSKiYI?wmode=opaque" frameborder="0"></iframe>
<br />

<iframe class="restrain" title="YouTube video player" width="640" height="390" src="//www.youtube.com/embed/3mR49GxuIdE?wmode=opaque" frameborder="0"></iframe>
</blockquote>

]]></content:encoded>
			<dc:creator>Carnage</dc:creator>
			<guid isPermaLink="true">http://www.giveupalready.com/entry.php?197-Continuing-my-series-of-good-tracks-i-ve-been-finding</guid>
		</item>
		<item>
			<title>another good track</title>
			<link>http://www.giveupalready.com/entry.php?195-another-good-track</link>
			<pubDate>Tue, 21 Dec 2010 17:00:18 GMT</pubDate>
			<description>http://www.youtube.com/watch?v=Yq3WoggdX54</description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">
<iframe class="restrain" title="YouTube video player" width="640" height="390" src="//www.youtube.com/embed/Yq3WoggdX54?wmode=opaque" frameborder="0"></iframe>
</blockquote>

]]></content:encoded>
			<dc:creator>Carnage</dc:creator>
			<guid isPermaLink="true">http://www.giveupalready.com/entry.php?195-another-good-track</guid>
		</item>
		<item>
			<title>Saving this for later</title>
			<link>http://www.giveupalready.com/entry.php?194-Saving-this-for-later</link>
			<pubDate>Thu, 16 Dec 2010 11:17:31 GMT</pubDate>
			<description>3 trance tracks. 
 
http://www.youtube.com/watch?v=zK1mLIeXwsQ 
 
http://www.youtube.com/watch?v=jeJs4s9FIuY 
 
http://www.youtube.com/watch?v=7y5xLfSr8RE</description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">3 trance tracks.<br />
<br />

<iframe class="restrain" title="YouTube video player" width="640" height="390" src="//www.youtube.com/embed/zK1mLIeXwsQ?wmode=opaque" frameborder="0"></iframe>
<br />
<br />

<iframe class="restrain" title="YouTube video player" width="640" height="390" src="//www.youtube.com/embed/jeJs4s9FIuY?wmode=opaque" frameborder="0"></iframe>
<br />
<br />

<iframe class="restrain" title="YouTube video player" width="640" height="390" src="//www.youtube.com/embed/7y5xLfSr8RE?wmode=opaque" frameborder="0"></iframe>
</blockquote>

]]></content:encoded>
			<dc:creator>Carnage</dc:creator>
			<guid isPermaLink="true">http://www.giveupalready.com/entry.php?194-Saving-this-for-later</guid>
		</item>
		<item>
			<title>How I fixed email (not totally yet) part 1</title>
			<link>http://www.giveupalready.com/entry.php?145-How-I-fixed-email-(not-totally-yet)-part-1</link>
			<pubDate>Sat, 29 Aug 2009 11:38:23 GMT</pubDate>
			<description><![CDATA[This guide isn't how to set stuff up, its a general debugging guide plus a few reminders for me if it ever breaks. 
 
So, the setup is simple.  
 
Virtualmin/webmin/usermin 
Postfix 
Dovecot 
 
Problem is they aren't playing nicely together.]]></description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">This guide isn't how to set stuff up, its a general debugging guide plus a few reminders for me if it ever breaks.<br />
<br />
So, the setup is simple. <br />
<br />
Virtualmin/webmin/usermin<br />
Postfix<br />
Dovecot<br />
<br />
Problem is they aren't playing nicely together.<br />
<br />
The first step was to get the dammed things working in isolation. I started with dovecot. Virtualmin's automatic installation/configuration didn't quite work and left a few configuration issues that caused dovecot to crash whenever it was connected to. Fortunatly they were simple to resolve. Redirecting its logfile from /dev/null to a file i could read revealed (one at a time) the 4 or 5 problems with the setup which I googled for correct values for and fixed the server. Eventually it worked.<br />
<br />
Recieving email was another issue. The fix was slightly more complex; but involved reading the /var/log/maillog (A big log file) fixing the issue (a missing aliases file fixed with postmap /etc/aliases no idea why virtualmin didn't do this itself as it runs the postmap command on all the OTHER mapping files it uses) At this stage to fix another issue (part 2) I also recompiled postfix to include mysql support (on bsd the port to use is postfix-current not postfix)<br />
<br />
After the servers were running without complaining I had to add an aditional mapping into the virtual map file to allow an email to recieve emails.<br />
<br />
This setup works however only for <a href="mailto:username@domain.com">username@domain.com</a> virtualmin insists on adding a system user for each mail account this is a huge issue on freebsd. After some research the answer was to use mysql and instead of using virtual_alias_maps to use virtual_MAILBOX_maps. Virtualmin dosn't support this, but i'm hoping to use some clever trickery to have it write emails to a different place than it thinks its doing. More on this in part 2 when i have it working.</blockquote>

]]></content:encoded>
			<dc:creator>Carnage</dc:creator>
			<guid isPermaLink="true">http://www.giveupalready.com/entry.php?145-How-I-fixed-email-(not-totally-yet)-part-1</guid>
		</item>
		<item>
			<title>Game Design: Making formulas make sense</title>
			<link>http://www.giveupalready.com/entry.php?144-Game-Design-Making-formulas-make-sense</link>
			<pubDate>Mon, 24 Aug 2009 12:03:29 GMT</pubDate>
			<description><![CDATA[I was going to post this up in KOC as a suggestion on how to fix sabotage however, as some people mentioned that rocco may not be too receptive to suggestions of this nature (I'm guessing he gets a lot of them) I figured I'd take a slightly more generalised approach and go into how to design an...]]></description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">I was going to post this up in KOC as a suggestion on how to fix sabotage however, as some people mentioned that rocco may not be too receptive to suggestions of this nature (I'm guessing he gets a lot of them) I figured I'd take a slightly more generalised approach and go into how to design an algorithm for an online game using kings of chaos as an example where needed.<br />
<br />
So, how should you go about desiging an algorithm for sabotage (or any feature for that matter)?<br />
<br />
Firstly, to make an (online) game fun it needs to be balanced and consistant.<br />
<br />
For a game to be balanced, it should mean that every player has the same chance of doing well. At the moment i'd say koc isn't balanced. Looking at the top ranks the majority of the top players are dwarves. Also, the only gaming stratergy that works in the long run is to have a huge defence a huge TFF and bank your gold as often as possible. Foe suffers from a similar mono stratergy issue but it is something i'm working to compensate for.<br />
<br />
For a game to be consistant, the game should play how the player expects it to and shouldn't deviate from that very often. If it plays differantly to how a player would expect, it should at least alwats behaive in that manner. An easy example here; if my attack is greater than a players defence I expect to be able to beat them if I attack them, if for some reason the opposite is true (lower strike beats higher defence) then if i go on to attack another player with a higher defence than my attack, i would expect to beat them.<br />
<br />
With these two key properties in mind we can start to design an algorithm but first, a quick look at what is there at the moment.<br />
  <br />
1) sab turns.<br />
In my oppinion these are redundant. It makes no sense at all to ever use less than 5.<br />
<br />
2) number of spies<br />
Again, no one has ever offered any proof that more than one spy is better than just sending one.<br />
<br />
3) weapons<br />
In my experiance it is far more difficult to sab an IS or BPM than it is to sab a NUN or a LT. This may not acctually be the case, but if it is its rather stupid. All the weapons have the a similar gold value, they should be equally difficult to sab<br />
<br />
4) AAT's<br />
This is something in the current system which i think works well. It seems to be set at about the right level, however with the other proposed changes to the system, this will need a few tweaks to remain as effective.<br />
<br />
Design criteria<br />
<br />
1) Higher spy should prevail against lower sentry<br />
2) A lower spy should still be able to do damage to a high sentry but this damage should be less than (1)<br />
3) Smaller accounts should take less damage<br />
4) In general a high sentry should mean less damage from sabotage<br />
5) In general having high spy should mean you can do a lot of damage.<br />
6) A sab account should be a viable method of play<br />
7) A sab account should be beatable<br />
<br />
Player assumptions<br />
<br />
The following is a list of things that a player may assume when presented with a sab form<br />
<br />
1) bigger weapons are harder to sab than smaller ones. (eg easier to sab a dragonskin than an IS)<br />
2) sending more spies makes it easier to sab weapons<br />
3) sending more spies make it more likely you'll get caught<br />
4) using more turns increases the chance you'll be caught<br />
5) using more turns increases the damage you can do<br />
6) its harder to sab 2 weapons than 1<br />
<br />
A good system would forfill these assumptions or not allow them to be made in the first place.<br />
<br />
First pass.<br />
<br />
There are so many variables in the current system, as a first pass attempt at a design I will set a number of these in stone to make other criteria easier to resolve.<br />
<br />
1) Turns. <br />
The current system is confusing an unneeded. Drop turns all together. Instead, each player may make one sucessful attempt per 24 hours and has 10 tries per player to get an attempt to succeed <br />
<br />
2) Spies.<br />
25 is probably too many, the max will be reduced to 10<br />
<br />
3) AAT.<br />
As a first pass, the ATT of the target will be doubled, this means that the system stays the same as before.<br />
<br />
Algorithm.<br />
<br />
At its core, the algorithm needs to decide the differance between the sentry of the target and the spy of the sabber. A simple ratio is too volatile considering that some accounts have over a billion spy compared to accounts which have 100k sentry. We deal with this using a log and the max function (putting a cap on the ratio)<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<pre class="bbcode_code"style="height:36px;">max(-2,log2((sentry+1)/(spy+1)))</pre>
</div>This gives a number between -2 and +infinity. With a value close to 0 if the sentry and spy are close to each other, -1 if the spy is double the sentry, -2 if the spy is more than quadruple the sentry. On the other end of the spectrum, if the sentry is quadruple the spy you get a value of 2, 3 if the sentry is 8x the spy etc.<br />
<br />
The next step is to define a mapping between the number coming out of that forumla and a %age success rate. Considering a few things:<br />
<br />
1) -2 should be the most likely to succeed.<br />
2) values of 2 of greater should have a very low chance of success (this makes it similar to the current 3x sentry to be unsabbable)<br />
3) even at -2 there should still be a chance of failing.<br />
4) even at a high number (eg 25) there should be a very very slight chance of suceeding.<br />
<br />
My suggestion here would be a mapping akin to this:<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<pre class="bbcode_code"style="height:132px;">value | base sucess rate
-2: 90%
-1: 75%
0: 60%
1: 30%
2:10%
3:5%
4:1%
5:0.1%</pre>
</div>These values are fairly arbitary and need to be subjected to some mathmatical analisis. Esp when combined with the modifiers below.<br />
<br />
The base success rate assumes sending 1 spy to sab 1/10 of a persons AAT. The maximum that 1 spy would be able to sab is 1/10th AAT. Attempting to send 1 spy to sab more than 1/10th would result in an error informing you that 'Your spy's are only &lt;race name&gt; and can't possibly sab that much at once.' <br />
<br />
The sucess rate is then modified based on the AAT/spys ratio sabbing for the full AAT with 10 spies gives the same ratio as sabbing 1/10th with 1 spy, but sabbing 1/20th with 2 spys gives 4 times that ratio.<br />
<br />
Sending more spies increases the risk to you; if you send 10, you could potentially loose upto 10 Nuns and 10 spies. Only increasing/decreasing the amount you try to sab change the sucess chance.<br />
<br />
Essentially, the idea being that if I (with a pathetic 50 million spy) were to try and sab someone with 50 billion sentry, i'd fail. A lot. However since their AAT would probably be 1000+ I may well be able to succeed if i sent 10 spies to try and sab 1 or 2 weapons at a time. This brings balance to the game: A small account can do about the same amount of damage to a large account that the larger account can inflict back on them (due to the smaller account having a lower AAT)<br />
<br />
This formula is incomplete and before being implemented would need to go through several stages of Analisis and Refinement.<br />
<br />
For the analisis stage, you would simply take some values from the database and figure out what the results would be; look for anomolies; perhaps its too easy for someone to sab someone with 10x their spy. You would then enter the refinement stage and edit the %ages a little and try again till you got the result that you were after.<br />
<br />
Finially the resulting system should be compared to the design brief and to the player assumptions. (new assumptions would need to be made based on the new system) If its behaviour is consistant the system is good. If it isn't, either you need to further refine the system or you need to explain to the player how it dosn't meet their expectations through some sort of feed back as they are playing.</blockquote>

]]></content:encoded>
			<dc:creator>Carnage</dc:creator>
			<guid isPermaLink="true">http://www.giveupalready.com/entry.php?144-Game-Design-Making-formulas-make-sense</guid>
		</item>
		<item>
			<title>The lacn timeline according to me</title>
			<link>http://www.giveupalready.com/entry.php?141-The-lacn-timeline-according-to-me</link>
			<pubDate>Wed, 05 Aug 2009 18:06:18 GMT</pubDate>
			<description><![CDATA[I start sabbing lacn, sending some poetry of forms along with it. 
 
Message 1: 
To: zelous 
My spies have entered your armory, 
They didn't cause too much harm, did they? 
Ensuring your shields 
break down in the field, 
I guess that is payback for your barbary.]]></description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">I start sabbing lacn, sending some poetry of forms along with it.<br />
<br />
Message 1:<br />
To: zelous<br />
My spies have entered your armory,<br />
They didn't cause too much harm, did they?<br />
Ensuring your shields<br />
break down in the field,<br />
I guess that is payback for your barbary.<br />
<br />
no reply<br />
<br />
<hr style="display:block" color="#000000" size="1" /><br />
<br />
Message 2: (a variation on the above)<br />
To: JHC_fs<br />
my spies have entered your armory<br />
intent on destroying your weaponry<br />
on a vital mission<br />
in this war of attrition<br />
your armaments no more than a memory.<br />
<br />
Reply:<br />
There is a spear of ice, newly thrust into the heart of the land.<br />
The soul within it yearns to kill.<br />
He who grasps that spear will know death.<br />
again and again, he shall know death........JHC_fs.....g<br />
<br />
Not an original, if it had been he may have got some kudos. <br />
<br />
My reply:<br />
my poem to you was a gift<br />
the point of which was to uplift<br />
the mechanics of war<br />
can be such a bore<br />
but this last line has just gone adrift<br />
<br />
There were two replies from him, including a book recommendation but nothing noteworthy or poetic.<br />
<br />
<hr style="display:block" color="#000000" size="1" /><br />
<br />
Big_ sabbed me; his sentry is too high for me to have realistic success against but i sent him this:<br />
<br />
I admire your show of camaraderie<br />
but your attempts will not stop my victory.<br />
The terms for surrender<br />
is every alliance member<br />
pay tribute to me with some poetry.<br />
<br />
<hr style="display:block" color="#000000" size="1" /><br />
<br />
I receive a message from Sventjuh130 informing me that I've been approved. It wasn't poetic but I replied with this:<br />
<br />
I'm glad that I meet your approval<br />
but my terms have been met with refusal.<br />
Your armories are<br />
too full by far<br />
so I'll continue my campaign of removal.<br />
  <br />
so far no response.<br />
<br />
<hr style="display:block" color="#000000" size="1" /><br />
<br />
A raft of responses came in from lacn, for brevity I'm only quoting the poetry parts. They are to an extent humoring my demands but not complying with them.<br />
<br />
From: Doograkan <br />
There once was a young noob named Carix,<br />
Whose sentry caused much hysterics;<br />
They were quite inept,<br />
With each other they slept,<br />
And then I ghosted you for two nunchaku.<br />
<br />
From big_:<br />
Carix, this was not meant to be!<br />
You're not destined to be my enemy<br />
With a bit of luck<br />
Your poems won't ****<br />
I fear them more than sabs, you see.<br />
<br />
This one is quite good<br />
<br />
this one isn't:<br />
from: Archangel_LaCN<br />
There once was a man named Car-ix<br />
Who's diet was made out of p r i c k s<br />
At Chaos he ****ed<br />
LaCN sabbed, he ****ed<br />
then barfed up his treasure of D i c k s<br />
<br />
<hr style="display:block" color="#000000" size="1" /><br />
<br />
Now, as my alliance affiliation states:<br />
<br />
If you don't want to be sabbed, see,<br />
the solution is really quite easy.<br />
In your Alliance affiliation,<br />
declare to the nation,<br />
in limerick form, that I'm Godly.<br />
<br />
Firstly, most replies were insulting not declaring my awesomeness and secondly, not in the AA box.<br />
<br />
<hr style="display:block" color="#000000" size="1" /><br />
<br />
UPDATE:<br />
<br />
I've been sabbing lacn on and off for a few days (i dont have the time to do it everyday as i'd rather play other games eg l4d) Not much meaningful communication, a few demands to know why i'd sabbed them, but a bug in koc is preventing me responding to one, and another of them is on vac mode now... (probably not my doing but meh) So, i thought i'd tempt a response out of their battlefield mod with this poem:<br />
<br />
The cost for my poems is great:<br />
a two point two billion rebate.<br />
For that is the cost,<br />
of all you have lost.<br />
Am I really too demanding to placate?<br />
<br />
Just to make it clear, i'll not sab any lacn member who a) refrains from sabbing/massing me and b) conforms to my AA. Anyone else is fair game.<br />
<br />
<hr style="display:block" color="#000000" size="1" /><br />
<br />
UPDATE: 20th August<br />
<br />
I've had a host of new messages, and given two replies but for some reason KOC only seems to be alerting me to messages several days after they've been sent :s In any case heres an update<br />
<br />
<hr style="display:block" color="#000000" size="1" /><br />
<br />
tantallous sent me a message asking why i'd sabbed; I composed a reply but KOC kept redirecting me to the home page when i tried to send it; I assume this means the user blocked me<br />
<br />
<hr style="display:block" color="#000000" size="1" /><br />
<br />
xshintenshix sent me a message claiming that I was a noob i responded with this, admittedly not my best but still:<br />
<br />
A noob is someone who is new,<br />
but I've been here since age two.<br />
Until you comply<br />
your weapons will die.<br />
Either way, I'm still better than you.<br />
<br />
The response (apparently sent two days ago but the first i saw of it was today)<br />
<br />
a &quot;noob&quot; can also be someone who is crap at a game; you've confused it with &quot;newbie&quot; which many people believe to be the same.<br />
I've been here since the end of Beta, and you weren't here since age 2, bl there.<br />
My weapons will die? give me a break, i may not spend my spare time thinking up limericks but at least i can play this game for fun yeah?<br />
<br />
His insults at my playing ability are obviously wide of the mark to date he has lost 385 look out towers (it would have been more but someone gave me the wrong aat...) whereas I lose 30 or so nuns from the whole alliance sabbing me. In his eyes he calls me a noob, but he fails to see the maths of this situation. The lymeric wasn't quite accurate either, i've been around since age 1 possibly even beta. but neither beta or one would have rhymed...<br />
<br />
As for fun; I'm having fun :P Might update with a reply later, but i've got a lot to get through and some paid work i need to get done tonight so it may have to wait a while.<br />
<br />
<hr style="display:block" color="#000000" size="1" /><br />
<br />
FrostBite sent me a pm asking why i sabbed his officer. My response:<br />
<br />
The answer to your question is easy:<br />
your officer stole gold from me.<br />
Unlike the rest<br />
i think the best<br />
defense is removal from the armoury.<br />
<br />
I'm certain that wasn't the reason, however it happens to be true so meh. It made a reasonable poem. No response to this yet; might just have been delayed by koc thou. . .<br />
<br />
<hr style="display:block" color="#000000" size="1" /><br />
<br />
Now i've started sabbing with a better updated list which has added a number of new targets to my strikes. I've had an influx of demands and requests to know why I sabbed, i'll list them all here until such a time as i've responded then i'll give them each their own section.<br />
<br />
Nibiru asked why i was sabbing; suggested his/her own reason was that i wanted to quit and was sabbing at random. Asked if (s)he should sab back.<br />
<br />
hunter05 asked why the hell i was sabbing him/her, again this message was delayed in getting to me...<br />
<br />
nOObie12 this message didn't quite make sense, but from what i gathered, (s)he was trying to find out why i sabbed him/her while online. I'm tempted to respond with something along the lines of i couldn't be bothered to wait for you to go offline. It would now seem that not only online attacks are frowned upon, but online sabs as well...<br />
<br />
Kottos also asked why i sabbed.<br />
<br />
I'm wanting to come up with a generic response that i can pm people with, theres not much point coming up with unique responses for everyone when half the people never respond to it anyway.</blockquote>

]]></content:encoded>
			<dc:creator>Carnage</dc:creator>
			<guid isPermaLink="true">http://www.giveupalready.com/entry.php?141-The-lacn-timeline-according-to-me</guid>
		</item>
		<item>
			<title>On licensing</title>
			<link>http://www.giveupalready.com/entry.php?135-On-licensing</link>
			<pubDate>Sat, 20 Jun 2009 01:35:14 GMT</pubDate>
			<description><![CDATA[A recent conversation with someone about the election of members of the pirate party to the European parliament had them taking the stance that the only reason I thought it was a good thing was that I wanted to download music for free and that I wouldn't like it if people were depriving me of an...]]></description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">A recent conversation with someone about the election of members of the pirate party to the European parliament had them taking the stance that the only reason I thought it was a good thing was that I wanted to download music for free and that I wouldn't like it if people were depriving me of an income by 'pirating' software I had written. <br />
<br />
My response to this wasn't as coherent as it should have been but essentially boiled down to the fact that software I write falls into two categories; that which i'm paid to write/customize for a client and that which I give away for free. Making it very hard for someone to pirate my work.<br />
<br />
Why this is the case is because I'm of the firm belief that it isn't possible to charge fairly for software as its value is based on how it is used. Take for example, a piece of software I recently downloaded a trial for; priced at well over $100, the purpose of which is for creating/editing music tracks. There is no way I would pay $100 for this software; I was tinkering around for fun with a couple of tracks. On the other hand, someone could create and sell multiple hit records with this software, at which point $100 seems silly as they've probably made millions - to them the software has far more value.<br />
<br />
I have recently decided that for some of the mods etc that I release for free, it would be nice to receive more than $0 in donations and that some more formal license structure would be appropriate to leverage some cash from them. The idea behind this license is to embody the fact that software has different value to different people; it also stays away from too much legal speak and relies on common sense to make a judgment as to what is appropriate. <br />
<br />
How it works:<br />
<br />
I've divided users up into three broad categories; different terms apply to the different categories.<br />
<ul><li style=""> Personal use: Any one using the software for their own uses making little or no money because of it.</li><li style=""> Indirect commercial: Anyone using the software as an aid to making money. The example above of music creation software falls into this.</li><li style=""> Direct commercial: Anyone selling or distributing the software.</li></ul><br />
<br />
Things I allow anyone to do with my software released with this license: <br />
<ul><li style=""> Install and use as many copies as you like on as many machines as you own.</li><li style=""> Use it in ways not originally intended.</li><li style=""> Modify and adapt it to better suit your needs</li><li style=""> Tell anyone who asks what the software is, who wrote it and where they can get a copy.</li></ul><br />
<br />
Things you shouldn't do:<br />
<ul><li style=""> Remove any copywrite notices</li><li style=""> Sell or redistribute without my permission</li><li style=""> Pass any portion of it off as your own work</li></ul><br />
<br />
Anyone who falls into the personal use category dosen't need to pay me anything but might still like to. <br />
<br />
Anyone who falls into the indirect commercial group will in most cases not need to pay anything but you are strongly urged to make a donation.<br />
<br />
Anyone who falls into the direct commercial category needs to contact me to discuss a direct commercial license. Generally I fall by the rule of thumb that if my code makes up 10% of your product, I want 10% of the profits.<br />
<br />
Examples.<br />
I will sometimes specify uses that are considered indirect commercial/direct commercial alongside a release, if I don't, common sense should be used; as an aid I provide the below examples.<br />
<br />
1: Chess mod<br />
Personal use:<br />
A user has installed the chess mod onto a forum that is free for anyone to use.<br />
Indirect commercial:<br />
A user has installed the chess mod onto a forum, they charge a subscription fee to access this forum and often run paid chess tournaments using the mod.<br />
Direct commercial:<br />
A distributer has packaged the chess mod alongside several other gaming mods for vbulletin, they sell it for a fixed fee.<br />
<br />
2: Ad Manager<br />
Personal use:<br />
A user installs it onto a small forum which makes little or no profits from advertising.<br />
Indirect commercial:<br />
A user installs it onto a busier forum despite high hosting costs, the forum makes regular monthly profits of around $100 from adverts.<br />
Direct commercial:<br />
An advertising company is distributing a modified version of the mod to publishers wishing to display ads on their forums, the company takes a cut of all advertising revenue generated by it.<br />
<br />
There are of cause many cases not covered by the above; the examples are meant to serve as a guide not a definitive list; this license doesn't take into account other types of use eg charities, schools etc; I also refer to licensing fees as donations - essentially they are. Except in the case of direct commercial stuff, I don't consider licenses to be mandatory, just good manners. Consequently I won't be suing anyone who doesn't pay. <br />
<br />
When deciding what license you need, ask yourself what value does this software have to me? and donate accordingly. Common sense comes in very handy; if you don't have any/enough feel free to pm me with your situation and I'll make a recommendation.</blockquote>

]]></content:encoded>
			<dc:creator>Carnage</dc:creator>
			<guid isPermaLink="true">http://www.giveupalready.com/entry.php?135-On-licensing</guid>
		</item>
		<item>
			<title>Infection</title>
			<link>http://www.giveupalready.com/entry.php?115-Infection</link>
			<pubDate>Tue, 17 Mar 2009 00:06:33 GMT</pubDate>
			<description><![CDATA[A problem that plagues meny a game owner is that of how to detect multiple accounts and how to distinguish between players that are seperate and in the same house and those that are genuinely cheating. 
 
In foe, i've always kept good logs of practically every method of figuring out if an account...]]></description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">A problem that plagues meny a game owner is that of how to detect multiple accounts and how to distinguish between players that are seperate and in the same house and those that are genuinely cheating.<br />
<br />
In foe, i've always kept good logs of practically every method of figuring out if an account is run by the same person - I'm not going into specifics, but i dont just rely on ip address information. The problem has always been - how to aggregate this information to create an automated system as despite the quantity of information and scripts I have for this, I still find that i end up having to manually check accounts that the system flags up.<br />
<br />
Inspired (sortof) by biological systems, I came up with this mechanism that works well for this problem and should adapt well for other similar tasks, namely discovering similarities between entities based on their interactions.<br />
<br />
<b>How it works </b><br />
<ul><li style="">Each entity has a host 'bacteria'.</li><li style="">This bacteria is harmless to the host.</li><li style="">In high quantities (application specific) it is lethal (or demonstrates a link) to others.</li><li style="">Bacteria are spread by sharing/interacting.</li><li style="">Actions can either be additive or multiplicitive.</li><li style="">Bacteria can die off over time if a temporal relationship is also required.</li></ul><br />
<br />
<b>A sortof Example</b><br />
<br />
As mentioned, there are additive and multiplicitive actions, these are important as some actions can be totally harmless when done between two accounts that have never before interacted, however far more suspicious if other markers are in place already. For an online game, such as foe, roc, koc etc. I came up with the following actions:<br />
<br />
<b>Additive</b><br />
<br />
<font color="Lime">Sharing an Ip:</font> If an ip address used for accessing one account is subsequently used to access another; infect each account with 1 unit of the others bacteria. This action should probaly have a time limit on it as ip addresses are dynamic. The exact limit should be determined in the field.<br />
<br />
<font color="Lime">Sharing a PC:</font> This one is harder for a browser based game but can be done reasonable accuratly using a combination of javascript, cookies, browserside caches and a number of other methods. As above infect each account with 1 unit.<br />
<br />
<b>Multipicitive</b><br />
These actions are ones that demonstrate that a cheater is benifitting from having more than one account but generally for normal players are just part of game play.<br />
<br />
<font color="Red">Attacking someone:</font> Attacking a player could be indicative of using one account to boost a second, in most games this is fine between alliance members, but its obviously not fine for a cheater to do it. Its also normal game play for two people who happen to just share an ip due to being at school together for example. So a low multiply factor is used in general. However, if either of the following conditions are true, a much higher factor should be used: <br />
<ul><li style="">the defending player has recently sold/untrained a large number of men/weapons.</li><li style="">the defending player has a lot more gold than is an average for foe this can be generalised by them having more than 5 turns of gold other games will be different</li></ul><br />
<br />
<font color="Red">Attacking the same player:</font>This could be shown as an example of using one account to 'probe' for a main account, or of ganging up multiple accounts against an enemy. This is obviously not at all suspicious if the two players dont share ips/pcs as its just normal game play. The multiply factor for this should probably start of fairly low but increase the more times it happens. Time should also be taken into account - if the attacks happen within minuites its far more suspect than if attacks are hours apart.<br />
<br />
The exact factors for the above actions still need to be determined as does the 'lethal' dose of bacteria. It would also be possible to 'kill off' bacteria over time to avoid accidentilly banning someone who has two accounts but no longer uses one of them.<br />
<br />
The system is far from complete; and will require a lot of training for a certain game before being let loose on its own but this method should provide a much better way of weeding out cheats.</blockquote>

]]></content:encoded>
			<dc:creator>Carnage</dc:creator>
			<guid isPermaLink="true">http://www.giveupalready.com/entry.php?115-Infection</guid>
		</item>
		<item>
			<title>PyDj: a project to write a better DJ in python than work in local clubs.</title>
			<link>http://www.giveupalready.com/entry.php?61-PyDj-a-project-to-write-a-better-DJ-in-python-than-work-in-local-clubs</link>
			<pubDate>Sat, 31 May 2008 13:43:39 GMT</pubDate>
			<description><![CDATA[A few recent nights out have been ruined by DJ's in clubs that fail really badly at beat matching tracks - it really grates when a new track is mixed in a quater of a beat early/late.  
 
I was convinced that this wasn't really a hard thing to do - with a bit of practice i was able to match stuff...]]></description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">A few recent nights out have been ruined by DJ's in clubs that fail really badly at beat matching tracks - it really grates when a new track is mixed in a quater of a beat early/late. <br />
<br />
I was convinced that this wasn't really a hard thing to do - with a bit of practice i was able to match stuff up however, being a programmer came to the better conclusion that it shouldn't be too hard to write a program to do it automatically. <br />
<br />
Dispite PHP being my usual language of choice, it lacks the speed and abilities to handle media well, so my choice for this project was python. Python hgas the module Pymedia which provides some audio codec's and functions for playing sound. It unfortunatly lacks most of the functions i'll eventually need however does have one useful class. SpectrAnaliser.<br />
<br />
Beats are usually, very low notes; In order to match the accuratly, i'll have to filter out all high and middle notes, leaving just the beats. Due to the shockingly poor documentation for the spectranaliser class my code for this ended up very messy with debugging stuff all over the place so i'm not going to post it here. Instead i'm going to explain how the class works.<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<pre class="bbcode_code"style="height:36px;">analyzer= sound.SpectrAnalyzer( CHANNELS, SAMPLES, NUM_FREQS )</pre>
</div>That line is used to initialise the class; it has three parameters (not two as the docs suggest) <br />
<ul><li style=""> CHANNELS: the number of Channels in your music track, the documentation suggests that this may only be one and i've not tested it with more, however its possible it'll take 2.</li><li style=""> SAMPLES: this one confused me a bit, but it seems to be the number of samples it averages when analising. The minimum value for this is 32 , in my code i used 512 which is close to the maximum.</li><li style="">NUM_FREQS: i have no idea why this parameter is used for the initalisation (see later) however i've been using it set to 256 - it determines the number of frequencies that the track is split into.</li></ul><br />
<br />
Once you've initialised the class, it has two methods asBands and asFrequencies.<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<pre class="bbcode_code"style="height:36px;">analyzer.asBands(BANDS,SOUND_DATA)</pre>
</div><ul><li style=""> BANDS: the number of bands to seperate the sound into, i used 3 here to get high, mid and low you can use more however for my project 3 appeared to be sufficient.</li><li style="">SOUND_DATA: the data to analise; it should have first been decoded by a sutiable pymedia decoder.</li></ul><br />
<br />
the return from this function will be a list of lists of tuples and can be confusing as to what all the data represents. From my experiance, the tuple contains two values, the first appears to be worthless, the second contains a much more useful value.<br />
<br />
The inner lists are lists of bands; there will be as meny items in the list as the parameter BANDS.<br />
<br />
The outer list is a collection of these lists of bands as they differ over time.<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<pre class="bbcode_code"style="height:36px;">analyzer.asFrequencies(SOUND_DATA)</pre>
</div>The differance between this and the above, is instead of giving you a limited number of bands, it gives you the data split into the number of frequencies you specified in the constructor.<br />
<br />
Getting somethine useful from it...<br />
<br />
For some reason, when using asBands, the highest level band seemed to give the lowest frequencies. but anyway to get something i could use i did the following list comprehension.<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<pre class="bbcode_code"style="height:60px;">BANDS = 3
y = analiser.asBands(BANDS,sounddata)
z = [q[&lt;band&gt;][1] for q in y]</pre>
</div>where &lt;band&gt; should be replaced by the number of the band you are interested in. To get the lowest band use (BANDS -1) Now, if you save z to a cvs file or something similar and then use open office/excel/gnuplot to draw a graph of the data, you should see a representation of your song. If you pulled out the lowest band, asuming your song has clear drum beats (use a dance track for best results) you should be able to count the beats in the song.<br />
<br />
To get a count of the beats i decided upon the following algorithm. <br />
<br />
sum all values in z (from above)<br />
divide by len(z)<br />
loop through z and count all values greater than average * 2.49<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<pre class="bbcode_code"style="height:144px;">total = 0
for i in z:
	total += i
avg = total / len(z)
cutoff = avg * 2.49
cnt = 0
for i in z:
	if i &gt; cutoff:
		cnt+=1
print cnt</pre>
</div>This got me the same result as counting the beats manually on the graph.<br />
<br />
NEXT:<br />
<ul><li style="">Cleaned up version of all the code to get this far.</li><li style="">some way of calculating bpm... (can't get a correct value for track length out of pymedia atm)</li><li style="">considerations for mixing.</li></ul></blockquote>

]]></content:encoded>
			<dc:creator>Carnage</dc:creator>
			<guid isPermaLink="true">http://www.giveupalready.com/entry.php?61-PyDj-a-project-to-write-a-better-DJ-in-python-than-work-in-local-clubs</guid>
		</item>
		<item>
			<title>PHP Basics: Using php as an extra html tag in dynamic webpages</title>
			<link>http://www.giveupalready.com/entry.php?50-PHP-Basics-Using-php-as-an-extra-html-tag-in-dynamic-webpages</link>
			<pubDate>Tue, 15 Apr 2008 13:45:32 GMT</pubDate>
			<description>*Using includes* 
 
When writing a normal pure html page, you quite often have somethings which appear on every page in your site menus, header images etc. Now, what if you want to change one of these things, say you add a new page in and want to add a new link on the menu. In order to do so, you...</description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore"><b>Using includes</b><br />
<br />
When writing a normal pure html page, you quite often have somethings which appear on every page in your site menus, header images etc. Now, what if you want to change one of these things, say you add a new page in and want to add a new link on the menu. In order to do so, you would have to edit every single page on your site to put the new link in. This is very time consuming, not to mention that fact that you may not quite get it the same on every page.<br />
<br />
So, what are the solutions?<br />
<br />
Many people do this using frames, however I don't think this is the best way to do it also this is a php tutorial so i'm going to ignore this method.<br />
<br />
The basis behind the php method is using a simple function, <a href="http://www.php.net/manual/en/function.include.php" target="_blank">include</a><br />
<br />
This takes another php file and adds its contents into the current file automatically. <br />
<br />
Now to add in menus etc we need to create them as a single separate file<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">HTML Code:</div>
	<pre class="bbcode_code" style="height:9*12px};"><span style="color:#008080">&lt;table&gt;</span>
<span style="color:#008080">&lt;tr&gt;</span><span style="color:#008080">&lt;td&gt;</span><span style="color:#000080">&lt;b&gt;</span>menu<span style="color:#000080">&lt;/b&gt;</span><span style="color:#008080">&lt;/td&gt;</span><span style="color:#008080">&lt;/tr&gt;</span>
<span style="color:#008080">&lt;tr&gt;</span><span style="color:#008080">&lt;td&gt;</span>url1<span style="color:#008080">&lt;/td&gt;</span><span style="color:#008080">&lt;/tr&gt;</span>
<span style="color:#008080">&lt;tr&gt;</span><span style="color:#008080">&lt;td&gt;</span>url2<span style="color:#008080">&lt;/td&gt;</span><span style="color:#008080">&lt;/tr&gt;</span>
<span style="color:#008080">&lt;tr&gt;</span><span style="color:#008080">&lt;td&gt;</span>url3<span style="color:#008080">&lt;/td&gt;</span><span style="color:#008080">&lt;/tr&gt;</span>
<span style="color:#008080">&lt;tr&gt;</span><span style="color:#008080">&lt;td&gt;</span>url4<span style="color:#008080">&lt;/td&gt;</span><span style="color:#008080">&lt;/tr&gt;</span>
<span style="color:#008080">&lt;/table&gt;</span></pre>
</div>this would then be saved as menu.php<br />
<br />
the following could also be saved as header.php<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">HTML Code:</div>
	<pre class="bbcode_code" style="height:7*12px};"><span style="color:#000080">&lt;html&gt;</span><span style="color:#000080">&lt;head&gt;</span><span style="color:#000080">&lt;title&gt;</span>my website<span style="color:#000080">&lt;/title&gt;</span><span style="color:#000080">&lt;/head&gt;</span>
<span style="color:#000080">&lt;body&gt;</span>
<span style="color:#008080">&lt;table&gt;</span>
<span style="color:#008080">&lt;tr&gt;</span><span style="color:#008080">&lt;td&gt;</span><span style="color:#000080">&lt;h2&gt;</span>My website<span style="color:#000080">&lt;/h2&gt;</span><span style="color:#008080">&lt;/td&gt;</span><span style="color:#008080">&lt;/tr&gt;</span>
<span style="color:#008080">&lt;/table&gt;</span></pre>
</div>and finially footer.php<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">HTML Code:</div>
	<pre class="bbcode_code" style="height:6*12px};"><span style="color:#008080">&lt;table&gt;</span>
<span style="color:#008080">&lt;tr&gt;</span><span style="color:#008080">&lt;td&gt;</span>Copyright me 2006<span style="color:#008080">&lt;/td&gt;</span><span style="color:#008080">&lt;/tr&gt;</span>
<span style="color:#008080">&lt;/table&gt;</span>
<span style="color:#000080">&lt;/body&gt;</span><span style="color:#000080">&lt;/html&gt;</span></pre>
</div>Notice that there is nothing special about these files, they are only fragment of html put into a php file. This means you can just copy and paste your header from your current pages into  a new file without any editing at all. <br />
<br />
Then each of your pages would use the following php code:<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">PHP Code:</div>
	<div class="bbcode_code"style="height:108px;"><code><code><span style="color: #000000">
<span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">include(</span><span style="color: #DD0000">'header.php'</span><span style="color: #007700">);&nbsp;</span><span style="color: #FF8000">//this&nbsp;includes&nbsp;our&nbsp;header<br />//we&nbsp;close&nbsp;the&nbsp;php&nbsp;tag&nbsp;so&nbsp;we&nbsp;can&nbsp;output&nbsp;normal&nbsp;html</span><span style="color: #0000BB">?&gt;<br /></span>&lt;table&gt;<br />&lt;tr&gt;&lt;td&gt;<span style="color: #0000BB">&lt;?php&nbsp;</span><span style="color: #007700">include(</span><span style="color: #DD0000">'menu.php'</span><span style="color: #007700">);</span><span style="color: #0000BB">?&gt;</span>&lt;/td&gt;&lt;td&gt;main&nbsp;content&nbsp;for&nbsp;page&nbsp;goes&nbsp;here&lt;/td&gt;&lt;/tr&gt;<br />&lt;/table&gt;<br /><span style="color: #0000BB">&lt;?php&nbsp;</span><span style="color: #007700">include(</span><span style="color: #DD0000">'footer.php'</span><span style="color: #007700">);&nbsp;</span><span style="color: #0000BB">?&gt;</span>
</span>
</code></code></div>
</div>Notice that the php code we are using is very small, and essentially acts as another html tag in your page. The important part that you need is this:<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">PHP Code:</div>
	<div class="bbcode_code"style="height:36px;"><code><code><span style="color: #000000">
<span style="color: #0000BB">&lt;?php&nbsp;</span><span style="color: #007700">include(</span><span style="color: #DD0000">'&lt;filename&gt;.php'</span><span style="color: #007700">);&nbsp;</span><span style="color: #0000BB">?&gt;</span>
</span>
</code></code></div>
</div>Which you place where you want it to go in the page. Its as easy as adding any other html tag.<br />
<br />
The finial output of this would be:<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">HTML Code:</div>
	<pre class="bbcode_code" style="height:20*12px};"><span style="color:#000080">&lt;html&gt;</span><span style="color:#000080">&lt;head&gt;</span><span style="color:#000080">&lt;title&gt;</span>my website<span style="color:#000080">&lt;/title&gt;</span><span style="color:#000080">&lt;/head&gt;</span>
<span style="color:#000080">&lt;body&gt;</span>
<span style="color:#008080">&lt;table&gt;</span>
<span style="color:#008080">&lt;tr&gt;</span><span style="color:#008080">&lt;td&gt;</span><span style="color:#000080">&lt;h2&gt;</span>My website<span style="color:#000080">&lt;/h2&gt;</span><span style="color:#008080">&lt;/td&gt;</span><span style="color:#008080">&lt;/tr&gt;</span>
<span style="color:#008080">&lt;/table&gt;</span>
<span style="color:#008080">&lt;table&gt;</span>
<span style="color:#008080">&lt;tr&gt;</span><span style="color:#008080">&lt;td&gt;</span><span style="color:#008080">&lt;table&gt;</span>
<span style="color:#008080">&lt;tr&gt;</span><span style="color:#008080">&lt;td&gt;</span><span style="color:#000080">&lt;b&gt;</span>menu<span style="color:#000080">&lt;/b&gt;</span><span style="color:#008080">&lt;/td&gt;</span><span style="color:#008080">&lt;/tr&gt;</span>
<span style="color:#008080">&lt;tr&gt;</span><span style="color:#008080">&lt;td&gt;</span>url1<span style="color:#008080">&lt;/td&gt;</span><span style="color:#008080">&lt;/tr&gt;</span>
<span style="color:#008080">&lt;tr&gt;</span><span style="color:#008080">&lt;td&gt;</span>url2<span style="color:#008080">&lt;/td&gt;</span><span style="color:#008080">&lt;/tr&gt;</span>
<span style="color:#008080">&lt;tr&gt;</span><span style="color:#008080">&lt;td&gt;</span>url3<span style="color:#008080">&lt;/td&gt;</span><span style="color:#008080">&lt;/tr&gt;</span>
<span style="color:#008080">&lt;tr&gt;</span><span style="color:#008080">&lt;td&gt;</span>url4<span style="color:#008080">&lt;/td&gt;</span><span style="color:#008080">&lt;/tr&gt;</span>
<span style="color:#008080">&lt;/table&gt;</span><span style="color:#008080">&lt;/td&gt;</span><span style="color:#008080">&lt;td&gt;</span>main content for page goes here<span style="color:#008080">&lt;/td&gt;</span><span style="color:#008080">&lt;/tr&gt;</span>
<span style="color:#008080">&lt;/table&gt;</span>
<span style="color:#008080">&lt;table&gt;</span>
<span style="color:#008080">&lt;tr&gt;</span><span style="color:#008080">&lt;td&gt;</span>Copyright me 2008<span style="color:#008080">&lt;/td&gt;</span><span style="color:#008080">&lt;/tr&gt;</span>
<span style="color:#008080">&lt;/table&gt;</span>
<span style="color:#000080">&lt;/body&gt;</span><span style="color:#000080">&lt;/html&gt;</span></pre>
</div>Dynamically creating each of your pages.</blockquote>

]]></content:encoded>
			<dc:creator>Carnage</dc:creator>
			<guid isPermaLink="true">http://www.giveupalready.com/entry.php?50-PHP-Basics-Using-php-as-an-extra-html-tag-in-dynamic-webpages</guid>
		</item>
		<item>
			<title><![CDATA[irc 101: host masks & banning people.]]></title>
			<link>http://www.giveupalready.com/entry.php?25-irc-101-host-masks-amp-banning-people</link>
			<pubDate>Tue, 06 Nov 2007 12:37:27 GMT</pubDate>
			<description><![CDATA[It has recently come to my attention that people are unable to place proper bans and ignores so end up complaining to opers when people continue to dodge their woefully lacking bans. So i'm writing a quick referance guide on how to place proper bans. 
 
First off, lets look at the irc hostmask....]]></description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">It has recently come to my attention that people are unable to place proper bans and ignores so end up complaining to opers when people continue to dodge their woefully lacking bans. So i'm writing a quick referance guide on how to place proper bans.<br />
<br />
First off, lets look at the irc hostmask. This is a string that identifies a user. the easiest way to see this string is the whois command. the first line of output will look something like this:<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<pre class="bbcode_code"style="height:36px;"> Carnage  is BlackGhost@Cyanide-405EA211.dynamic.dsl.as9105.com * Carnage</pre>
</div>This is not the full string, it only displays their ident and host, for ban masks you also need to add the nick to the mask; the finial mask will look something like this:<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<pre class="bbcode_code"style="height:36px;"> Carnage!BlackGhost@Cyanide-405EA211.dynamic.dsl.as9105.com</pre>
</div>so, lets break that down a bit and look at what it means.<br />
<br />
The first part of the mask before the ! character is the nick name. Placing a ban against the nick name is a bad idea as someone can just change their nick to soemthing else and rejoin your channel. Nickname banning can come in useful however; in #kingsofchaos nicks like shit fuck and a bunch of others are banned, this prevents people with vulgar or racist nicks from joining that channel.<br />
<br />
The second part of the mask is between the ! and the @ this is called the ident its set based on the users settings in their irc client when they connect to the server. Once a user is connected only an ircop can change this value. Placeing a ban which includes the ident means that someone would have to disconnect from irc to dodge the ban.<br />
<br />
The third part after the @ is the host. This can vary alot between different users however unless they are using a vhost (covered later) on cyanide-x.net it will always start with Cyanide-(string of letters and numbers) This value is an encrypted version of the clients ip address. This is an example of an unencypted version:<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<pre class="bbcode_code"style="height:36px;"> Carnage is Carnage!Blackghost@79-75-247-97.dynamic.dsl.as9105.com</pre>
</div>This version is only accessable to ircops, but i've included it to help explain what the values represent. It will also remain constant while the user is connected. Usually the only way to change this value is to disconnect from the internet and get a new ip address. Banning against this value is USUALLY enough to keep a user out of your channel, however isn't always effective against a determined user.<br />
<br />
The finial part of the host mask is usually representitive of the clients isp the only way for a user to change this would be to change isp or use a proxy. So banning against the isp is the strongest ban you can place be aware however setting a ban against the isp might effect innocent users you want to be allowed in your channel.<br />
<br />
Ok, so now i've explained how to understnad the masks, this is how you can use them. The easiest way is to work out the ban you want to place yourself. For bans * acts as a wildcard for any number of characters and ? acts as a wildcard for a single character. So here are some example masks and what they will ban.<br />
<br />
carnage!*@* will ban the nick carnage from any host or ident<br />
*!blackghost@* will ban the ident blackghost from any host and any nick<br />
*!*@Cyanide-405EA211.dynamic.dsl.as9105.com  will ban the host Cyanide-405EA211.dynamic.dsl.as9105.com from your channel. no matter what nick or ident they use.<br />
*!*@*.dynamic.dsl.as9105.com will block all hosts ending in dynamic.dsl.as9105.com <br />
<br />
The easiest way to ban a host mask is the mode command. This will work on any irc client and any irc server. The syntax for this command is simple:<br />
<br />
/mode #channel +b mask<br />
<br />
broken down this means change the mode on channel #channel setting a b (ban) mode against mask.<br />
<br />
To remove a ban you would do the following:<br />
<br />
/mode #channel -b mask<br />
<br />
and to view the ban list you type:<br />
<br />
/mode #channel +b<br />
<br />
note that if you dont specify a mask it will instead list all the bans set on that channel.<br />
<br />
Ok so thats how bans work, however it may still be possible for someone to join your channel. The cyanide-x irc server has two lesser known features which work in a similar way to bans however OVERRIDE them. These are called exempts and invites.<br />
<br />
An exempt is basically the opposite to a ban, it tells the irc server that a user matching this mask is allowed to be on this channel. If you ban a user but they also match an exempt they will still be able to join the channel. The syntax for manipulating exempts is exactly the same as for bans however instead of a b you use an e for example<br />
<br />
/mode #chan +e mask<br />
/mode #chan -e mask<br />
/mode #chan +e<br />
<br />
to set, remove and list respectivly.<br />
<br />
the finial mode is an Invite. These are slightly confusing, as there is also an /invite command which acts in a similar way. The /invite command effectivly adds a tempoary I mode to the channel to allow the /invited user to join. An I mode however is permanet and will remain untill someone removes it. A user matching an I mask will be able to join if banned like if they matched an exempt however will also be able to join if the channel is set to invite only (+i) manipulations of the invites list can be done as follows:<br />
<br />
/mode #chan +I mask<br />
/mode #chan -I mask<br />
/mode #chan +I<br />
<br />
to set, remove and list. Note that you must use a capital I.<br />
<br />
I and e modes are not evil modes that allow people to dodge bans and can come in very useful for preventing users you want in your channels from geting accidentilly banned or allowing them into invite only rooms without having to be /invited however when setting a ban you must ensure that the user dosn't also match an exempt or invite or the ban will be pointless. For this reason its unadvisable to set an exempt against a nick or ident as a banned user could change to that nick in order to rejoin the channel.<br />
<br />
<b>Vhosts.</b><br />
This is a slightly seperate issue as it shouldn't be that common. Cyanide-x operates a #vhosts channel where users can go in and request their host name be changed to somthing cooler. For example mine is @bastard.global.net many of the other opers use @cyanide-x.net. <br />
<br />
If a user is using a vhost you wont see their true host mask and a ban against it will only be effective untill a user changes their host or reconnects. Using vhosts in this manner to dodge channel bans is against the network rules and if this is happening, contact an oper to have them set a ban on your channel against the users real host or suspend the users vhost privilages.<br />
<br />
<b>mirc</b><br />
<br />
for anyone using mirc there is an easier way than working out ban masks for yourself. The address identifyer will return the address of a user which you can then pass to the mode command.<br />
<br />
the syntax for the ban using the address identifyer is:<br />
<br />
//mode #chan +b $address(nick,number)<br />
<br />
note, the two / at the front of the command. This tells mirc to evaluate the command instead of just sending it and will turn the address part into the acctual address of the user. <br />
<br />
The number at the end can be one of the following:<br />
<br />
  0: *!user@host<br />
  1: *!*user@host<br />
  2: *!*@host<br />
  3: *!*user@*.host<br />
  4: *!*@*.host<br />
  5: nick!user@host<br />
  6: nick!*user@host<br />
  7: nick!*@host<br />
  8: nick!*user@*.host<br />
  9: nick!*@*.host<br />
<br />
For bans, 2 is recomended in the first instance and 4 if they continue to dodge. 2 sets a ban against the full host including the cyanide-(numbers) bit the 4 will set a ban against their isp.<br />
<br />
note, you can only use one number in the command. using 24 will not work.<br />
<br />
<br />
Finially, if you have set a strong (isp ban) against a user and they continue to use proxies to dodge the ban, contact an oper to have them dealt with at a network level. With the exception of someone using a vhost to dodge, this is the only instance where oper intervention should be needed.</blockquote>

]]></content:encoded>
			<dc:creator>Carnage</dc:creator>
			<guid isPermaLink="true">http://www.giveupalready.com/entry.php?25-irc-101-host-masks-amp-banning-people</guid>
		</item>
		<item>
			<title>Who stole the pig?</title>
			<link>http://www.giveupalready.com/entry.php?23-Who-stole-the-pig</link>
			<pubDate>Thu, 25 Oct 2007 23:13:43 GMT</pubDate>
			<description><![CDATA[To those who haven't already heard it will come as disapointing news that the private torrent site oink has been closed down. The raid took place a few days ago during which the servers were siezed by dutch police. Enough people have already bloged about how this is a waste of police time etc so...]]></description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">To those who haven't already heard it will come as disapointing news that the private torrent site oink has been closed down. The raid took place a few days ago during which the servers were siezed by dutch police. Enough people have already bloged about how this is a waste of police time etc so i'm not going to bother with that angle, however no-one has yet thought about all the data about oinks users that could well be in the hands of the nefarious riaa. <br />
<br />
Oink, like meny other private sites requires to keep certain information about upload and download ratios as well as emails, usernames and passwords. All this gives a fairly good idea of who was doing what my thoughts then led on to how this data could be stored securly without linking it to real life people in the event of the servers being siezed...<br />
<br />
Considering a number of methods a fairly obvious answer to this would be to encrypt all the user data. There is however one issue... if all the data is encrypted how can the website use it? It needs a method of decryption, the attacker in this case will have at their disposal that method of decryption so however secure you make it they will be able to get the data eventually.<br />
<br />
A second method then comes to mind. What if the data was automatically destroyed when the server was siezed? There are a number of ways to do this, the easiest would be to store it all in a memory based mysql table. Once the power goes out the data goes poof. There is two issues with this method. Firstly, storing a huge database in ram isn't really very efficient, secondally if there is a powercut or machine crash you lose all your data for nothing.<br />
<br />
Its clear a solution somewhere between the two is needed. My first thought was what if the encryption key for the data was only stored on the servers memory (and in an offsite location such as the admins home (preferably on a quick erasable flash stick)) this would allow the webserver to access the data however if a powercut occured or the server was taken the data would be unacessable. This solution does have the advantage of being able to recover your data in the event of a fault, however such recovery is only possible with admin intervention (reuploading the key) so produces a large ammount of potential downtime. So it is good, yet its far from ideal in a production enviroment.<br />
<br />
Then i came up with the following solution. The basic idea here is you split the data accross multiple tables as you would in a standard relationship database however there is no relationship between them. How can this possibly work then? Easy. Lets say you have a table with usernames in and you dont want an attacker to be able to link usernames and emails. You create the following table structure:<br />
<br />
User:<br />
userid: Primary key.<br />
username<br />
<br />
Email:<br />
emailid: primary key.<br />
email address<br />
<br />
you then create a table in memory with the following structure:<br />
<br />
userid<br />
emailid<br />
<br />
Which links the two together.<br />
<br />
Again not wholely useful as in the event of a power faliure you lose all your data. So, you need to make a copy of this data to the harddrive. This should be done on a regular basis and encrypted with a key only stored in memory. <br />
<br />
How does this help? Consider the two situations, powerfaliure and server sizure.<br />
<br />
If there is a powerfaliure, the application that needs to link usernames to emails is going to have to live with the fact that not all usernames now have emails associated with them however new accounts can be signed up and existing users can change emails (in the second case a new email id row is associated with their userid which upon reuniting the joining table with the encrypted version on the harddrive will overwrite the old one.)<br />
<br />
When the admin wakes up and signs in, he simply reuploads the key and merges the backed updatabase on the drive with the newer one. Keeping the newest entries for any key. Untill this happens the server is vunerable to a second faliure, however in this instance far less data will be lost. <br />
<br />
In the second case the server being sized, the relationship between the two items of data is destroyed and they become meaning less. The quick thinking admin also uses the quick erase button on his flash key ensuring that the data cannot be recovered.<br />
<br />
So the police have a lot of emails and usernames, still not a great situation to be in... but substantially better. The finial act of defence against this kind of attack should be insertion of fake data into the database. The only meaning full items of data in there is the relationship between items. If an item in one table has no matching item in the second it can be safly ignored by the application. However given just the tables with no relationships makes it impossible to determine which items can be ignored and effectivly makes the whole list useless.</blockquote>

]]></content:encoded>
			<dc:creator>Carnage</dc:creator>
			<guid isPermaLink="true">http://www.giveupalready.com/entry.php?23-Who-stole-the-pig</guid>
		</item>
		<item>
			<title>The ifpi</title>
			<link>http://www.giveupalready.com/entry.php?21-The-ifpi</link>
			<pubDate>Wed, 24 Oct 2007 11:57:30 GMT</pubDate>
			<description>found something that amused me during my browsing of the internet. The pirate bay, well known digital fredom activists (i think they also do torrents or something like that) are in the process of setting up a website titled the International Federation of Pirates Interests. might be well worth a...</description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">found something that amused me during my browsing of the internet. The pirate bay, well known digital fredom activists (i think they also do torrents or something like that) are in the process of setting up a website titled the International Federation of Pirates Interests. might be well worth a look when they are done. For now the site is at <a href="http://www.ifpi.com" target="_blank">www.ifpi.com</a></blockquote>

]]></content:encoded>
			<dc:creator>Carnage</dc:creator>
			<guid isPermaLink="true">http://www.giveupalready.com/entry.php?21-The-ifpi</guid>
		</item>
	</channel>
</rss>
