Yahoo and Google: Uh-Oh…

I’m sure there aren’t many nerds out there who haven’t heard about Microsoft’s many attempts to buy Google in a bid to break into the search-engine market. Fortunately, up until now, Yahoo has refused, but this time, they’ve only gone as far as saying the business equivalent of “no comment.”

I’ve lamented these kinds of unholy unions before (for example, when Google bought Youtube), and in my (somewhat limited) experience, they never turn out well. When one company buys another, it usually has something very sinister in mind, and I’ve learned that that goes doubly so for Microsoft.

Not that I give a damn about Yahoo. I’ve been a member of the “cult of Google” for some years now. But, still, if Microsoft and Yahoo get together, who knows what kind of market-gobbling, grotesquely-deformed progeny might result? What next, will Microsoft be working busily to make Yahoo Search harder and harder to use, all the while being secretive and difficult and overcharging for everything? Will they try to get their hands on Google, too?

I’m aware that this is rather paranoid, but I assure you, that I am not (literally or metaphorically) wearing a foil helmet as I type this. I believe that there is a legitimate concern to be had in the monopolization of such a large horizontal slice of the information-technology market by one juggernaut corporation. If they get their fingers in too many pies (that’s a very odd expression, if you think about it), it seems that Microsoft wouldn’t have too much trouble subduing or at least delaying the open-source revolution so many of us tech-nerds have been dreaming of for so long. And what’s more, in a monopolized market, there is the obvious fact that the monopolist can charge exorbitant prices for crappy products.

Those are my thoughts. Take from them what you will. (That was my melodrama; do with it what you like).

Review: “SimCity Societies”

Ever since I first played the original Sim City Classic sometime last century, I’ve been a fan of pretty much all of Will Wright’s games. I’m the sort of guy who really enjoys open-ended experimentation, and Will Wright certainly delivers in that department. I played the original “Sims” for untold hours, and The Sims 2 for untold hours more. Needless to say, when I stumbled across an advert for his upcoming game Sim City Societies, I was immediately interested.

The game’s basic premise is something like a combination of The Sims and Sim City 4. You build your city from premade parts such as row houses and workplaces, and all that other good stuff. Each of these buildings produces or consumes a slew of things. Most buildings consume power, and the other kinds of standard resources, but what’s interesting about SimCity Societies are the societal resources buildings produce and consume. The “Propaganda Ministry,” for example, produces 40 units of what the game calls “Authority.”

After taking a brief run through the tutorial — which, I must say, was rather more controlling than many I’ve experienced — I decided to get to work constructing my own society. I plunked down some wind farms for power, and built a couple of row houses, then struck upon the idea to see if I could build something of a dystopian Orwellian hell-hole. I went to work immediately, building Conditioning Theaters, police stations, and of course, the obligatory Re-Education Facility. It didn’t take long for my authoritarian society to begin collapsing. Criminals ran wild, unhappiness was rampant, and rioters rapidly shut down all of my bureaucracy offices.

After about ninety mintues’ worth of play, I discovered another of the game’s lovely little aesthetic features. As my society leaned more and more towards a totalitarian police state, the road’s appearance changed. Now, where there had been plain asphalt roads, the roads were replaced with some kind of bland stuff that could only be described as “institutional concrete.” Then, as I scrolled around my city to see what else had changed, I happened to notice the security cameras sprouting from every lamppost, and the listening devices atop the fire hydrants. This had to be one of the game’s most endearing features.

All that said, it should come as no surprise when I say that “SimCity Societies” is incredibly fun. Will Wright’s high standard of simulation design has not faltered, and this game may arguably be one of his deepest yet. The dynamics are incredibly rich, it’s creative and energetic, and — thankfully — it has all the personality that Wright’s games have been lacking of late; he finally brought back the ever-amusing News Ticker, and seemed to finally be re-incorporating some of his famous dry wit, which I found disappointingly absent from The Sims 2.

