2008 Apr 25 - Fri
Latent Brain Power
In an article or two ago, I made a brief mention of
MapServer in relation to
throwing together a mixture of data types regarding Bermudian Visual Features.
I was thinking a little later on that this exercise becomes one of building a
spatial/temporal complex of meanings. I then got to thinking about this visually. What if
one could take a slider or a bounding box and zoom in on a part of the island, and then zoom
around in time space. It would be interesting to see what the hot spots were, and what they
were about. It would become what could be described as a space/time based Wikipedia for
Bermuda, or any location for that matter. Information is one thing, but navigating it and
relating it is another matter entirely.
Something like this would only be possible through the
Collective Intelligence of users.
The article mentions that many many people have contributed many many hours to making
wikipedia the huge compendieum that it is.
But the article goes on to say that there are still many many people out there who have
more time on their hands than they know what to do with. Lots of people have hobbies, do
public service, take care of families, etc. But how many more vegetate on the
couch in front of the 'one eyed monster' known as the TV?
This reminds me of the fact that there must be millions of computers out there sitting
idle, wasting energy, waiting for something to do. Instead of illigimately using these free
cycles to spew forth harmful spam, what if we could harness them into catalogueing, or
storage, or analysis, or ...
Seagate just sold its billionth hard drive. If we take a billion drives times a billion
bytes each (probably a woefully inadequate estimate), that is a lot of data, and probably
underutilized at that.
It is also said that we, as humans, utilize less than ten percent of our brain capacity.
And if less than ten percent of the population is mentally active (doing something other
than passively watching preprogrammed images pass through their retinas into the blackhole
of vicarious experience), that represents lots of wasted capability for enhancing humanity.
Robert Heinlein, in one of his science fiction stories, suggested that if we took the top
one percent of mankind and moved them off world to start new digs, what remained would be
unable to take care of themselves in any organized fashion. Not that we are very good at it
as it is.
Anyway, on a positive note, the article seems to think that things might be improving by
saying:
Just as people "woke up" during the Industrial Revolution, society is now beginning to
emerge from its sitcom-induced stupor to see its cognitive surplus as an asset rather than a
crisis. As a result, people are turning to Web 2.0 technologies as an outlet for that
brain-power surplus.
With appropriately designed interaction tools, we have a
reasonable hope for carving out enough of ... the collective goodwill of the citizens to
create a resource you couldn't have imagined existing five years ago. This isn't the sort of
thing that society grows out of. It is something that society grows into."
I'm liking what I am hearing.
[/Personal/Technology]
permanent link
C++ Library: ACE RADIUS
In putting together a mechanism for handling authentication and accounting with a
Cisco Voice Gateway, such as the AS5350XM, I came across the
ACE RADIUS Library. It is
self described as a free, open source portable RADIUS stack.
The stack uses ACE_Task for basic network communication.
ACE
is a very good and well respected C++ network
programming framework. I've started doing an few projects with it.
Anyway, ace-radius comes as a zip file, rather than a .gz file, so remember to unzip it
into a directory, otherwise the 'current' directory may get polluted with files.
When building, the ACE library is required, and the environment variable ACE_ROOT needs
to be set to where the ACE_wrappers directory resides. Before compiling a couple of fixes
for the current version of the compiler are required:
- CRadiusPacket.h, line 291: friend class CRadiusAttribute;
- CRadiusClientStack.h, line 109: friend class CRadiusClientConnection;
- CRadiusAttribute.cpp, line 455, 479, 1084, 1097: s/.S_un.S_addr/.s_addr/
- CRadiusClientConnection.cpp, line 65: ACE::set_flags(m_socket.get_handle(), O_NONBLOCK);
Instead of using the existing Makefiles, I copied all the source files from their various
directories into a single directory under Eclipse and compiled them into a single library.
I excluded the Client and Server test directories.
A number of good examples are provided, which show both the client and server sides.
The API is quite clean and useful. Good doxygen documentation is supplied.
I was quite impressed with how easy it was to accept an authentication request, and reply
with an accept or a deny packet.
The Radius server I'm writing is but one component of several inter-communicating network
components for talking with a voice gateway, authenticating and rating calls, collecting
call detail records, passing along realtime call information, and presenting the realtime
call status in a browser.
For the other inter-communicating components, I had them fleshed out with the
ACE_Connector and ACE_Acceptor Frameworks.
I got to the point where I needed to rework my
Wt web server/client with the
ACE Framework.
However, there became a bit of an issue. Wt uses ASIO for its network communications. This
put
me into a quandary. Recent reading is indicating that ASIO, which now comes natively in the
latest Boost release of 1.35.0, is more C++'sh than is ACE. I see that there is also much
overlap in Boost
and ACE, at least from the concepts I might need to use: message passing, threading,
inter-process communications, network communications, etc.
In ACE, I see a strength with its Service Configuration Framework and its Naming Service.
With the distributed components I'm writing, the mentioned frameworks would come in handy
for provisioning and service enablement.
However, at this point in time, I'm thinking of migrating to the ASIO/Boost way of
doing things. I'll put off thinking about the service configuration and naming stuff for
a little later. Hooefully I'll come across something suitable in the meantime.
The ACE framework is flexible and complicated, and something I was willing to negotiate
my way through. But when I see a lot of learning needed to wend my way through the Boost
libraries as well, I think I'll use Boost where I can, and then wrap ACE in something when
forced to work with it.
Which brings me back to the Ace-Radius library. I may be able to port a couple of key
ACE based classes to ASIO and not have to worry about ACE. If not, then I'll set the ACE
based
classes in a thread for acting as a Radius server, run another thread for ASIO to
communicate with my other network objects, and then have the ACE thread forward stuff to the
ASIO thread for communicating with the rest of my infrastructure.
[/OpenSource/Programming]
permanent link
Open Source Site of the Day: Map Server -- Spatially-enabled Internet Applications
I came across
MapServer
based upon a mention of someone in the Wt mailing list.
I havn't looked at all entries in the example galleries, but it might be interesting to
import the existing maps of Bermuda into this and create a tourist attraction. People could
upload points of interest, pictures, voice-overs, videos, and text. It could become an
ideal 'living historical document' of Bermuda, with everything geo-referenced.
the resulting database could be used by tourists to find points of interest, learn about
points of interest, and record their own thoughts.
With some extra work, and for those with PDA's, walking tours with roving maps could be
implemented. And if the PDA happen to have GPS in it, the roaming tour would truly be self
guided, interactive, random, and beneficial to those with a specific focus.
[/OpenSource/SiteOfTheDay/D200804]
permanent link
Running VMWare with LVM on Linux
In order to get a slight speed boost out of an OS resident in a VM, the hosted OS can be
made to use raw disks or partitions.
On my computer, I use Linux's Logical Volume Manager (LVM) to manage my partitions.
VMWare doesn't know how to decode those types of partitions.
I first looked to
vmware-bdwrapper
as a work around. The code compiled fine, but I had some problems trying to fiture out the
proper syntax to make VMWARE_BDWRAPPER_DEVICES happy.
I then gave
vmgbd a try. This is a VMWare generic
block device patch. This one worked much easier. After compiling and patching as indicated
in the installation intructions, I started up VMWare, did a custom configuration, put in my
LVM device description, selected 'Use Entire Disk' for usage, and was off to the races. The
caveat at this point is that I had to run VMWare as root. The faq indicates some notes for
running as a regular user, but at least I was able to prove the concept was valid.
As a side note, here is a
A Beginner's Guide To LVM.
Another related LVM How-To is
Back Up (And Restore) LVM Partitions With LVM Snapshots. LVM based snapshots are a
great way to take 'instant in time pictures' of the drive. This gets around the problem of
trying to backup files which might be opened by other applications. Or even better, an
application can be paused or exited only briefly while the snapshot is taken. Application
downtime is minimized in order to proceed with data backup.
[/OpenSource/Linux]
permanent link
|