I've been thinking all day on and off about Google Protobuf -type software. Protobuf is great for what it does but for online games where you want to define a reliable protocol over UDP it really is not the best you can do. So let's call it a Protocol Optimizer. We want software that can produce C++ source files that wrap buffers you send over UDP packets, to represent all the message types use... (more)
last edit by catid
edited (1 hour ago) 6:13pm Fri. Jan 27th 2012 PST
Online Codes are an unpatented approach to rateless forward error correction (FEC) codes from a 2002 paper by Petar Maymounkov. I first learned about Online Codes from a wikipedia article and since then I have been reading as much as I can about how to implement them with good performance.
Since that paper was published, Luby et al have made fantastic advancements in rateless error codes, culm... (more)
Since that paper was published, Luby et al have made fantastic advancements in rateless error codes, culm... (more)
Awesome mashups: http://madmixmustang.nl/
Albert Einstein wrote this interesting riddle during the 19th century, and said that 98% of the world population is incapable of solving it. Let's see if you are smart enough to figure it out, and prove you belong to those 2%. Remember, there are no tricks involved, just pure logic. Good luck to all of you, and don’t give up!
Riddle Facts:
1. In a street there are 5 houses, painted 5 differe... (more)
Riddle Facts:
1. In a street there are 5 houses, painted 5 differe... (more)
last edit by catid
edited (>30 days ago) 7:39pm Tue. Dec 20th 2011 PST
re:
[Respond]
I recently did a search for good, fast PRNGs with relatively small periods (2^^96 or so). The application will be to replace the table lookup-based generator used by the RaptorQ spec with one that is better in general. I wanted generators that could be seeded with one or two 32-bit numbers, which make them useful for Perlin noise generation and other tasks that are kind of half way between hashi... (more)
last edit by catid
edited (>30 days ago) 10:22am Sun. Dec 18th 2011 PST
Been working tirelessly learning all about fountain codes. I have LT codes that add 1-3% average overhead to a transmission that are presently being optimized using a genetic algorithm for different block counts and loss rates. Running a few of these in parallel with hybrid ARQ should get this down under 1%.
Compare this to TCP that has anywhere from 1-6% unnecessary retransmissions and much ... (more)
Compare this to TCP that has anywhere from 1-6% unnecessary retransmissions and much ... (more)
I have also been benchmarking fast compression algorithms lately and I recommend miniLZO to you for packet compression. It is a very well written library, and easy to integrate, with the best performance of algorithms in its class and also often the fastest codec for compression. Decompression speeds are all ridiculously fast for all fast compressors so it is not really an interesting metric. F... (more)
last edit by catid
edited (>30 days ago) 12:57pm Tue. Nov 29th 2011 PST
I have been toying with forward error correction (FEC) in my spare time and am looking into building a fountain code for file transfer. There is a lot of easily accessible information on Qualcomm's Raptor file transfer solution and it will be something like that, maybe even based on RaptorQ since that is an open standard. I think this is a great idea that works well for online game netcode, sinc... (more)
last edit by catid
edited (>30 days ago) 12:20pm Tue. Nov 29th 2011 PST
I'm using a Verizon Droid Bionic 4G LTE smartphone these days. I wanted to tether my PC to it so I can get fast internet while being mobile (in the car, etc). I've tried pdaNet and EasyTether. EasyTether was definitely better than pdaNet and it was cheaper. But, Klink just won me over.
Tried out the paid versions of EasyTether and Klink. For $5, Klink > EasyTether: 1.3 MB/s torrenting and 1... (more)
Tried out the paid versions of EasyTether and Klink. For $5, Klink > EasyTether: 1.3 MB/s torrenting and 1... (more)
last edit by catid
edited (>30 days ago) 8:38am Wed. Oct 5th 2011 PDT
So the next step is to get file transfer working. I am optimizing the Windows codebase first before porting it to other operating systems.
After reading articles and doing some testing on my own, I have discovered the optimal parameters for file write performance.
Yes: FILE_FLAG_SEQUENTIAL_SCAN. The file is being written out from front to back, and it isn't a torrent-style transfer.
Yes... (more)
After reading articles and doing some testing on my own, I have discovered the optimal parameters for file write performance.
Yes: FILE_FLAG_SEQUENTIAL_SCAN. The file is being written out from front to back, and it isn't a torrent-style transfer.
Yes... (more)
A basic logging subsystem is a prerequisite for any large C++ project. This will handle Enforcer and Recorder designs that accept the normal cout << style syntax with levels of message severity, timestamps, subsystem names, and multiple types of output based on the operating system.
Taking care of all of these details inline in the thread of execution will slow down the thread of execution, an... (more)
Taking care of all of these details inline in the thread of execution will slow down the thread of execution, an... (more)
last edit by catid
edited (>30 days ago) 2:32pm Mon. Sep 26th 2011 PDT
While TLS is not supported on MacOSX, I have heard there are ways to implement it manually for that platform. So, I went ahead and refactored my library to use TLS to simplify the code.
First challenge is that TLS does not support ctors or dtors. My solution to that is a simple wrapper:
[code]
static CAT_TLS TunnelTLS *m_tls = 0;
//// TLS
TunnelTLS *TunnelTLS::ref()
{
TunnelTLS... (more)
First challenge is that TLS does not support ctors or dtors. My solution to that is a simple wrapper:
[code]
static CAT_TLS TunnelTLS *m_tls = 0;
//// TLS
TunnelTLS *TunnelTLS::ref()
{
TunnelTLS... (more)
last edit by catid
edited (>30 days ago) 10:30am Thu. Sep 22nd 2011 PDT
Since my last articles about Singleton and RefSingleton design patterns, I've been perfecting the design to improve performance and usability.
RAII + Initialization Validation
Recall each singleton has an OnInitialize() and optionally an OnFinalize() member. Now, OnInitialize() may return false to indicate an initialization error. Users of the singleton can call X::ref()->IsInitiali... (more)
RAII + Initialization Validation
Recall each singleton has an OnInitialize() and optionally an OnFinalize() member. Now, OnInitialize() may return false to indicate an initialization error. Users of the singleton can call X::ref()->IsInitiali... (more)
last edit by catid
edited (>30 days ago) 2:10pm Fri. Sep 16th 2011 PDT
Polished off my old crypto unit tester and ran it on my laptop. I think this is pretty sexy:
[code]
C:\libcatid\build\x64\Release>"TEST ECC.exe"
Password: !!@@U^om3GQmO8b9
Password: 7e5tx@q3@H@u9uM~
Password: 6n4Ceu*dctXj0@Zw
Password: q$@@6to4@BrlR8Ah
Password: !I@R&aof3PBTFH_3
Password: i@@(!wfwG3B'68@0
Password: X(_3u229LK$8x!Xd
Password: G)ab64k@69j!Wr^8
Password: P&*#9B'22Y!218i... (more)
[code]
C:\libcatid\build\x64\Release>"TEST ECC.exe"
Password: !!@@U^om3GQmO8b9
Password: 7e5tx@q3@H@u9uM~
Password: 6n4Ceu*dctXj0@Zw
Password: q$@@6to4@BrlR8Ah
Password: !I@R&aof3PBTFH_3
Password: i@@(!wfwG3B'68@0
Password: X(_3u229LK$8x!Xd
Password: G)ab64k@69j!Wr^8
Password: P&*#9B'22Y!218i... (more)
As part of the settings file format implementation, I had to write a merge sort for singly-linked lists. I looked for some example code and came up with this:
http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html
The above version of merge sort looked like it could be unrolled a lot to avoid if statements in the inner loops. It also did a naive iteration to advance through t... (more)
http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html
The above version of merge sort looked like it could be unrolled a lot to avoid if statements in the inner loops. It also did a naive iteration to advance through t... (more)
last edit by catid
edited (>30 days ago) 10:49am Tue. Sep 13th 2011 PDT
A brief note on an old optimization trick:
This is slower than doing it in place with XOR:
However, modern compilers are really good at optimization and can actually remove a lot of operations from the naive-looking version on top. And modern compilers are NOT good at o... (more)
int a, b, temp;
temp = a;
a = b;
b = temp;
temp = a;
a = b;
b = temp;
This is slower than doing it in place with XOR:
int a, b;
a ^= b;
b ^= a;
a ^= b;
a ^= b;
b ^= a;
a ^= b;
However, modern compilers are really good at optimization and can actually remove a lot of operations from the naive-looking version on top. And modern compilers are NOT good at o... (more)
I felt the itch to write a new settings file format for my online game code. The goals are hierarchical key-value pairs, increased performance, smaller file sizes, and clean and simple look&feel. I'll compare it to XML.
Currently the standard for interpreted text data files is XML. XML has a few nice properties:
+ XSD files allow for verification of an XML according to a template.
+ Mult... (more)
Currently the standard for interpreted text data files is XML. XML has a few nice properties:
+ XSD files allow for verification of an XML according to a template.
+ Mult... (more)
last edit by catid
edited (>30 days ago) 8:50am Mon. Aug 29th 2011 PDT
RefSingleton is the name I settled on for my implementation of the ATID Singleton pattern discussed in this previous article: http://catid.mechafetus.com/news/news.php?view=263
RefSingletons are fairly complex to implement as compared to regular [RAII] Singletons: http://code.google.com/p/libcatid/source/browse/trunk/include/cat/lang/RefSingleton.hpp
To use them is easy... (more)
RefSingletons are fairly complex to implement as compared to regular [RAII] Singletons: http://code.google.com/p/libcatid/source/browse/trunk/include/cat/lang/RefSingleton.hpp
To use them is easy... (more)
last edit by catid
edited (>30 days ago) 10:39am Sun. Aug 21st 2011 PDT
I am a firm advocate of using the right tool for the right job. Overkill is a bad idea even if it would work properly. So when I started looking at revamping the object models in my library, I had to scratch my head for a while to come up with a design that could do just enough of the job without adding a lot of extra overhead or typing. I have determined that there are exactly three types of p... (more)
last edit by catid
edited (>30 days ago) 1:41pm Fri. Aug 19th 2011 PDT
I struggled today with the implementation of singletons in C++. There are lots of ways to add bugs since the static keyword is so tricky to use properly, threading is not entirely mainstream coding practice, and dynamic link library considerations are often ignored.
When I say struggle, I don't mean "Shit what is this singleton thing and how do I write one?" I mean, stepping back and asking "... (more)
When I say struggle, I don't mean "Shit what is this singleton thing and how do I write one?" I mean, stepping back and asking "... (more)
last edit by catid
edited (>30 days ago) 1:35pm Fri. Aug 19th 2011 PDT
Just played through LIMBO tonight. Great art game, and the devs didn't over-use anything. It was short because the story was minimalistic and if it went on longer it would have been boring no matter how awesome the puzzles became.

As to my theory on what the ending means? I think the boy died in a car accident and was stuck in limbo ... (more)

As to my theory on what the ending means? I think the boy died in a car accident and was stuck in limbo ... (more)
So I have started working on an online game with some artists again. No coding yet just talking about bringing Phoenix back to life. This time with two artists behind it and a lot of existing C++ code I can re-use.
The power of social (invitation-based) gaming
We are going to make it an invite-only game, even through release. Which means that I can track who is giving the game to... (more)
The power of social (invitation-based) gaming
We are going to make it an invite-only game, even through release. Which means that I can track who is giving the game to... (more)
last edit by catid
edited (>30 days ago) 10:54am Tue. Jul 12th 2011 PDT
My netcode is supposed to be resistant to attacks that do not penetrate the secure tunnel it creates between the client and server. However, the tunnel still leaks information about the data being transmitted: inter-packet timing and packet length. I cannot do much about timing, but I can make the length somewhat fuzzy.
I've added the concept of a NOP message to the protocol, code 0x00. (Kin... (more)
I've added the concept of a NOP message to the protocol, code 0x00. (Kin... (more)
last edit by catid
edited (>30 days ago) 11:45pm Thu. Jul 7th 2011 PDT
So recently life has been too real and so I decided to take yet another vacation day. I'm being really lazy and it's making me depressed. Someone's going to start yelling at me soon for not delivering the work I promised. Went back and watched all of my World of Warcraft videos too. Found some I had forgotten doing. Anyway, ended up watching some great recent movies. In order of watchability... (more)
last edit by catid
edited (>30 days ago) 10:17am Mon. Jul 4th 2011 PDT
Needed:
VMWare
Snowy_VM
Hazard's Intel Snow Leopard DVD image
This pretty much works as described in the snowy vm readme, except to get it to boot on Windows 7 x64, I needed to hit F8 on startup and type in "busratio=20" into the boot options. This allows it to boot about 50% of the time. Just keep rebooting the VM until you can log in. Hitting CTRL+ALT right after entering boot options a... (more)
VMWare
Snowy_VM
Hazard's Intel Snow Leopard DVD image
This pretty much works as described in the snowy vm readme, except to get it to boot on Windows 7 x64, I needed to hit F8 on startup and type in "busratio=20" into the boot options. This allows it to boot about 50% of the time. Just keep rebooting the VM until you can log in. Hitting CTRL+ALT right after entering boot options a... (more)
last edit by catid
edited (>30 days ago) 8:43am Thu. Jun 23rd 2011 PDT
After my MtGox account got hacked, I have taken the time to redo all the passwords on all the accounts I could remember I had online. I have a small set of passwords that I have been using based on how much I trust the site and what kind of data it protects. KeePass is a step in a better direction. Now all of my passwords (all 50 of them) are as strong as the website will allow, and all of them... (more)
last edit by catid
edited (>30 days ago) 3:03pm Tue. Jun 21st 2011 PDT
The purpose of this guide is to get QtCreator up and running from sources with a decent version of GCC on Windows, and to be able to build redistributable programs with it.
So, let's throw out 64-bit right away. 32-bit applications will continue to be supported for a long time, and 64-bit libraries in C++ are still a little iffy in places.
Next thing to throw out is the standard version of ... (more)
So, let's throw out 64-bit right away. 32-bit applications will continue to be supported for a long time, and 64-bit libraries in C++ are still a little iffy in places.
Next thing to throw out is the standard version of ... (more)
last edit by catid
edited (>30 days ago) 7:45am Fri. Jun 17th 2011 PDT
I looked around and found a good CRC-16 implementation but not a CRC-7 one so I made one.
CRC 7 code:
[code]
#include <iostream>
using namespace std;
unsigned char CRC7_fast(unsigned char crc, unsigned char data)
{
data ^= crc << 1;
if (data & 0x80)
data ^= 9;
crc = data ^ (crc & 0x78) ^ (crc << 4) ^ ((crc >> 3) & 15);
return crc & 0x7f;
}
unsigned char CRC7... (more)
CRC 7 code:
[code]
#include <iostream>
using namespace std;
unsigned char CRC7_fast(unsigned char crc, unsigned char data)
{
data ^= crc << 1;
if (data & 0x80)
data ^= 9;
crc = data ^ (crc & 0x78) ^ (crc << 4) ^ ((crc >> 3) & 15);
return crc & 0x7f;
}
unsigned char CRC7... (more)
last edit by catid
edited (>30 days ago) 2:41pm Tue. Aug 16th 2011 PDT
This one writes and then reads a file, so I can check write performance also. Slowly working towards file transfer. The file transfer rate is too low to worry too much about the disk IO layer not being able to keep up, but at least when it becomes a bottleneck I will know how to approach the problem. Latest code on http://libcatid.googlecode.com
[code]
C:\libcatid\build\x64\Relea... (more)
[code]
C:\libcatid\build\x64\Relea... (more)
last edit by catid
edited (>30 days ago) 10:34am Tue. Jun 7th 2011 PDT
Wrote a simple program to do minimal perfect hashing to idly optimize a commandline argument parser for a windows app.
http://mmocode.net/StringCompGen.zip
Here's example usage:
[code]
<snip>
// Helpers for argument parsing:
enum ArgMode
{
ARG_SWITCH,
ARG_INFILE
};
typedef cat::Delegate1<void, const std::string &> Setter;
// Get a case-insensitive hash of an AS... (more)
http://mmocode.net/StringCompGen.zip
Here's example usage:
[code]
<snip>
// Helpers for argument parsing:
enum ArgMode
{
ARG_SWITCH,
ARG_INFILE
};
typedef cat::Delegate1<void, const std::string &> Setter;
// Get a case-insensitive hash of an AS... (more)
last edit by catid
edited (>30 days ago) 12:14pm Thu. May 12th 2011 PDT
Here's a code snippet that optimizes a lookup. There's this big table called TABLE2 that is a fairly random list of "KP" values. Given a "K" value, I need to find the next highest or equal "KP" value from the list. KP values go until about 2^16.
My solution is to do a lookup table from the high 8 bits of K. The LUT points to the first entry in TABLE2 above the smallest value of K with those... (more)
My solution is to do a lookup table from the high 8 bits of K. The LUT points to the first entry in TABLE2 above the smallest value of K with those... (more)
last edit by catid
edited (>30 days ago) 9:51pm Wed. Apr 27th 2011 PDT
This one has a great summary of binary field arithmetic I have been reading through today.
http://www.cacr.math.uwaterloo.ca/ecc/
The techniques are all out of date by a few years but it is a great place to start. For example, it does not cover pseudo-Mersenne optimizations, Euler's totient function, Edwards curves, etc. But it has a lot of the basics that I need to pick up to s... (more)
http://www.cacr.math.uwaterloo.ca/ecc/
The techniques are all out of date by a few years but it is a great place to start. For example, it does not cover pseudo-Mersenne optimizations, Euler's totient function, Edwards curves, etc. But it has a lot of the basics that I need to pick up to s... (more)
last edit by catid
edited (>30 days ago) 3:47pm Mon. Apr 18th 2011 PDT
So I've been thinking more about scalable update servers and came up with a better list of servers that I want to design for my generic game netcode.
All of these can be hosted on the same PC for indie games.
I'm still not entirely sure how to do all of these. The FEC code hasn't been written yet, but I am about to start working on it after I get the file transfer cache and server up and ru... (more)
All of these can be hosted on the same PC for indie games.
I'm still not entirely sure how to do all of these. The FEC code hasn't been written yet, but I am about to start working on it after I get the file transfer cache and server up and ru... (more)
last edit by catid
edited (>30 days ago) 8:43pm Thu. Apr 14th 2011 PDT
I've been tuning asynchronous file IO for performance lately. Currently I only support asyncio on Windows so this work will need to be redone on linux and BSD systems once I get LibCat ported to those too.
These are the best combinations of parameters I could find for each system.
Parameters are:
+ 1 = No-Buffering
+ 1 = Sequential Hint
+ 16 = Number of parallel requests
+ 32768 = Size ... (more)
These are the best combinations of parameters I could find for each system.
Parameters are:
+ 1 = No-Buffering
+ 1 = Sequential Hint
+ 16 = Number of parallel requests
+ 32768 = Size ... (more)
last edit by catid
edited (>30 days ago) 7:33am Fri. Apr 15th 2011 PDT
Going to be using this design for C++ delegates soon, based on http://www.codeproject.com/KB/cpp/ImpossiblyFastCppDelegate.aspx
[code]
#include <iostream>
using namespace std;
#define CAT_INLINE __forceinline
template <class ret_type, class arg1_type>
class Delegate1
{
typedef ret_type (*StubPointer)(void *, arg1_type);
void *_object;
StubPointer _stub;
template <ret_type ... (more)
[code]
#include <iostream>
using namespace std;
#define CAT_INLINE __forceinline
template <class ret_type, class arg1_type>
class Delegate1
{
typedef ret_type (*StubPointer)(void *, arg1_type);
void *_object;
StubPointer _stub;
template <ret_type ... (more)
last edit by catid
edited (>30 days ago) 5:13am Tue. Apr 5th 2011 PDT
Been sick the last 2 days. At home from work, putting in all the hours I can spare to get my netcode working in C# so that a friend can use it for his game client.
It works!

The C# client is connecting to the server and receiving data.
It works!

The C# client is connecting to the server and receiving data.
Here's how I'm planning on doing an FTP server over RUDP:
On Windows I am opening a memory-mapped file with a set of wrapper classes. In windows the multiple views are mapped to the same file with a sequential access hint so I can let the OS handle working on what should be paged in.
The Transport class has a few new interface functions that the client or server connexion must implement:
... (more)
On Windows I am opening a memory-mapped file with a set of wrapper classes. In windows the multiple views are mapped to the same file with a sequential access hint so I can let the OS handle working on what should be paged in.
The Transport class has a few new interface functions that the client or server connexion must implement:
... (more)
last edit by catid
edited (>30 days ago) 9:21pm Sun. Feb 20th 2011 PST
When reliable ordered messages arrive out of order, they must be queued up for later delivery once the missing piece arrives. The pieces usually arrive and arrive in order. So loss is rare and the messages are rarely out of order.
I was using a big doubly-linked list and walking over the list from the end to find the insertion point for lost messages. This is inefficient because the number o... (more)
I was using a big doubly-linked list and walking over the list from the end to find the insertion point for lost messages. This is inefficient because the number o... (more)
last edit by catid
edited (>30 days ago) 2:29pm Fri. Feb 18th 2011 PST
Attempting to base flow control on one-way trip time is actually veeery educational.
I've been experimenting with a few routers, and basically they all work like this:
Push a lot of MTU-sized datagrams out at 100,000 BPS.
The more you push out, the longer the trip time in the direction you are pushing hard. The trip back for ACKs is always much shorter. Like 300 ms out and 30 ms back.
... (more)
I've been experimenting with a few routers, and basically they all work like this:
Push a lot of MTU-sized datagrams out at 100,000 BPS.
The more you push out, the longer the trip time in the direction you are pushing hard. The trip back for ACKs is always much shorter. Like 300 ms out and 30 ms back.
... (more)
last edit by catid
edited (>30 days ago) 6:50am Thu. Feb 17th 2011 PST
While rewriting my netcode, it looks as though the Windows API has let me down. I wanted a way to send multiple packets with a single API call. So my eyes lit up upon reading about how WSASendTo() allows you to specify an array of WSABUF objects.
I was hoping each WSABUF would be for a separate packet, since to retain the benefits of UDP it is important not to fragment at the IP layer. This ... (more)
I was hoping each WSABUF would be for a separate packet, since to retain the benefits of UDP it is important not to fragment at the IP layer. This ... (more)
last edit by catid
edited (>30 days ago) 1:26pm Tue. Jul 12th 2011 PDT
I've rewritten how my netcode tracks object lifetimes from the ground up. It's much more powerful!
You can do this now:
WaitForShutdown() is a powerful tool that lets me automatically request ALL watched objects to shutdown.
The game client... (more)
You can do this now:
RefObjectWatch watcher;
GameClient *client = new GameClient;
watcher.Watch(client);
......
watcher.WaitForShutdown();
GameClient *client = new GameClient;
watcher.Watch(client);
......
watcher.WaitForShutdown();
WaitForShutdown() is a powerful tool that lets me automatically request ALL watched objects to shutdown.
The game client... (more)
last edit by catid
edited (>30 days ago) 3:49pm Wed. Feb 2nd 2011 PST
What I have learned trying to implement flow control over UDP is that the basic way I was using sockets is not practical for flow control. I need to know when each packet arrives, and any delay in processing packets will skew this measurement.
Furthermore, by combining GRABBING packets with PROCESSING them in the same threads, I was forced to use Microsoft-only APIs from start to finish (IOCP)... (more)
Furthermore, by combining GRABBING packets with PROCESSING them in the same threads, I was forced to use Microsoft-only APIs from start to finish (IOCP)... (more)
last edit by catid
edited (>30 days ago) 10:16am Thu. Feb 3rd 2011 PST
Improved the comments around my counter reconstruction code to show how to use it to compress 32-bit timestamps down to 14 bits.
[code]
/*
Reconstruct a 32-bit or 64-bit counter that increments by one each time,
given a truncated sample of its low bits, and the last accepted value of the
counter. This supports roll-over of the counter and in the partial bits.
Normally this function ... (more)
[code]
/*
Reconstruct a 32-bit or 64-bit counter that increments by one each time,
given a truncated sample of its low bits, and the last accepted value of the
counter. This supports roll-over of the counter and in the partial bits.
Normally this function ... (more)
last edit by catid
edited (>30 days ago) 5:45pm Sat. Jan 22nd 2011 PST
--Definition of Clock Delta:
There is a roughly linear relationship between server and client time
because both clocks are trying to tick once per millisecond.
Clock Delta = (Server Remote Time) - (Client Local Time)
--Measurements:
Clients are responsible for synchronizing their clocks with the server,
so that the server does not need to store this state for each user.
At l... (more)
There is a roughly linear relationship between server and client time
because both clocks are trying to tick once per millisecond.
Clock Delta = (Server Remote Time) - (Client Local Time)
--Measurements:
Clients are responsible for synchronizing their clocks with the server,
so that the server does not need to store this state for each user.
At l... (more)
last edit by catid
edited (>30 days ago) 10:01am Thu. Feb 3rd 2011 PST
Motor stator design project for a course in electric machines at Georgia Tech with Jonathan Lowder:

AutoCAD 2011 drawing: http://catid.mechafetus.com/ece6335/stator_g1.dwg
Spreadsheet used to size the stator: http://catid.mechafetus.com/ece6335/best_g1_frame.ods
It looks like the magnetic flux density (B) pe... (more)

AutoCAD 2011 drawing: http://catid.mechafetus.com/ece6335/stator_g1.dwg
Spreadsheet used to size the stator: http://catid.mechafetus.com/ece6335/best_g1_frame.ods
It looks like the magnetic flux density (B) pe... (more)
last edit by catid
edited (>30 days ago) 11:54am Sun. Dec 5th 2010 PST
Slightly improved version of Nick Strupat's cache line size determination code http://strupat.ca/. He has a nice site layout -- I really need to update my CSS!
[code]
#if defined(CAT_OS_WINDOWS)
#include <cat/port/WindowsInclude.hpp>
#elif defined(CAT_OS_APPLE)
#include <sys/sysctl.h>
#else
#endif
//// Cache line size determination
static u32 _cacheline_bytes = 0;
s... (more)
[code]
#if defined(CAT_OS_WINDOWS)
#include <cat/port/WindowsInclude.hpp>
#elif defined(CAT_OS_APPLE)
#include <sys/sysctl.h>
#else
#endif
//// Cache line size determination
static u32 _cacheline_bytes = 0;
s... (more)
last edit by catid
edited (>30 days ago) 2:08am Mon. Nov 22nd 2010 PST
Out of the box, your average laptop PC will not be suitable for real-time music production, even if it is the hottest laptop on the market. More often than not, trying to produce audio in real time will be interrupted by crackles and pops from the speakers every 4 seconds to once a minute or two. Simple audio playback tools like Winamp or VLC will not be affected because they queue up audio many... (more)
last edit by catid
edited (>30 days ago) 11:12am Thu. Nov 11th 2010 PST

I edited the candles out of the jack-o-lantern with the new content-aware fill in Photoshop. That is a really amazing feature.
last edit by catid
edited (>30 days ago) 9:00pm Fri. Dec 10th 2010 PST
Work like this reminds me how much I could have accomplished as a dedicated VLSI designer:
http://www.lyricsemiconductor.com/technology-gates.htm
Here's his thesis on the subject: http://phm.cba.mit.edu/theses/03.07.vigoda.pdf
Oh well, there is still a lot of money to be made putting the legos together in unique ways! =)
http://www.lyricsemiconductor.com/technology-gates.htm
Here's his thesis on the subject: http://phm.cba.mit.edu/theses/03.07.vigoda.pdf
Oh well, there is still a lot of money to be made putting the legos together in unique ways! =)
last edit by catid
edited (>30 days ago) 11:41am Wed. Aug 18th 2010 PDT
http://catid.org/music/JustDoIt.mp3
http://catid.org/music/SnuffleCore.mp3
http://catid.org/music/SNESCatastrophy.mp3
http://catid.org/music/River.mp3
http://catid.mechafetus.com/music/Wormy.mp3
Bad Karaoke: http://catid.org/music/under_the_bridge.ogg (I challenge you to listen all the way through;-)
http://catid.org/music/SnuffleCore.mp3
http://catid.org/music/SNESCatastrophy.mp3
http://catid.org/music/River.mp3
http://catid.mechafetus.com/music/Wormy.mp3
Bad Karaoke: http://catid.org/music/under_the_bridge.ogg (I challenge you to listen all the way through;-)
last edit by catid
edited (>30 days ago) 8:48pm Wed. Aug 25th 2010 PDT
Ever growing list of British slang that I learn from frens in the UK:
fanny - vagina (no really)
bint - bitch
to get lashed - to get pissed drunk
slag - whore
ragged - fucked
shagging - fucking
ace - brilliant
arse - ass
cba - can't be arsed (can't be bothered)
ta - thanks
have a go at me - fight me
chav - worthless asshole
duck/chuck - mate/pal
gash - poor quality
wanker -... (more)
fanny - vagina (no really)
bint - bitch
to get lashed - to get pissed drunk
slag - whore
ragged - fucked
shagging - fucking
ace - brilliant
arse - ass
cba - can't be arsed (can't be bothered)
ta - thanks
have a go at me - fight me
chav - worthless asshole
duck/chuck - mate/pal
gash - poor quality
wanker -... (more)
last edit by catid
edited (>30 days ago) 5:16pm Thu. Jun 16th 2011 PDT
Mario is still king of the platformers! The last decent platformer I've played was Braid, which was a great game but relatively short. SMG2 has a lot of replay value, as even after the hardest challenges are beaten in the first 120 stars, you have to go back and replay all the levels to collect 120 hidden green stars.
What I like most about a 3D Mario game is the additional freedom of motion.... (more)
What I like most about a 3D Mario game is the additional freedom of motion.... (more)
last edit by catid
edited (>30 days ago) 9:44am Sat. Jul 17th 2010 PDT
http://www.google.com/images?um=1&hl=en&safe=off&tbs=isch%3A1&sa=1&q=stockholm+metro+art&aq=f&aqi=&aql=&oq=&gs_rfai=
I really want to see this in person one day.
I really want to see this in person one day.
Demonstration of the new connection flood protection for my network library:

It works by keeping a hash table of 32768 bins. The bin index is calculated by hashing the incoming client's IP address with a 32-bit random salt, recreated on server startup. Since no information about which bin was selected is returned to the client, it is im... (more)

It works by keeping a hash table of 32768 bins. The bin index is calculated by hashing the incoming client's IP address with a 32-bit random salt, recreated on server startup. Since no information about which bin was selected is returned to the client, it is im... (more)
last edit by catid
edited (>30 days ago) 2:54pm Mon. May 31st 2010 PDT
Harddrive: SSDSA2MH160G2R5 ($450) http://www.newegg.com/Product/Product.aspx?Item=N82E16820167024&Tpk=SSDSA2MH160G2R5
Optical: iHAS-324-98 ($30) http://www.newegg.com/Product/Product.aspx?Item=N82E16827106334&Tpk=iHAS-324-98
Monitor: 2x NEC EA231WMI ($310) http://www.newegg.com/Product/Product.aspx?Item=N82E16824002524&Tpk=NEC%20EA231WMI
Case: Thermaltake ... (more)
Optical: iHAS-324-98 ($30) http://www.newegg.com/Product/Product.aspx?Item=N82E16827106334&Tpk=iHAS-324-98
Monitor: 2x NEC EA231WMI ($310) http://www.newegg.com/Product/Product.aspx?Item=N82E16824002524&Tpk=NEC%20EA231WMI
Case: Thermaltake ... (more)
last edit by catid
edited (>30 days ago) 7:44am Thu. Apr 29th 2010 PDT
Server-side stuff is all in place now, tested and working.
So I'm moving on to the game client at last! First up: How do we import game data?
After reading a book on the subject I've decided to follow some good advice:
+ Store it all in a big file.
This makes for faster load times since operating systems sometimes have trouble with lots of little files.
+ Data that is used togeth... (more)
So I'm moving on to the game client at last! First up: How do we import game data?
After reading a book on the subject I've decided to follow some good advice:
+ Store it all in a big file.
This makes for faster load times since operating systems sometimes have trouble with lots of little files.
+ Data that is used togeth... (more)
last edit by catid
edited (>30 days ago) 9:05pm Mon. Mar 29th 2010 PDT
I threw together a little command-line tool for Windows that can proxy an active-mode FTP connection (where the client PC acts as a server for data transfer) and dumps the data transfers (GET/PUT, etc) to disk in hex to help debug a problem at work. Source included: http://catid.org/code/ftpproxy.zip
last edit by catid
edited (>30 days ago) 7:12pm Mon. Jan 25th 2010 PST
User logins are authenticated with two factors of identification: Password and key file.
The login process is performed after a secure tunnel is formed with the remote server. So, as long as the server's public key is known ahead of time, man-in-the-middle attacks are nearly impossible. The attacks against user authentication that remain only work if the server is compromised or impersonated.... (more)
The login process is performed after a secure tunnel is formed with the remote server. So, as long as the server's public key is known ahead of time, man-in-the-middle attacks are nearly impossible. The attacks against user authentication that remain only work if the server is compromised or impersonated.... (more)
last edit by catid
edited (>30 days ago) 11:47pm Sat. May 22nd 2010 PDT
Here's an application I wrote to grab and examine all of the ban ids from an earlier post.

You will note that it attempts to determine if the ID is strong enough to be used as a unique ban id, or if it is weak and cannot be used to uniquely identify a user by itself. The difference is usually whether or not there is a serial numb... (more)

You will note that it attempts to determine if the ID is strong enough to be used as a unique ban id, or if it is weak and cannot be used to uniquely identify a user by itself. The difference is usually whether or not there is a serial numb... (more)
last edit by catid
edited (>30 days ago) 10:36am Wed. Jan 20th 2010 PST
Continuing from the previous post (http://catid.mechafetus.com/news/news.php?view=209):
If a game developer has implemented most or all of the ban ids from the previous post, then chances are the best way to bypass a ban in the game is to modify the client code. It is normally a lot less work to modify the client code to change the values being sent across than to write a lot of cod... (more)
If a game developer has implemented most or all of the ban ids from the previous post, then chances are the best way to bypass a ban in the game is to modify the client code. It is normally a lot less work to modify the client code to change the values being sent across than to write a lot of cod... (more)
last edit by catid
edited (>30 days ago) 4:34pm Mon. Jan 18th 2010 PST
When players get themselves into trouble by being obnoxious, the only sensible thing to do is ban them for a while.
Players don't like being banned, so they'll fight back by trying to get around the ban. I have come up with an exhaustive list of all of the ways you can make this difficult for someone on a Windows PC. A lot of these methods will apply to other operating systems.
First off... (more)
Players don't like being banned, so they'll fight back by trying to get around the ban. I have come up with an exhaustive list of all of the ways you can make this difficult for someone on a Windows PC. A lot of these methods will apply to other operating systems.
First off... (more)
last edit by catid
edited (>30 days ago) 5:42am Wed. Jan 20th 2010 PST
There will be a few game servers to write:
Login Server (handles user logins and passes users off to zone servers)
Login Database Server (stores user names and passwords)
Zone Server (for actual gameplay)
Zone Database Server (stores user state between sessions)
For each of these servers, I need to write an administrator tool, which will then be distributed to the moderators for the syste... (more)
Login Server (handles user logins and passes users off to zone servers)
Login Database Server (stores user names and passwords)
Zone Server (for actual gameplay)
Zone Database Server (stores user state between sessions)
For each of these servers, I need to write an administrator tool, which will then be distributed to the moderators for the syste... (more)
last edit by catid
edited (>30 days ago) 11:33am Mon. Jan 18th 2010 PST
I just noticed a problem with UDP-based game servers that use one port to handle many users:
The kernel's receive buffer size set by SO_RCVBUF is allocated once per port. If someone sends a ton of UDP data to that port it will eat the receive buffer space and cause lots of packet loss for legitimate users.
I don't see any way for the server to filter out excessive data if someone is able to... (more)
The kernel's receive buffer size set by SO_RCVBUF is allocated once per port. If someone sends a ton of UDP data to that port it will eat the receive buffer space and cause lots of packet loss for legitimate users.
I don't see any way for the server to filter out excessive data if someone is able to... (more)
last edit by catid
edited (>30 days ago) 8:54pm Mon. Jan 11th 2010 PST
Based on what I have envisioned needing for my game, the following protocol is being used after spending weeks looking at alternatives and false-starts. It provides signaled disconnects, fragmentation, MTU discovery, time synchronization, three reliable ordered streams, one unordered reliable stream, and unreliable delivery.
The Transport object that implements a sender/receiver in the protoco... (more)
The Transport object that implements a sender/receiver in the protoco... (more)
last edit by catid
edited (>30 days ago) 7:40pm Mon. Jan 11th 2010 PST
http://www.loria.fr/~zimmerma/mca/pub226.html
I find the HAC to be more friendly.
I find the HAC to be more friendly.
last edit by catid
edited (>30 days ago) 1:54pm Tue. Jan 5th 2010 PST
Once a link is established between two endpoints on the Internet, the link MTU must be known in order to maximize transport performance. With higher MTU, transmitting data requires fewer packets, so less overhead per packet. Furthermore, many Internet routers balance bandwidth usage with the number of packets sent rather than the number of bytes sent, so fewer packets is better.
Online games ... (more)
Online games ... (more)
last edit by catid
edited (>30 days ago) 7:11am Wed. Jan 6th 2010 PST
or "Actors in blue suits playing actors in blue suits"






last edit by catid
edited (>30 days ago) 9:52pm Mon. Dec 21st 2009 PST
To hash an IP address and a port to get a hash table key, I have found the following function leads to nearly perfect uniform insertion across the hash table:
[code]
u32 ConnectionMap::hash_addr(IP ip, Port port, u32 salt)
{
u32 a = salt ^ ip;
// Thomas Wang's integer hash function
// http://www.cris.com/~Ttwang/tech/inthash.htm
a = (a ^ 61) ^ (a >> 16);
a = a + (a << 3);
a = a ... (more)
[code]
u32 ConnectionMap::hash_addr(IP ip, Port port, u32 salt)
{
u32 a = salt ^ ip;
// Thomas Wang's integer hash function
// http://www.cris.com/~Ttwang/tech/inthash.htm
a = (a ^ 61) ^ (a >> 16);
a = a + (a << 3);
a = a ... (more)
last edit by catid
edited (>30 days ago) 7:31am Wed. Dec 16th 2009 PST
I squeezed about 8% more performance out of the handshake by implementing a better squaring algorithm. The new algorithm is recursive. It performs two 4x4 Karatsuba squares, one 4x4 schoolbook multiply, and then shifts a product and adds it in to implement an 8x8 Karatsuba square (8 x 32 = 256 bits). And it's written in C++ so all 32-bit platforms will benefit from this change.
The schoolboo... (more)
The schoolboo... (more)
last edit by catid
edited (>30 days ago) 2:25pm Tue. Dec 1st 2009 PST
On a 32-bit Intel Xeon E5420 @ 2.50 GHz running Windows XP, I get these timing results from MSVC2008:
Public key handshake algorithms:
Key pair generation = 671 usec (server, one-time only)
Generating challenge = 565 usec (client)
Challenge processing = 624 usec (server)
Validating answer = 721 usec (client)
Encryption algorithms:
Decryption and MAC = 14 usec (varies with packet length,... (more)
Public key handshake algorithms:
Key pair generation = 671 usec (server, one-time only)
Generating challenge = 565 usec (client)
Challenge processing = 624 usec (server)
Validating answer = 721 usec (client)
Encryption algorithms:
Decryption and MAC = 14 usec (varies with packet length,... (more)
last edit by catid
edited (>30 days ago) 2:25pm Tue. Dec 1st 2009 PST
http://catid.org/code/QtDemo5.zip
This one is a sphere-normalized cube like the Windows Flower Box screen-saver except without the lighting. Uses VBO geometry and quaternion camera rotation.
I did this mainly because the vertex coordinate generation can be optimized very far:
[code]
R = number of vertices across one edge of the cube, should be an even number
S = R / 2
#de... (more)
This one is a sphere-normalized cube like the Windows Flower Box screen-saver except without the lighting. Uses VBO geometry and quaternion camera rotation.
I did this mainly because the vertex coordinate generation can be optimized very far:
[code]
R = number of vertices across one edge of the cube, should be an even number
S = R / 2
#de... (more)
last edit by catid
edited (>30 days ago) 6:35pm Fri. Nov 6th 2009 PST
http://catid.mechafetus.com/code/QtDemo4.zip
This one combines the last two to display 10,000 cubes moving in real time to some simple modulation. Check the release folder for the executables... I included two for different effects that I played with.
Working on generating good spheres right now, and integrating OpenAL for music.
This one combines the last two to display 10,000 cubes moving in real time to some simple modulation. Check the release folder for the executables... I included two for different effects that I played with.
Working on generating good spheres right now, and integrating OpenAL for music.
http://catid.mechafetus.com/code/QtDemo3.zip
This demo displays two spinning cubes using VBO when possible. I'm using GLee to manage my OGL extensions (http://www.elf-stone.com/glee.php). It's slick and easy to use.
This demo displays two spinning cubes using VBO when possible. I'm using GLee to manage my OGL extensions (http://www.elf-stone.com/glee.php). It's slick and easy to use.
last edit by catid
edited (>30 days ago) 11:33am Mon. Nov 2nd 2009 PST
http://catid.org/code/QtDemo2.zip
This one looks about the same except it's using the new linear algebra classes in LibCat to generate the camera rotation matrix. As an aside, QtCreator fully supports using CMakeLists.txt as a native project file format, so it is trivial to build and link LibCat in QtCreator.
This one looks about the same except it's using the new linear algebra classes in LibCat to generate the camera rotation matrix. As an aside, QtCreator fully supports using CMakeLists.txt as a native project file format, so it is trivial to build and link LibCat in QtCreator.
http://www.derkeiler.com/pdf/Newsgroups/sci.crypt/2008-12/msg00326.pdf
I want to be able to write this type of generator.
If I was doing it, I would use the McEliece cryptosystem using the recent work by Bernstein and Lange (http://cr.yp.to/papers.html#mceliec and http://cr.yp.to/papers.html#goppalist) and the signature construction from [url]http://www.crypt... (more)
I want to be able to write this type of generator.
If I was doing it, I would use the McEliece cryptosystem using the recent work by Bernstein and Lange (http://cr.yp.to/papers.html#mceliec and http://cr.yp.to/papers.html#goppalist) and the signature construction from [url]http://www.crypt... (more)
last edit by catid
edited (>30 days ago) 6:40pm Fri. Nov 6th 2009 PST
Something simple: Two rotating cubes. The one on the left is multisampled and the one on the right is not.
http://catid.org/code/QtDemo1.zip
The binaries are under ./release/.
I did this demo to understand the basics of 3D with OpenGL and Qt Creator. I've ordered some books on OpenGL:
"OpenGL Distilled" Paul Martz
"OpenGL SuperBible: Comprehensive Tutorial and Reference (4th... (more)
http://catid.org/code/QtDemo1.zip
The binaries are under ./release/.
I did this demo to understand the basics of 3D with OpenGL and Qt Creator. I've ordered some books on OpenGL:
"OpenGL Distilled" Paul Martz
"OpenGL SuperBible: Comprehensive Tutorial and Reference (4th... (more)
last edit by catid
edited (>30 days ago) 6:02am Thu. Oct 22nd 2009 PDT
Since I have decided to use 32-bit floats as the primary data type for my new game engine's graphical code, I have taken the time to re-familiarize myself with the many pitfalls of floating-point arithmetic. The floating-point performance of the C language is another great reminder why game developers like to use C.
Here are some interesting links related to floating-point math:
Quick guide... (more)
Here are some interesting links related to floating-point math:
Quick guide... (more)
last edit by catid
edited (>30 days ago) 8:39am Sat. Oct 17th 2009 PDT
I was going to do more with this but since I never did, here's my original The World hypertext game:
http://catid.mechafetus.com/the_world
http://catid.mechafetus.com/the_world
last edit by catid
edited (>30 days ago) 7:50am Thu. Nov 5th 2009 PST
Bono is an international humanitarian of celebrity scale and he puts on one hell of a great concert.

Bono on the Space Station monitor. In his way he says they built "this.. insanity up there.. to bring ourselves closer to you. As foolish as that sounds it really is what we wanted."
The big draw for this concert was... (more)

Bono on the Space Station monitor. In his way he says they built "this.. insanity up there.. to bring ourselves closer to you. As foolish as that sounds it really is what we wanted."
The big draw for this concert was... (more)
last edit by (Anonymous)
edited (>30 days ago) 12:40pm Wed. Oct 7th 2009 PDT
The Atlanta Botanical Gardens are located in Piedmont Park in Atlanta, Georgia. The gardens are large and impressive. They include an extensive greenhouse environment that trills with Phantasmal Poison Frogs, orchids, high altitude jungle, and low altitude desert plants.
Henry Moore's large industrial and abstract sculptures are one of the primary features of the gardens. Of the sculptures h... (more)
Henry Moore's large industrial and abstract sculptures are one of the primary features of the gardens. Of the sculptures h... (more)
last edit by (Anonymous)
edited (>30 days ago) 5:57pm Wed. Oct 7th 2009 PDT
The Georgia Renaissance Faire is a sprawling medieval tribute located just south of Atlanta. It is a great venue for jewelry crafters, tailors, acting and comedy troupes, and of course pirates are ALWAYS welcome. You can walk around with a turkey leg and some mead and enjoy shows from noon to night without seeing the same one twice. Of course there is a jousting tournament as well, which was aw... (more)
last edit by (Anonymous)
edited (>30 days ago) 9:24am Wed. Oct 7th 2009 PDT
Been playing in QtDesigner recently, experimenting with the Qt wrappers for OpenGL. My impression of QtDesigner so far is that it will become my favorite C++ IDE, even though I've managed to crash it already.
Qt provides a complete development environment that is easy to port between common desktop operating systems. Porting to the iPhone should be done specially anyhow, so I don't see a disa... (more)
Qt provides a complete development environment that is easy to port between common desktop operating systems. Porting to the iPhone should be done specially anyhow, so I don't see a disa... (more)
Fucking lame Luddite perversion of sci-fi.
I can see why this movie was made. It's because World of Warcraft has made online role-play a part of the public consciousness. Suddenly terms like "mangina" make sense to your average moviegoer. And people will get a joke about a fat guy controlling a cute girl.
It's not about robots -- it's about avatars.
Robots require power, they require i... (more)
I can see why this movie was made. It's because World of Warcraft has made online role-play a part of the public consciousness. Suddenly terms like "mangina" make sense to your average moviegoer. And people will get a joke about a fat guy controlling a cute girl.
It's not about robots -- it's about avatars.
Robots require power, they require i... (more)
Here's an MMORPG that has had a huge development cycle. Check this out, it's a video from 2006 showing that it was almost finished by most standards: http://www.youtube.com/watch?v=U1LeEpB52o8.
They're still working on it.
I've ordered this game. Aion looks amazing in videos. I want to play this game mainly to appreciate the excellent 3D artwork and animation. On top of th... (more)
They're still working on it.
I've ordered this game. Aion looks amazing in videos. I want to play this game mainly to appreciate the excellent 3D artwork and animation. On top of th... (more)
last edit by (Anonymous)
edited (>30 days ago) 7:41am Mon. Sep 28th 2009 PDT

The heroes of the Trine are an unlikely trio: a boisterous warrior, a female thief, and a wizard who cannot shoot fireballs. Through the power of the Trine they have been combined into a single body allowing just one of them to exist at a time. They journey through side-scrolling worlds that are artistically rendered and lighted, sol... (more)
last edit by (Anonymous)
edited (>30 days ago) 11:58am Sun. Sep 20th 2009 PDT
Since the whole story is never told in the movie,
the audience is left to fill in the blanks of what actually happened to lead up to this. Here's what I got from it:
So there's this scientist who creates the first sentient AI, by copying his own brain into a box. He also has somehow created a talisman that is able to manipulate the human soul (extract it, store it, give it to somethin... (more)
the audience is left to fill in the blanks of what actually happened to lead up to this. Here's what I got from it:
So there's this scientist who creates the first sentient AI, by copying his own brain into a box. He also has somehow created a talisman that is able to manipulate the human soul (extract it, store it, give it to somethin... (more)
I found these interesting stories on Schneier's blog over at http://www.schneier.com/blog/.
Reminds me of someone I knew a few years ago:
http://www.rollingstone.com/news/story/29787673/the_boy_who_heard_too_much/print
Here's a blog entry from a biohacker, which draws some fascinating parallels between biology and computing:
[url]http://www.bunniestudios.com/blog/?p=3... (more)
Reminds me of someone I knew a few years ago:
http://www.rollingstone.com/news/story/29787673/the_boy_who_heard_too_much/print
Here's a blog entry from a biohacker, which draws some fascinating parallels between biology and computing:
[url]http://www.bunniestudios.com/blog/?p=3... (more)
last edit by (Anonymous)
edited (>30 days ago) 3:27pm Wed. Sep 2nd 2009 PDT
Here are some timing results for a 1.2 GHz Core 2 with DDR2 @ 800, running 64-bit Linux:
Signatures:
Server: Signature generation time = 419 usec
Client: Verifying signature generation time = 479 usec
Key agreement:
Server: Processing challenge took 475 usec
The 64-bit version of LibCat is pretty damn fast, even on modest hardware!
On my Core i7 it takes about 341,994 cycles to:
... (more)
Signatures:
Server: Signature generation time = 419 usec
Client: Verifying signature generation time = 479 usec
Key agreement:
Server: Processing challenge took 475 usec
The 64-bit version of LibCat is pretty damn fast, even on modest hardware!
On my Core i7 it takes about 341,994 cycles to:
... (more)
last edit by (Anonymous)
edited (>30 days ago) 6:20am Tue. Sep 1st 2009 PDT
So I am trying to figure out if a curve over a 256-bit GF(p) with a generator point of order q (large prime) is secure against Tate-Lichtenbaum pairing, which allows the ECDLP to be solved on an equivalent curve in GF(p^k) using Weil descent.
The value of k is determined using the following process, according to how I am reading the Handbook of Elliptic and Hyperelliptic Curve Cryptography:
... (more)
The value of k is determined using the following process, according to how I am reading the Handbook of Elliptic and Hyperelliptic Curve Cryptography:
... (more)
last edit by (Anonymous)
edited (>30 days ago) 3:33pm Fri. Aug 28th 2009 PDT
256-bit, 384-bit and 512-bit curves are now secure again, and I have added code to the ECC test that verifies the security of the curve parameters.
Schnorr signatures are implemented and are pretty fast.
The new Tabby protocol has been implemented and optimized to be almost twice as fast as before on the server, by re-using ephemeral keys with some lockless code.
[b]New timing results:[... (more)
Schnorr signatures are implemented and are pretty fast.
The new Tabby protocol has been implemented and optimized to be almost twice as fast as before on the server, by re-using ephemeral keys with some lockless code.
[b]New timing results:[... (more)
last edit by (Anonymous)
edited (>30 days ago) 7:59pm Tue. Aug 25th 2009 PDT
When using the friendly pseudo-Mersenne modulii of the form p = 2^256 - c...
Something I haven't noticed in any papers yet on Twisted Edwards curves over Fp but is important in practice is the fact that the addition and doubling laws have no exceptions for a=-1 and any suitable d that generates a large prime order subgroup with cofactor 4 so long as the field prime p = 1 mod 4. Any p = 3 mod 4... (more)
Something I haven't noticed in any papers yet on Twisted Edwards curves over Fp but is important in practice is the fact that the addition and doubling laws have no exceptions for a=-1 and any suitable d that generates a large prime order subgroup with cofactor 4 so long as the field prime p = 1 mod 4. Any p = 3 mod 4... (more)
last edit by (Anonymous)
edited (>30 days ago) 5:44pm Sat. Aug 22nd 2009 PDT
I slapped these settings together really quick based on the OrenEllenbogen_DarkSchema. It's dark and mellow -- easy on the eyes and not bright. I added some more colors and changed the font.
http://catid.org/code/CatidMellow.vssettings
http://catid.org/code/CatidMellow.vssettings
So, I had some trouble while implementing Schnorr Signatures (http://en.wikipedia.org/wiki/Schnorr_signature) for LibCat. At first I thought there was something wrong with my interpretation of the algorithm. It turned out to be much worse!
Right now I am searching for new secure curve parameters...

(Right-click : View ... (more)
Right now I am searching for new secure curve parameters...

(Right-click : View ... (more)
last edit by (Anonymous)
edited (>30 days ago) 6:08pm Wed. Aug 19th 2009 PDT
This humor in this game withstands the test of time, but the art and music do not...
Fortunately, LucasArts has released a Special Edition of the game with completely revamped artwork, music, sound, and voice-overs. It's hilarious! Try it, or taste the fizzy wrath of my root beer!
More info at the official site: http://www.lucasarts.com/games/monkeyisland/
Hint: While playing... (more)
Fortunately, LucasArts has released a Special Edition of the game with completely revamped artwork, music, sound, and voice-overs. It's hilarious! Try it, or taste the fizzy wrath of my root beer!
More info at the official site: http://www.lucasarts.com/games/monkeyisland/
Hint: While playing... (more)
last edit by (Anonymous)
edited (>30 days ago) 8:28pm Sun. Jul 26th 2009 PDT
Chromium Developers have invented a novel way to keep their users up to date with the latest version of their browser. It's called Courgette (http://dev.chromium.org/developers/design-documents/software-updates-courgette), a disassembler and assembler that allows them to improve compression of executable file updates by about 88% over a naive transmit-the-difference approach.
When i... (more)
When i... (more)
last edit by (Anonymous)
edited (>30 days ago) 6:08pm Wed. Jul 22nd 2009 PDT
The new site is hosted by Google Code, here: http://libcatid.googlecode.com/. The LibCat link on the right will now navigate to this new site.
I am maintaining a wiki, bug tracker, and news for the project at the new address.
The code is now under the Lesser GNU General Public License, allowing usage in proprietary software.
I am maintaining a wiki, bug tracker, and news for the project at the new address.
The code is now under the Lesser GNU General Public License, allowing usage in proprietary software.
last edit by (Anonymous)
edited (>30 days ago) 5:21am Wed. Jul 22nd 2009 PDT