One of the game’s features which was pleasantly surprising was the music. Since Sim City 3000, Will Wright’s games have always had great music, and SimCity Societies was no exception. The game’s music is pleasant, atmospheric, and generally lovely. What surprised me, though, was how appropriate it was. As my socialist dystopia began to blossom, I was regaled with what sounded like an amusingly modern rendition of the Russian National Anthem, a perfectly ministerial, bureaucratic piece for my ministerial, bureaucratic city. And when I leaned a bit towards environmentalism, I was rewarded with a very soothing New-Agey piece that sounded like it belonged in an Al Gore film.

But what kind of reviewer would I be without complaints? I suppose my chief complaint would have to be the graphics: they’re somewhat excessive, and ran a little slow with the default settings. I had to dial the resolution down to 800×600 and turn off the shadows and day-night cycle altogether to get it to run smoothly enough to be playable. Another problem is that the game is a bit hard to get into at first, since the menu system is so incredibly complex.

The game is also plagued at times with a feeling of excessive direction. Maybe it’s because I haven’t played it long enough to really explore the possibilities, but there are some facets of SimCity Societies which give the general impression of being overly rigid.

But the thing that irritated me the most was the evil hand of British Petroleum (BP, the oil company) marring Will Wright’s otherwise-environmentalist game. Somehow — don’t ask me how — they conspired to have their name and logo put on the wind power plants, and on the signs at the gas stations in the game. What is this? Some kind of subliminal advertising? It struck me as incredibly sinister, and irritated me to no end. Whatever they might like to think, as long as they buy and sell petroleum products, BP will never be as environmentally-friendly as they think they are.

Still, SimCity Societies is a lot of fun, and it looks poised to revive Will Wright’s now-sluggish gaming juggernaut. It will certainly keep myself and my fellow simulation junkies glued to their monitors for the rest of the winter, or at least until Spore comes out.

Overall Rating: ********~~ (8/10 asterisks)

Hebbian Neural Networks

Against all odds, I’ve started an A.I. project, and have actually made some progress. I never thought I’d see the day. It’s not a whole lot of progress, but when you’ve been tinkering as long as I have, you learn to take what you can get.

What I’ve got is a fairly simplistic neural network model, utilizing Hebbian learning. That is to say, whenever two neurons in the network happen to be switched on at the same time, their connection gets stronger. For the last week or two, I’ve been tinkering with the parameters and different methods of inputting the data, and I finally have something that performs something roughly like learning.

I feel the need to repeat that last part: roughly like learning. I have no idea if it’s actually learned anything. Sometimes when I test it, it seems to be able to predict simple patterns, and learn how to tell a small prime from a small non-prime. Other times, it becomes so profoundly stupid that it actually anti-learns, refusing to respond to any stimulus even remotely like its training data. And at yet other times, it doesn’t do anything at all.

This last bit is worsened by my habit of taking a perfectly good program, tinkering with it until it becomes unusable, then accidentally saving over the original. The fact that I wrote the program in Python makes that all the worse, since with Python, you have to save the program every time you run it, and I’ve gotten into the bad habit of just pressing F5 without making sure I’ve saved a backup. The end result is that the current version is pretty much nonfunctional.

Still, the very fact that I was able to write an implement a neural network model makes me pretty happy. I’ve always had trouble handling networks, and now it seems that I’ve got something vaguely workable. So, without further ado (or further clichés), I present to you (okay, one more cliché) Hebbian v5.0 (be warned: there is quite a lot of garbage code and artifacts in there, and frankly, I’m too damn lazy to take it out. Hey, if the human genetic code can be full of junk DNA, then why can’t my code?):

(Written in Python 2.43 (I think))

################################################################################
#Hebbian, version 5.0 #
#Written by Asymptote. #
#Feel free to modify and distribute this code (I dont’ know why you’d want to, #
#but hey, whatever makes you happy), as long as you keep this header intact. #
################################################################################

import random
import math

connectivity = []
activation = []
ns = 100

for i in range(0,ns):
activation.append(0.1)

temp = []

