There will be some slight downtime later today as we transition over to a new server. We're expecting at most an hour of downtime. Before then, there may be periodic slowness as large amounts of data are moved.
Edit: The site will lock now. It'll return once the DNS settings have propgated and moved over to the new domain.
I put a script on the site that will check with stopforumspam for every page request, thanks to their DNSBL. I'm hoping this will both cut down on bandwidth and spambot registrations.
$result = curl_exec($ch); $error = curl_error($ch); unset($_SESSION['recaptcha']); if ($result == "true\nsuccess") $_SESSION['recaptcha'] = true; header("location: index.php"); } if (($isBlocked || isset($_GET['testblock'])) && !in_array($checkIP,$whitelist) && !isset($_SESSION['recaptcha'])) { header('HTTP/1.0 403 Forbidden'); $file = file_get_contents("blocked_hosts.txt"); $file .= "\n[" . date("r") . "] Blocked: $checkIP " . ($isBlocked?"Block":"Test"); file_put_contents("blocked_hosts.txt",$file); $errorCode = explode(".",$requestResult); $errorCode = intval($errorCode[3]); echo "<html> <head> <title>Blocked</title> </head> <body> Apologies, but your IP ($checkIP) is blacklisted as a spammer. <span style=\"color:#F00\">You have not been banned from Omnimaga</span>. If you believe this is in error, please e-mail <a href=\"http://www.google.com/recaptcha/mailhide/d?k=01zMDC5OWSs7zbYNzHfWcbLg==&c=xOphTe00o_PsF0UW3DYNxgM6oLOdZ92RuAQvVkgZqQM=\" onclick=\"window.open('http://www.google.com/recaptcha/mailhide/d?k\\07501zMDC5OWSs7zbYNzHfWcbLg\\75\\75\\46c\\75xOphTe00o_PsF0UW3DYNxgM6oLOdZ92RuAQvVkgZqQM\\075', '', 'toolbar=0,scrollbars=0,location=0,statusbar=0,menubar=0,resizable=0,width=500,height=300'); return false;\" title=\"Reveal this e-mail address\">[email protected]</a> for help. Please remember to include your IP, $checkIP, in the message. This site is using the DNSBL provided by http://dnsbl.tornevall.org/ <br/>Code received: $errorCode<br/>Blocked for:<br/><ul>"; if ($errorCode & 1) echo "<li>Proxy has been scanned</li>"; if ($errorCode & 2) echo "<li>Proxy is working</li>"; if ($errorCode & 8) echo "<li>Proxy was tested, but timed out on connection</li>"; if ($errorCode & 16) echo "<li>Proxy was tested, but failed at connection</li>"; if ($errorCode & 32) echo "<li>Proxy was tested but the IP was different to the one connected at (Including TOR)</li>"; if ($errorCode & 64) echo "<li>IP marked as \"abusive host\". Primary target is web-form spamming (includes dnsbl_remote)</li>"; if ($errorCode & 128) echo "<li>Proxy has a different anonymous-state (web-based proxies, like anonymouse, etc)</li>"; echo "</ul><a href=\"http://dnsbl.tornevall.org/index.php?do=usage\">Please see the DNSBL for more information on the error codes</a>"; echo '<br/>You may solve the following captcha to access the site: <form action="dnsbl.php?captcha" method="POST"> <script type="text/javascript" src="http://www.google.com/recaptcha/api/challenge?k='.$publicKey.'"> </script> <noscript> <iframe src="http://www.google.com/recaptcha/api/noscript?k='.$publicKey.'" height="300" width="500" frameborder="0"></iframe><br> <textarea name="recaptcha_challenge_field" rows="3" cols="40"> </textarea> <input type="hidden" name="recaptcha_response_field" value="manual_challenge"> </noscript> </form> </body></html>'; die(); } if (isset($_GET['clearSession'])) { session_destroy(); } ?>
If anyone has any issues with this, please let me know.
The e-mail code was generated by this (Thanks Juju) The DNSBL is provided by dnsbl.tornevall.org, and is based off of stopforumspam's blocklist.
I'm for integrating it into the existing site, but I don't know rather we should create an 'archive' forum and move all the posts in there, or move it into existing categories.
As some of you might recall, I started a project for a web-based Wabbitemu frontend about a year and a half ago. I stopped working on it after maybe a couple weeks. Recently, I picked it up again. I've reworked it into being a standalone webserver to overcome a number of issues that were caused by the more full webservers. This also simplifies the means for transferring data from the emulator to the webserver considerably.
Link: http://-snip-:81/ Note that this is running on my desktop and may not be up consistently, nor is it perfectly stable. I'll also have to ask you guys not to poke around with the server too much, it doesn't have the best of error handling.
ToDo List:
Allow variable/app uploading
Allow some sort of persistent saves, possibly through a user account system
Make the server more robust
Known bugs:
Opera tends to use high amounts of CPU with it
It's capped at 32 calculators. Any more than this will simply not load. I need to make it recycle old calculators or something.
IE
I'm planning on getting file/app uploading working on it, too.
I'll be posting the source code under whatever license Wabbit uses pretty soon, I just have a few things I want to clean up.
The 'Other Calc-Related Projects And Ideas' section should have a subforum for PC tools to aid in calculator development, no? Like 'Calculator-related PC tools'
function processTags() { var atags=document.getElementsByTagName("a"); for (x in atags) { atags[x].onclick="loadPage('"+atags[x].href+"');"; atags[x].href="#"; //This also causes it to scroll to the top of the page. } }
processTags();
This basically replaces all the 'A' tags on a page with a call to an AJAX function that loads the new page w/o refreshing.
Obviously there are incompatibility issues with this. On Omnimaga, where I tested, posting is a bit wonky, you also can't click links to sites outside the current domain.
It is considerably faster loading pages for me, though.
Also, this doesn't take a considerable amount of real-world situations into consideration, so don't be surprised if it breaks more than it does good.
If you want to give it a try, here's the JS to paste in your address bar. This should, at least in theory, work with (most) any site.
I've been thinking of ways to counteract the spambots and I believe I've came up with something.
Basically, what I'm thinking of would be a 'Mark as Spam' link on the posts that would set a ban on the bots and flag them somewhere in the admin CP, and after 2 flags per post count of the user the user is automatically banned.
I haven't actually started coding it yet, but what I'm looking at adding is essentially another column on the member table that counts how many posts have been marked as spam, along with one function to pull the value of the table, check if it is greater than the post count * 2, and if so add an automatic ban against the username.
Another feature I was considering was a minimum post count to mark as spam, along with a button on the users profile for administrators to reset/change the spam count.
Also, since I haven't ran this past the admins yet, there's no guarantee it'll be used here, but I do intend on at least making it and posting it on SMFs mod site.
Misc Clean times (Only compatible for 1.0, not 1.1. Not rewriting.) Translator* This mod is for 2.0+, I'ma look for a mod that'll work on our current forums. Donation mod* This one is really ugly code-wise, and it's broken. I'm not going to dig through it to fix it.
Edit: I'ma go ahead and install the ones with *'s next to them, since they aren't really controversial at all, and I think that they'll be liked by everyone.
OmnomIRC was turned back on earlier, after a downtime of roughly a week. Since moving TIMGUL and such didn't take as much bandwidth as I anticipated, I was able to turn it back on earlier.
Along with the bug that was causing it to flood the server with requests being fixed, it now updates text in the status bar!
Of course, the web chat will remain available for all who wish to use it at http://webchat.omnimaga.org or in the navigation bar of Omnimaga.
Due to a bug that was made very apparent after the momentary downtime earlier, OmnomIRC will be offline until further notice. OmnomIRC will likely remain offline until the first of November, due to bandwidth issues and partial rewriting to avoid this bug in the future.
I apologize for the inconvenience.
In the meantime, please feel free to join us on IRC in #omnimaga on irc.efnet.net or irc.omnimaga.org using a client of your choice, such as Mibbit or X-Chat 2. Feel free to ask in the forums if you need any help joining.
I've been toying with the idea of a plugin system for quite some time for both client and server, and eeems was asking me about it earlier, so I thought I'd document some of what I came up with.
Client-sided plugins(for the web client, javascript based):
3 return values: PLUGIN_CONTINUE - Continue parsing through all plugins, and allow OmnomIRC to display this message normally PLUGIN_NO_OUTPUT - Continues parsing through all plugins, but causes OmnomIRC not to display the message PLUGIN_BREAK - stops at this plugin, does not reach any others
Message types: OnLoad - Fired when OmnomIRC loads - No vars
OnJoin - Fired when someone joins the current channel - Name, Channel OnPart - Fired when someone parts the current channel - Name, Reason, Channel OnQuit - Fired when someone quits the current channel - Name, Reason OnKick - Fired when someone is kicked from the current channel - KickedName, KickerName, Reason, Channel OnMode - Fired when someone changes modes in the current channel - Name, Modes, Channel OnTopic - Fired when someone changes the topic in the current channel - Name, Topic, Channel
OnMessage - Fired when someone sends a message in the current channel - Name, Message, Channel OnMessageHighlight - Fired when someone sends a message that highlights the user in the current channel - Name, Message, Channel OnAction - Fired when someone sends an action in the current channel - Name, Message, Channel OnActionHighlight - Fired when someone sends an action that highlights the user in the current channel - Name, Message, Channel
The layout of the javascript plugins will be something like this:
function pluginInfo() { pluginName = "OnJoin Example"; pluginVersion = "0.01"; minOmnomIRCVersion = "2.2"; } function OnJoin() { alert(name1 + " has joined " + channel);! return PLUGIN_CONTINUE; } function Options() { document.write('<a href="#" onclick="DoThis();">Option!</a><br/>'); } function DoThis() { alert("You clicked my option!"); } registerPlugin(); registerOnJoin(); registerOptions();
There will be an option in the options page for loading them, and they will be able to output options to the options page. The plugins themselves will be largely responsible for managing their cookies and own options.
Here's what a mockup of the OmnomIRC-side loading code will be:
function loadPlugins() { for (var i=0;i<pluginList.length;i++) { //Warning: PSEUDO CODE! scrtag = new script; scrtag.src = pluginList[i]; body.appendChild(scrtag); } } function registerPlugin() { if (minOmnomIRCVersion > OmnomIRCVersion) alert("NOEP."); loadedPluginList[] = Array(pluginName,pluginVersion,minOmnomIRCVersion); }
function registerOnJoin()//Replicate for all other events { onJoinPlugins[] = Array(loadedPluginList.length,OnJoin); }
function doOnJoin(name,channel) { name = name; channel = channel; var output = true; for (var i=0;i<onJoinPlugins.length;i++) { var result = (onJoinPlugins[i][1])(); if (result != PLUGIN_CONTINUE) output=false; if (result == PLUGIN_BREAK) break; } return output; }
Server-side plugins! They will have the same events for the time being.
Hey, this is Sorunome here. Below you can find Nethams original post.
This are bindings for OmnomIRC to integrate into an IRC client, like, let's say, HexChat. Ok, HexChat is the only one I've written it for, so far. The binding is available at the repository, currently only the dev branch, so go over here: https://github.com/Sorunome/OmnomIRC2/blob/dev/omnombindings_hexchat.py
Netham45's stuff may still work, but maybe not, it is untested and heavily outdated as I changed the IRC bot a lot since. You can still check it out, though
Old code/bindings, by Netham45:
Spoiler For old:
I've written some tools to allow OmnomIRC to integrate into your IRC clients.
Here's the mIRC code, just put this into the remote.ini section of your scripts:
int xchat_plugin_init(xchat_plugin *plugin_handle, char **plugin_name, char **plugin_desc, char **plugin_version, char *arg) { /* we need to save this for use with any xchat_* functions */ ph = plugin_handle;