for i in range(0,ns):
temp = []
for j in range(0,ns):
temp.append(0)
connectivity.append(temp)

def sign(n):
if n == 0:
return 0
else:
sg = abs(n)/n
return sg

def transmission(act,conn,nsize,thresh):
summ = 0
for a in range(0,nsize-1):
summ = 0
for b in range(0,nsize-1):
summ += act[b] * conn[a][b]
if float(summ)/float(ns) > thresh:
act[a] = 1
else:
act[a] = 0

def hebbian(act,conn,nsize):
for a in range(0,nsize-1):
for b in range(0,nsize-1):
if act[a] == act[b] == 1:
conn[a][b] += sign(conn[a][b]) * 0.1
for a in range(0,nsize-1):
for b in range(0,nsize-1):
conn[a][b] -= sign(conn[a][b]) * 0.01
for a in range(0,nsize-1):
for b in range(0,nsize-1):
if conn[a][b] > 1:
conn[a][b] = 1
if conn[a][b] < -1:
conn[a][b] = -1

def run(act,conn,nsize,thresh,runlength):
for i in range(0,runlength-1):
transmission(act,conn,nsize,thresh)
hebbian(act,conn,nsize)
print act

def actprint(act,nsize):
strg = “”
for a in range(0,nsize-1):
if act[a] == 1:
strg+= “#”
else:
strg += “_”
print strg

def connprint(conn,nsize):
printarr = []
tempstr = “”
for a in range(0,nsize-1):
tempstr = “”
for b in range(0,nsize-1):
if abs(conn[b][a]) > 0.5:
tempstr += “#”
else:
tempstr += “_”
printarr.append(tempstr)
for a in printarr:
print a

def striphex(i):
s=i
h=i%255
h=hex(i)
h=h[2:]
if s<16:
h=”0″+h
return h

from Tkinter import *
root = Tk()
w = Canvas(root,width=1000,height=1000)
w.pack()

def Binary(n):
out = “”
x = n
while x > 0:
out = str(x % 2) + out
x = (int(x / 2))
return out

def make_input(n,ml):
bin = Binary(n)
inarr = []
for i in range(0,len(bin)):
inarr.append(int(bin[i]))
while len(inarr) <= ml - 1:
inarr = [0] + inarr
return inarr

def drawnetwork(numnodes,connectivity):
import random
points = []
for i in range(0,numnodes - 1):
points.append([random.randint(0,1000),random.randint(0,1000)])
for i in range(0,numnodes - 1):
for j in range(0,numnodes - 1):
if abs(connectivity[i][j]) > 0.1:
if i == j:
w.create_line(points[i][0],points[i][1],points[i][0]+25,points[i][1],points[j][0],points[j][1]+25,points[j][0],points[j][1],smooth=TRUE,fill=”#”+striphex(255-abs(int(connectivity[i][j]*255)))+striphex(255-abs(int(connectivity[i][j]*255)))+striphex(255-abs(int(connectivity[i][j]*255))))
else:
w.create_line(points[i][0],points[i][1],points[j][0],points[j][1],arrow=LAST,fill=”#”+striphex(255-abs(int(connectivity[i][j]*255)))+striphex(255-abs(int(connectivity[i][j]*255)))+striphex(255-abs(int(connectivity[i][j]*255))))

def drawconn(numnodes,connectivity):
for a in range(0,numnodes-1):
for b in range(0,numnodes-1):
w.create_line(a,b,a+1,b+1,fill=”#”+striphex(255-abs(int(connectivity[a][b]*255)))+striphex(255-abs(int(connectivity[a][b]*255)))+striphex(255-abs(int(connectivity[a][b]*255))))
#drawconn(ns,connectivity)
#drawnetwork(ns,connectivity)
xor = {”00″:0,”01″:1,”10″:1,”11″:0}
#connprint(connectivity,ns)

def isprime(n):
for i in range(2,n-1):
if n % i == 0:
return False
return True

primelist = []

for i in range(2,1000):
if isprime(i) == True:
primelist.append(i)

for i in range(1,1000):
#activation[primelist[i]%ns] = 1
#activation[(ns - primelist[i])% ns - 1] = 1
for a in range(0,ns-1):
if (a + i%2)%10 == 0:
activation[a] = 1
actprint(activation,ns)
hebbian(activation,connectivity,ns)
transmission(activation,connectivity,ns,0.1)
#actprint(activation,ns)
#print “***”

print “*”*100
connprint(connectivity,ns)

#Good threshold = 0.25

drawnetwork(ns,connectivity)
drawconn(ns,connectivity)

mainloop()

The Singularity

For the past few decades, an idea referred to as “the Singularity” has been bantered about by futurists and technologists. Basically, the theory of the Singularity goes something like this:

Given the rapidly accelerating pace of technological advance, and the fact that, eventually, we will develop artificial intelligence capable of driving further technological advance at a faster pace than human beings ever could, we will eventually reach a point in our advancement where the rate of advance accelerates towards infinity.

Now, this idea may sound rather batty, but just consider this: the Universe formed some 13.7 billion years ago. The solar system, about 4.6 billion years ago. Multicellular life: 500 million years ago. Primates: 5 million years ago. Language: 40,000 years ago. Civilization: 10,000 years ago. The Enlightenment: 400 years. The Industrial Revolution: 150 years. Computers: 50 years. The Internet: 10 years. “Web 2.0″: 2-3 years. Each of these paradigm shifts is happening after a shorter and shorter delay, and, unless we manage to wipe ourselves out somehow (not exactly a remote possibility), then it seems that such a rapid acceleration of technological advance is inevitable.

A much better treatment of this idea can be found in Ray Kurzweil’s book The Singularity is Near. A fictionalized version of the idea graces Charles Stross’s (probably the best Singularitarian author I know of) book Accelerando. But, since you were nice enough to visit me in this little pocket of the Internet, I thought I’d give you a condensed timeline of the predicted unfolding of the Singularity:

  • By about 2015: Practical artificial intelligence is created and comes into use. The A.I.’s can’t pass the Turing Test yet, but they’re very useful in many venues, and they’re advancing all the time. Artificial-Intelligence methods are used to design new technologies, sowing the seeds of the Singularity.
  • By about 2030: The first practical neural implants enter the market. These implants enhance human capabilities immensely, marrying the speed and stability of electronic circuits with the redundancy and plasticity of human neurons.
  • By about 2040: Human-level A.I. is born. Computers and robots gain civil rights, and begin competing with their human makers.
  • By about 2050: The aforementioned neural-implant technology combines with artificial intelligence and allows human minds to be “uploaded” and maintained in computers. The merging of mind and machine begins.
  • By the late 21st century: Nonenhanced humans are completely “obsolete.” Computing power continues to increase. Nanotechnology allows computers to infiltrate every part of our lives.
  • The end of the 21st century: The Singularity arrives. All of the computing power on Earth merges into one vast super-intelligence, which begins expanding out into the Universe.
  • Sometime next century: Nanotechnology begins dismantling all the matter in the solar system, and some matter in nearby space. All is converted to “intelligent matter” capable of performing ultrafast calculations for a tiny energy cost.
  • Who Knows When: The Singularity-Consciousness evolves to the point that it is capable of manipulating matter and energy on the smallest scales, and thus “reprogramming the universe.” New universes can be created to escape the inevitable demise of this universe.
  • After That: Consciousness controls the entire Universe, and many beyond it. It can create universes at will, and expand infinitely. Frank Tipler calls this the “Omega Point.” Some Singularitarians call this “God.”

The really creepy thing is that, in all likelihood, I, being a young and fairly healthy person, will live to see this. Barring some sort of unfortunate incident, I — and probably quite a large fraction of my readers, too — will live long enough to be absorbed into the Singularity. And, since we will then be able to escape from our physical bodies, we will live essentially forever.

Food for thought, as usual.