come on down to clug park and meet some geeks online

01 September 2010

Simeon Miteff (simeon)

The smart phone I would want

Until I can use the same software I use on my two computers, on a mobile phone, I don’t consider the “smart phone” to be a general purpose computing device. Paul Graham has a similar metric, he wants the device to be capable of hosting it’s own development environment.

Graham, among many others, has done a good job of describing how Apple has crippled the iPhone in this regard by locking down the platform and imposing a broken app store model to “publish” software that runs on it. Instead of re-hashing the ecosystem issues surrounding mobile phone platforms, I have a technical wish list:

  1. Hardware and software feature parity with best smart phones out there:
    • Quality touch interface, high resolution display, good battery life, all the right radio hardware (GPS, GSM, Wifi, UMTS), sufficient storage and CPU power
    • Software to support standard phone use-cases out of the box: turn-by-turn navigation, tethering, web browsing, full multimedia support, camera functions, etc.
  2. The same Open Source UNIX-like operating system I use on other platforms: this happens to be Linux
  3. A familiar, quality package system like Debian’s.
  4. The ability to cross-compile and run any application I could use on my PC (this implies X11 support).
  5. Support for standard peripherals (USB host/otg).

Neither the iPhone, nor any Android-based phone meet these criteria.

The Nokia N900 comes very close, but it’s still missing software support for some standard smart phone use cases. Although I’m a bit disappointed about the Maemo -> Meego move throwing dpkg out in favor of RPM, I still have hope for the Nokia, and I’m interested to see them finish the software (Hi Edwin).

Finally, I want hardware support for an external display. That might sound weird, but if a phone is really a general purpose portable computing device, then you should be able to “dock” it at your desk, like one does a laptop. Maybe I don’t “get” smart phones, but I prefer the view that the world is wrong.

Anyone with me on this? I would appreciate some comments.

Update: The Nokia N9 prototype running Meego seems promising. I guess we’ll see when it’s launched.

by Simeon Miteff at 01 September 2010 01:02 PM

Localloop.co.za now locally hosted

One of the weird ironies about this blog has been that although it is focused on networking in South Africa, the web server hosting it for the last ~two years was a Linode.com virtual machine in New Jersey, USA. The server’s IPv6 connectivity was via tunnel to HE.net in New York.

Now, thanks to the generosity of my friends at IPINX, this blog is hosted in Midrand, Gauteng and it has native IPv6. I would guess this is probably one of the few web servers in South Africa with native v6 outside of AS2018.

I took the opportunity to upgrade to the latest WordPress. If you spot anything thats broken, please let me know.

by Simeon Miteff at 01 September 2010 12:59 PM

30 August 2010

Johann Botha (joe)

Quick Update

I’m writing this one from Athens..

  • ~30 hours in the air this week.
  • Monday, backups, camera battery charging, gym, swim, lunch at Balduci’s with Jonathan and hardware crypto vendors, bought a UPS and installed it for my workstation, last minute packing, packed Mia’s bee suitcase, Georg gave Mia and I a lift to the airport, flew to London with BA, Club World seats are pretty awesome, had a Kir Royale while listening to Blonde on Blonde, read a book about Greece, watched Sherlock Holmes.. not bad, Mia watched How to train your dragon again and slept for a good 7 hours.
  • 11 hour flight, 1 hour backwards. Must say the Boeing 747-400 is like a flying fortress, smoothest take-off ever.
  • Alexander the Great died when he was 33. Impressive.
  • Tuesday, we woke up to land at Heathrow, tea, took a bus to Stansted airport to drop Mia off with Naulene, train to London CBD, met Jacques for a sushi lunch, work, London curry and some Johnnie Black.
  • Wednesday, woke up at Jacques house, flew from Heathrow to Boston Logan with American Airlines (not something I’ll easily do again), sat next to a Alvaro, who is from Guatemala.. doing a PhD related to the flexible electronics market at MIT, bus and train ride to Cambridge, nice place, found a guest house, took a walk down Mass. Ave.
  • 7 hour flight, 6 hours backwards.
  • Mia went to Cambridge for a week, then Germany for a week. So both Joe and Mia were in Cambridge, just not the same Cambridge. I phoned her, she seemed happy.
  • Thursday,VRM+CRM 2010 day1 at Harvard Law School, dinner at a seafood restaurant with the conference people, when we finished dinner it was 3:30 SA time.. tired.
  • Cambridge is a bit like Stellenbosch, only there is free wifi pretty much anywhere and everybody has an iPhone4.
  • Friday, VRM+CRM 2010 day2, a sunset walk.
  • US food: Naked Smoothies and the salads at Harvard were great. I tried a Dunkin’ Doughnut (half), had a Big Mac, had (most of) a Hershey bar, wanted to try Wendy’s but did not get around to it.
  • I figure people like order. Deterministic outcome. After a week of creating order it’s time to go experience some unknowns. A ten day mini-break in Greece. Time to go visit the birth place of democracy.
  • A thought about visa applications from countries who are very strict about their visas: I wonder what percentage of their own citizens would make it through their visa process if they were not born there.
  • Alvaro made an interesting comment about not really knowing where home is.. South America, UK, US? I think you don’t feel at home anymore if you leave a place for more than 5 years. Alvaro also commented that the most popular technologies are usually not the best technologies.
  • Saturday, blogged about VRM things, a tourist/photography day, took the train to MIT, found the MIT Media Lab, had McDonalds for lunch.. seemed like an experience you need to have at least once in the US.. they did not ask me if I wanted to supersize my meal, train/bus to Logan airport, flew to Heathrow with BA, watched She’s out of my league.. pretty good.
  • 7 hour flight, 6 hours forward.
  • Sunday, flew from Heathrow to Athens, train ride to the centre of Athens, found a hotel, nap, took my camera and explored on foot, had a salad and a beer at a cafe in the Gazi area.. nice vibe, meandered along some side streets and walked past the Acropolis.
  • 5 hour flight, 2 hours forward.
  • I have 4 different currencies in my wallet. Finding the right coin is silly.
  • Travel tip: don’t wear a belt or shoes, just easier for airport security.
  • I think my body clock must be a bit confused, but at least I’m not feeling jet-lagged.
  • Tune of the week: Why Don’t You Get A Job? – Offspring, reminds me of somebody I know (-;

Have a fun week, crazy kids.

by joe at 30 August 2010 11:00 AM

24 August 2010

Johann Botha (joe)

Compass and a willing accomplice

Time for a bit of adventure again, kids. I need some new travel photos.

Mia and I flew to London yesterday. She’s spending two weeks with her mother.. who still hates my guts.

I’m off to Boston tomorrow for VRM+CRM 2010.

Then Jacques and I are off to France/Nice for a few days and then Greece. Keen to find some good free diving spots on the islands. I’m not very good at planning these things, but it’s fun jumping on a plane and reading the travel guide on the way.

Then back to London for a few days.

“Walk tall, kick ass, love music and never forget that you come from a long line of truth seekers, lovers and warriors.” – Dr. HST.. a quote to inspire some adventure

Rock ‘n Roll.

by joe at 24 August 2010 03:44 PM

Quick Update

A week with Mia, organising visas…

  • In the last 26 days I spent 19 days with Mia.
  • “The New New Man is perhaps a better father than a husband. He loves his children with a passion that frightens him.” – January 2009 GQ

  • Monday, German visa application centre with Naulene.. who seems to be using Mia’s school bags as her carry-on travel bags, travel agent visit, fetched a new credit card, Waterfront to get a printer and scanner, got Mia a new Blu-ray movie, toy shop.. we got her a big Buzz Lightyear toy to match her Woody toy, watched Surf’s Up, bath, read, sleep.
  • “Winners find a way, no matter what, ’cause that’s what winners do” — Surf’s Up

  • Tuesday, UK visa application centre, tea at Lambro’s, lunch with Ingi at Neo, Mouille Point play area, nap, Deer Park, bath, read, sleep.
  • Did you ever wake up and think that what you were busy with was totally awesome.. that you would not trade it for anything? Getting there is all the fun.
  • Wednesday, dropped Mia at school in Somerset West, HPV meeting in Technopark, fetched Mia, met the guys from Embark Mobile in Stellenbosch, Waterfront lunch.. had to get a jacket repaired, nap, took Georg’s cat some food, cooked supper for Andrew and two married woman (Ingi and Bianca), bath, read, sleep.
  • “Nobody ever had a dream round here, but I don’t really mind that it’s starting to get to me.” — Sam’s Town, Killers

  • Thursday, work, dentist visit for Mia and I, laundry drop-off, gym, swim, Waterfront to get Mia a (most awesome yellow bee shaped) suitcase, fish and chips at CTFM, we went to feed Georg’s cat again, bath, read, sleep.
  • This may sound strange but I kinda miss doing my own laundry.
  • Friday, fetched Mia’s UK and Schengen visas, gym, swim, Orms visit to ponder my low light AF problem again.. played with a very nice 100mm macro lens, went to buy gifts for Jonathan and Aiden.. Talisker, signed an Amobia share sale agreement in the children’s section of Exclusive Books in Kloof st, Mouille Point play area, Aiden’s birthday at La Vie.. shared a pizza with Mia, bath, read, sleep.
  • Saturday, bread making course at Jordan wine farm with George Jardine, Andy, Debby, Ingi and Julia, a long lunch, nap, made pizza at Jonathan’s for his 30th birthday party while Fiona looked after Mia.
  • Interesting, on the way to Jordan Julia told me she made a new years resolution a few years ago that she may not say no to an invitation to an event.. this would explain Andrew’s confusion.
  • “I kinda like how this camera does not really focus.” — Ingi, “Yeah, kinda reminds you of your life.” — Debby

  • “You did something right, she has a deep sense of self confidence.” — Louise about Mia

  • “Life is all marshmallows when she’s with you, dude.” — a cautionary word from Andrew about Mia’s two lives

  • Sunday, photo processing, backups, gym, swim, pizza at Knead with Georg, little Beta Beach with Nicky, Mia introduced Nicky to Star Wars (ep2), bath, sleep, Georg and Petra came over for a glass of wine.

I’m off on a bit of an adventure this following week.

Rock ‘n Roll, kids.

by joe at 24 August 2010 03:03 PM

22 August 2010

Andy Rabagliati (wizzy)

wikileaks and the twitterverse

Last month wikileaks published a large tranche of Afghan war documents, that the Pentagon doesn't like. Actually, they want it all back, if such a thing is possible in the download age.

Crowd-sourcing

This is the new 'enemy' - the indiscriminate information age. Even during the case, wikileaks gave its followers - 120 thousand and growing - a sharply-focused feed into this continually-evolving situation. Wikipedia is there to helpfully keep the permanent record, written by the crowds, not by chosen editors. We choose our own news these days - I don't read what just one editor says.

Kenya Election

I believe in free information - I host on my ftp server "statements of domestic election observers the night before the announcement of the results" in case that information were lost. I get about 100 downloads a month.

Iran

Authoritarian governments everywhere - most recently demonstrated in Iran, fear this uncontrollable melange of information - created by twitter and short urls. It is funny to see government trying to swat the fly.

South Africa

There is a proposed Media Tribunal in South Africa - with the government's motive questioned. All governments have to acknowledge that it is impossible now to control the information - perhaps they think that if they have the TV, radio and newspapers covered they have dealt with the majority of the ANC electorate. I will miss the straight-talking Desmond Tutu in the South African media.

Europe

Julian Assange is the founder of wikileaks, reportedly permanently on the move like the Cathar Perfecti. He was bizarrely accused of rape and molestation in Sweden, and equally hastily withdrawn. Even the legal system cannot keep up with this instant feedback loop.

America

America is the land of the free. It is the homesteaders, the hackers, the start of the open source movement and the tools that built Linux and the software I use every day.

Democracy

America is also proud of its democratic heritage and sees nothing wrong with exporting informed choice for the electorate onto countries whose government would prefer the old days.

It has been hard to see the hacker culture that made a lot of what is good today in a struggle with its own government. Omnipresent cameras mean that The Man already has powerful tools. But the strength of the American system is they will resolve it, if necessary by counting heads.

More Afghan War Documents

Wikileaks has published in association with the War Diarys above, a huge, unknown, encrypted file. Possibly more war documents ? A few hundred pages of /dev/random ? All it needs is a password to unlock it. Yes, I already tried "Assange" and all the dog names I could think of.

by Andy at 22 August 2010 03:59 PM

20 August 2010

Jonathan Endersby (nlt)

Who invented the lightbulb?

Lets get one thing straight. Thomas Alva Edison did not invent the lightbulb.

This story requires context:

  • In 600AD the greek writer Thales of Miletus started writing about Electricity. Mostly this was all about rubbing Amber together and noticing static charge
  • In 1760 French physicist Charles-Augustin Coulomb starts actually making sense of electricity.
  • In 1779 Alessandro Volta builds the first true battery.
  • In the late 1700s and early 1800s every scientist, tinkerer and hacker is playing with electricity.
  • 30 years later, in 1809, Humphry Davy builds the first true electric lamp. This is 38 years before Edison is even born.
  • 50 years later, in 1860, Sir Joseph Wilson Swan builds an electric light bulb and starts tinkering with carbon-filament incandescent electric bulbs (The same stuff Edison eventually used).
  • Ten years later in 1877, the American Charles Francis Brush manufactured carbon arcs and was lighting public parks and office blocks.
  • In 1879, three years after Brush already had electric light in office blocks, Thomas Alva Edison discovers that a carbon filament in an oxygen-free bulb was able to stay glowing for up to 40 hours.
  • Two years later some dude named Lewis Howard Latimer makes a better filament.
  • 20 years later another guy called Willis R. Whitney invents a process to stop the globe getting dimmer as it got older
  • Seven years later, in 1910, a guy called William David Coolidge invents a tungsten filament that lasts a lot longer than the carbon ones.

Thomas Alva Edison - Douchebag Extraordinaire

So all that Edison ever “invented” was that a vacuum increased the lifespan of the filament.

So, the next obvious question is, why does everyone think that Edison invented the light bulb? The answer to that question is an interesting one because it has more to do with propaganda than it does to do with invention.

A lightbulb is useless without electricity, Edison knew that… and like many clever businessman Edison knew that real inventors are generally very bad at making money out of their inventions because they’re always too busy working on version 2.

Edison realised that the only way to make real money was to get electricity into people’s houses so that you could sell them lightbulbs, and electricity… This was brilliant because it’s the “Give away the razor, sell the razorblades” plan except both lightbulbs and electricity are consumables… so its more like “Give away the connection and sell the lightbulbs and the electricity”. Edison also wasn’t the first person to figure this out, he was just really really good at marketing… Or really really bad at marketing, depending on how you feel about Elephants.

Topsy the Elephant

Another person who realised that Electricity was going to make a lot of money was a rich businessman called Westinghouse. Westinghouse had become friends with an eccentric Yugoslav scientist called Nikola Tesla who had been experimenting with electricity his whole life. When Tesla wasn’t busy building Tesla Coils or trying to harness the power of lightning (or trying to harness energy from outer space, I shit you not) he worked with Westinghouse to build electricity generators and plan electricity distribution systems. Tesla knew more about electricity than pretty much anyone else alive at that point and early on had realised that Alternating Current (AC) was far better at distributing electricity than Direct Current (DC). So Westinghouse and Tesla started generating and distributing power to the rich and famous.

Edison didn’t like this. Not only were Tesla and Westinghouse competitors, but they were also proposing a different, better, system (AC) that Edison knew would eventually win the battle. Edison had managed to market himself as the father of electricity — a magician and folk hero — and he was getting incredibly rich.

Nikola Tesla - True Genius

So Edison did what any self respecting douche-bag marketer would do… he started publicly torturing animals… and filming it. Thomas Alva Edison, the “inventor of the lightbulb” went out into the streets and publicly electrocuted, to death, animals in a bid to show the public that Alternating Current was far too dangerous to be in their homes. And yes, in case you’re wondering, that reference to elephants earlier is because Edison even electrocuted, to death, an adult elephant.

Of course AC isn’t really any more dangerous than DC and Edison knew that… While there are some issues with AC’s 50-60 Hertz frequency being closer to that of your heart, both AC and DC are equally able to kill elephants and small children.

Sadly the public was gullible and Tesla was devastated… He went from being an eccentric socialite magician to being that guy who wants to murder small children and animals. Westinghouse had thicker skin and managed to keep his chin up, but Tesla became a recluse and started working in isolation on increasingly crazier ideas like harnessing power from the stratosphere. Tesla believed that it would be possible to get this power so cheaply that it would become free. Whether Tesla was onto something or whether his eccentric genius mind had finally snapped will never be known… In 1943 he died, alone, drowning in debt, in a hotel room.

Thomas Edison was no doubt a very clever man, but he was also ethically a disgusting person who thought nothing of destroying others to elevate his own fame.

by arbitraryuser at 20 August 2010 09:46 AM

19 August 2010

Arno Breedt (Macavity)

Blue-sky bird (pic)

While attempting to photograph a random empty piece of azure sky, I happened to catch this bird in flight. This makes for a wonderful desktop background -- I like to use my desktop's Invert function, and this fits right in: when inverted, the blue bitflips to a weird-but-soothing-on-tired-eyes yellowish colour. Click the thumbnail to see full size. (1600x1200, taken with a Nokia 5230 phone.)




This photo is free for personal use and open source projects :)

by TeePOG's blOG (noreply@blogger.com) at 19 August 2010 09:39 PM

18 August 2010

Adrian Frith (htonl)

Santa Barbara: day zero

I’m visiting Santa Barbara, California for ten days, attending CRYPTO 2010 (the 30th International Cryptology Conference) and the Second SHA-3 Candidate Conference. This post describes my journey to Santa Barbara, and the conference reception on Sunday 15th August.

My journey from Cape Town to Santa Barbara was as comfortable as could be expected. Of course, a trip that lasts thirty hours and involves three economy-class flights, transiting through Jo’burg and Frankfurt, can never be expected to be particularly comfortable. That said, all the planes were on time, and all of them were uneventful.

Cape Town-Joburg was the standard 2-hour SAA domestic flight; all that needs to be said about it was that the turkey wrap served for lunch was surprisingly quite edible. OR Tambo International Airport, despite all the reconstruction, was rather irritating. Firstly, if you’re coming off a domestic flight at Terminal B there’s virtually no signage to direct you to the Terminal A international departures area. Secondly, there’s hardly anywhere to sit at the boarding gates. A Boeing 747 carries 400-500 people, and an Airbus A340 slightly less than that; why, then, at our country’s flagship international airport, do the boarding gates for long-haul flights only have seats for about 50 people to wait?

Joburg-Frankfurt was an overnight flight, also SAA, on the Airbus A340-600. This plane had personal video screens in the back of the seats, which made for a nice distraction; however, the software that runs them is obviously rather buggy. Warning: geeky stuff begins. At one point it segfaulted, dumping to a Linux console. Evidently the software is some kind of SDL-based program launched by a rather hackish batch script; that was all I could tell before it rebooted automatically. Unfortunately I couldn’t get a photo in the low-light conditions. Geeky stuff over.

We hit quite a lot of turbulence over the Congo, and again over Switzerland, but nothing seriously scary. My attempts to sleep on the flight failed, so I resorted to watching movies to pass the time. Guy Ritchie’s recent Sherlock Holmes was fun but not, of course, particularly true to the original books. I also saw Invictus, which I will admit had me in tears a few times.

Frankfurt Airport, though much larger than OR Tambo, was considerably easier to navigate. Apart from an incredibly long queue for the security check, there were no hassles, and I reached the gate with three hours to wait before boarding – at least, I thought I had reached the gate. I was waiting to the one specified on my boarding pass, and as more and more people arrived, the vast majority of them appeared to be Indian. Now, I know there are a lot of Indians who work in IT in California, but this was getting to be little suspicious. So I checked, and yes indeed the Los Angeles flight had been moved to another gate. This is my one complaint about Frankfurt Airport: there are lots of boards listing the gate assignments before you clear security, but afterwards there is only one board in the whole wing.

Ironically, the passenger next to me on the flight to Los Angeles was an Indian working in IT in San Diego. This flight, although only an hour longer than the previous one, seemed absolutely interminable. I was, of course, more tired that I had been on the first flight; I also had a piercing headache for the first two hours. (Thank you, mother, for suggesting I take a bottle of Panado tablets along.)

Also, the flight only had overhead video screens, which showed first some incomprehensible German dance music videos, then one of the sequels to Shrek. After that, as is apparently inevitable with Germans, they showed episodes of Mr. Bean. So I spent most of the time trying to sleep, with little success: all I managed was a series of ten-minute naps.

Anyway, in the end the flight arrived at LAX thirty minutes early. Unlike some unpleasant stories I’d heard, clearing Customs & Border Protection was quick and easy – in fact, the only question I was asked was, “what is the purpose of your visit?” My baggage arrived fairly quickly and undamaged, and ultimately I was out of the terminal by the time the plane was originally scheduled to land.

It was quite a relief to breathe fresh air after such a long time in an air-conditioned environment. Of course, this was Los Angeles, so the air was not particularly fresh. The bus to Santa Barbara, along “the 101″, took a little more than two hours; the overwhelming impression for me was the sprawl – every hillside seemed to have a house on it, every valley had malls and office buildings. The later part of the drive, along the coast from Ventura to Santa Barbara, was more pleasant and reminded me of the R44 from Gordon’s Bay to Betty’s Bay, though the road was wider and the slope not as steep.

We finally arrived at the conference accommodation at UCSB sometime after five in the evening; at this point I had been awake, excepting short naps on the plane, for something like 40 hours. But there was still the conference reception dinner to attend – and I’m glad I did, not only because I was rather hungry after all that traveling (and the food was very good), but also because I had the opportunity to meet many people and have some very interesting conversations. As an aside, this is something I am particularly coming to like about the crypto community: the people in it, and even its most eminent members, are friendly and willing to chat, even with mere graduate students like me. No matter how interesting the conversation, though, by eight o’clock I couldn’t keep my eyes open and I had to retire to bed.

by adrian at 18 August 2010 12:50 AM

16 August 2010

Jonathan Carter (highvoltage)

Happy Birthday, Debian!


Today, Debian turns 17. It’s great to see how one of the first GNU/Linux distributions out there still manages to be important and relevant. Happy birthday, Debian!

This may also be a good time to say thanks to a team or package maintainer who makes it possible.

by jonathan at 16 August 2010 11:31 AM

15 August 2010

Tristan Seligmann (mithrandi)

HTC Sense / Facebook contacts sync

Jonathan just ran into this on his new HTC Desire (updated to 2.2 “Froyo”); I haven’t confirmed it on any other handset, but I imagine the problem is common to many HTC Sense + Android handsets. Anyhow, I figured I’d put this information out there to help anyone that runs into this issue. If anyone has a contact at HTC, please pass this along, so that they can look into a fix/workaround.

When “Facebook for HTC Sense” tries to connect to Facebook to retrieve contacts or profiles, the client sends Expect: 100-Continue in the HTTP header. Facebook’s HTTP servers do support 100 Continue, but some proxy servers (such as squid) do not. If you have configured your phone to use a proxy server, or are behind a transparent proxy (which many ISPs do inflict on their users), and the proxy server does not support this, it will (correctly) respond with 417 Expectation failed response. At this point, HTC’s client does not attempt to retry the request without requesting 100-Continue, but instead fails with an error message. This results in an empty Facebook directory / contacts list, and an error when you attempt to refresh it.

If the proxy server is on your own network, simply bypassing it should solve the issue for you. If this is your ISP’s proxy server, then you’ll either need to work around it somehow, or contact HTC and/or your ISP for assistance.

by mithrandi at 15 August 2010 01:52 AM

13 August 2010

Simeon Miteff (simeon)

Open access consumer broadband in South Africa

An open access network (OAN) is a horizontally layered business model for telecoms that has some interesting advantages. It is typically implemented by separating physical infrastructure from services. This creates a virtual market place, where end users have a choice of multiple service providers, and the service providers in turn are freed from having to invest in expensive and difficult to maintain access networks.

The wikipedia article describes OAN in more detail, and refers to a number of examples where this model has been implemented in broadband access networks.

But if the service provider doesn’t pay for the infrastructure, who does? Governments have already done this once, discovered they’re no good at it and consequently privatized the state owned telcos. These telcos are moving in the opposite direction of open access, instead trying to figure out ways out of the dumb-pipe trap through vertical integration, value added services, and so on.

An idea called homes with tails proposes to include the last mile as part of your property when you build or buy a house. This is smart, because it opens up a brand new (and also bandwidth/throughput/services independent) way to amortize the cost of the broadband access network.

Yesterday, Joe Botha blogged about what he imagines a network architecture/billing model for broadband OAN could be. What he doesn’t mention is that this idea is not new to South Africa. This prompted me to dump my thoughts on the matter (many of which I’ve been ruminating on for some time) into this post:

A few years ago, Neology (who I’ve previously blogged about) did an OAN pilot project in Hatfield for the Tswhane (Pretoria) municipality. If I have the story straight, this was a Wifi based mesh network that had an http captive portal that let you choose between 2 or 3 different ISPs, and it worked. This initiative subsequently stalled (apparently due to council politics) but my point is that OAN broadband been demonstrated in the local context.

If the access network infrastructure was not owned by government, but by the end users instead, perhaps the outcome would have been different. So let’s push this idea further. The next best thing would be to avoid relying on local government for wayleaves/right of way/servitudes. This might be possible using wireless local loop, but I’m just going to ignore that option because a bunch of home owners have little chance competing against multi-billion Rand tel/cellcos for exclusive access to radio spectrum (and the ISM-band WISP approach has some drawbacks).

Now it only takes a short drive around your city in South Africa to notice the transformation from traditional suburban townships to gated communities/housing complexes/residential estates. Herein lies the opportunity to do exactly what I’ve described in the paragraph above. I’ve head some entrepreneurs and local ISPs (who?) have begun to wire up these estates internally and provide centralized Internet break-out. I don’t know if this is done on an open access basis, but again, my point is that this piece of the puzzle exists.

Finally, Dark Fiber Africa have recently begun doing something similar in office parks, and as with their metro dark fiber networks, their model is open access.

So where to from here?

Vodacom, MTN and Cell C have all invested in fiber-based back-haul to their cellular base stations (ever wondered why the roads are being dug up and trenches filled with brightly coloured plastic ducts, deep in residential areas?). These base stations now represent an extensive “curb” (in the network sense), and since in many cases towers are shared by two, or all three operators, I think base stations make an ideal location for OAN broadband “meet me” points.

I haven’t asked, but I suspect the cellcos aren’t thinking this way (yet). If they venture into fixed line residential broadband, they will probably first attempt PON-based overbuild in affluent suburbs.

A final thought to leave you with is to consider the explosive growth in recent years of Wireless User Groups. These non-profit hobbyist metro Wifi networks are mostly used for fire-sharing and gaming (Internet access is specifically not provided). It shows that at least some South African consumers are willing to invest in their own telecoms infrastructure. Perhaps the way to bridge the gap between WUG and WISP is to form a fully licensed and professionally operated telecoms cooperative, like this one.

by Simeon Miteff at 13 August 2010 07:37 AM

12 August 2010

Raoul Snyman (superfly)

Using a Script to Simulate a Serial Device for VirtualBox

Recently I needed to simulate a serial device (a GPS, to be precise) for a Windows application I'm modifying for a client.

I don't use Windows on a regular basis, but I do have a license for it, and an original Windows XP CD from back in the day, so I loaded Windows in a VirtualBox virtual machine for the odd occasion I might need Windows, like when I build the Windows version of OpenLP 2.0.

Fortunately for me, because I'm running Linux on my system, and I have Windows running in VirtualBox, it's actually quite easy to simulate a serial device.

VirtualBox allows you to specify where to connect the guest's serial device on the host, and provides a few options. I selected "pipe" which is a standard Un*x socket, and I set VirtualBox to create the pipe if it didn't exist. I set the value of the pipe to be /tmp/vbox-socket.

Next I hauled out an extremely handy little program called socat. I had to install this, but that was a simple case of sudo aptitude install socat. Once I had installed socat, I set up a connection from a pseudo serial device (man pty can tell you more about that) to the Un*x socket:

@:~$ socat UNIX-CONNECT:/tmp/vbox-socket PTY,link=/tmp/vbox-pty

That will create a pseudo serial device called /tmp/vbox-pty and connect the Un*x socket to the pseudo serial device. Now, to connect up your script to the PTY device, simply use the standard Linux redirection:

python gps_simulator.py > /tmp/vbox-pty

by raoul at 12 August 2010 11:40 AM

Jonathan Groll (eyesonly)

Emacs-like keybindings for the new ABAP frontend editor

In the new SAP ABAP editor, it’s sort-of possible to remap the keybindings you use. If you’re a regular Emacs user, you often find yourself pressing the wrong key combination accidentally – for instance C-a to go to the beginning of a line, only to find that the new ABAP editor by default respects the regular windows CUA keybindings – so C-a does a “Select All” as it does in many windows programs.

I’ve redefined many of the new editor keybindings that I use to be more Emacs-like. If you’re interested, here is a PDF document listing all of my defined keybindings for the “emacs” schema. This is a stylesheet transformation of the file “keymap.xml” that is stored in your SAP work directory (so, in my case this is C:\Documents and Settings\Jonathan User\SapWorkDir\ab4_data\keymap.xml). Here is my keymap.xml file, I would say simply replace your own keymap.xml file with mine BUT I’ve had sufficient grief doing it even when upgrading my SAP GUI from one release to another, so doubt this will work for you. If you do want to try that, please backup your entire SapWorkDir first (as a point of reference, I’ve had this blog post in draft form since December 2008 due to not being sure how to share my keybindings with others).

What is probably more sensible if you want to try a similar Emacs keybinding scheme is to take a look at the PDF containing my keybindings and to manually create your own Emacs keybinding scheme. To do so, start by clicking on the little yellow icon on the far right bottom of your editor screen (indicated by the arrow):

Why do I say that its only “sort-of” possible to remap the keybindings? Well, there are limitations : (1) Our nice custom keybindings can’t be used when in display only mode, like when we’re on a non-development system (2) We can’t do complicated key sequences, eg. C-x C-w can’t be bound to “File.Saveas”. (3) Meta key bindings are difficult as pressing the ALT key on its own makes the menu bar at the top of the screen active, so the ALT key must always be combined with other modifiers like control (4) The windows key cannot be bound. In fact, we seem to be stuck with Shift, Control and Alt as modifiers. (5) Some things like kill-line (C-k) have no equivalent command in the front-end editor. (5) Block mode in the two editors is different in concept.

There are some windows CUA keybindings that you may be particularly fond of that get lost if you rebind them – for instance C-v does a “Clipboard Paste”. I’ve also bound that to C-y in the keybindings file above to be more like Emacs, but you may not like that, so I guess whatever keybindings you end up using will become a matter of personal taste, which is as for all things Emacs. Still, some sensible substitutions for cut-copy-paste are also defined by default in the new editor – for instance Shift-Insert performs a paste as it does on many terminal emulators.

By the way, as far as I know the new editor mode only is available for the windows SAP GUI. 1 The option to select the new editor does not appear in all the versions of the Java GUI that I’ve tried. It would be a shame if the new editor was never ported to the Java GUI, and my Linux street cred has suffered enormously as a consequence.

I have considered developing a proper “abap-mode” for the stand-alone Emacs editor as well, but it does seem it would have very little benefit for the effort involved – the benefit would apply if you opened a saved file with ABAP code in it in Emacs, or if you pasted into an Emacs window outside of your SAP GUI. If it were feasible to embed Emacs into the SAP GUI as the default editor then an abap-mode would be a real consideration. However, I don’t see how it’ll be feasible due to the tight integration that the new editor enjoys. For instance, one would have to allow for drill-down into other sections of code, allow for integration with the SE80 code browser and so forth. So I personally see a truly embedded Emacs as a wonderful thing (that will never happen!).

I also have a wish-list for commands that I’d love the new ABAP editor to support. Top of this list would be an Emacs kill-ring. Luckily, there is something similar – pressing “Edit.PasteExtended” (By default bound to Control-Shift-V) pops up a list of the clipboard history, so all is not lost however, and if you didn’t know about this feature it’s great.

1 The new front-end editor is available for SAP GUI for Windows 6.40 Patch level 10 and onwards, also your server must be able to support it – the first official server version that supports it is SAP NetWeaver2004s, although since then the editor has been backported, you can also run with it on older versions going back to 6.20 (but your system must be at one of the newer patch levels).

12 August 2010 08:15 AM

07 August 2010

Charl van Niekerk (charlvn)

Blogger Export XML to JSON Converter in PHP

#!/usr/bin/php
<?php
error_reporting(-1);
$doc = new DOMDocument();
$doc->load($_SERVER['argv'][1]);
$entries = $doc->getElementsByTagName('entry');
$posts = array();
$comments = array();
for ($i = 0; $i < $entries->length; $i++) {
 $entry = $entries->item($i);
 $links = $entry->getElementsByTagName('link');
 for ($j = 0; $j < $links->length; $j++) {
  $link = $links->item($j);
  if ($link->getAttribute('rel') == 'alternate') {
   $href = $link->getAttribute('href');
   if (substr($href, 0, 24) == 'http://blog.jokevn.com/2') {
    if (strstr($href, '#') === false) {
     $post = new stdClass();
     $post->id = substr($href, 23);
     $post->title = $entry->getElementsByTagName('title')->item(0)->textContent;
     $post->content = $entry->getElementsByTagName('content')->item(0)->textContent;
     $post->date = $entry->getElementsByTagName('published')->item(0)->textContent;
     $posts[] = $post;
    } else {
     $comment = new stdClass();
     $comment->post = substr($href, 23, strpos($href, '.html') - 18);
     $comment->author = $entry->getElementsByTagName('name')->item(0)->textContent;
     $comment->content = $entry->getElementsByTagName('content')->item(0)->textContent;
     $comment->date = $entry->getElementsByTagName('published')->item(0)->textContent;
     $comments[] = $comment;
    }
   }
  }
 }
}
file_put_contents('posts.json', json_encode($posts));
file_put_contents('comments.json', json_encode($comments));

by Charl van Niekerk (charlvn@charlvn.com) at 07 August 2010 06:45 PM

Andy Rabagliati (wizzy)

My first tweet

My first tweet

When I first started this blog, I started with a self-referential piece .

There I covered snail mail, fax, email, Usenet News and instant messaging (AIM and others). Since then I have been blogging, and I have stats on what people look at. My most popular posts appear to be those on Zulu weddings, and my visit to the school where One Laptop per Child was launched in Nigeria.

Since then I learned IRC, (which you see below), which is a more refined tool than the old unix "talk" where you just banged a message on their screen. I like IRC, and especially the Cape Linux Users Group IRC chatroom. A busy linux users group, where we get together once in a while, either for technical talks or Geekdinners. It is my first port of call if I am stuck on some problem to do with programming or system administration.

Facebook arrived. Facebook has a walled garden feel to it - you are writing to and for your friends, not the world at large. Its major value is connecting with old friends, like school buddies. A lot of the privacy options are slipping away as Facebook try to monetize their incredible popularity.

I am a trailing edge technology guy - 5 year old laptop is fine. This philosophy has served me well over Google Wave. But you buy new once in a while. So, I have resisted Twitter, as another rolled over version of stuff we have seen before above, but maybe it is different.

So I am blogging the IRC conversation that lead to my first tweet. Delicate temperaments might be a little surprised at the robust exchanges, but in real-time cyberspace there is a sliding line between truth and fiction, joking and seriousness. Spinach, below, is a 'bot - a program that lives in the chatroom to perform helpful things like check the weather forecast and leave people messages.

  • 19:20 * wizzy gets a 3 minute international phone call from Kenneth Kaunda's grandson replying to http://en.wikipedia.org/wiki/User_talk:Mkaund
  • 20:01 <&highvoltage> wizzy: wow :)
  • 20:01 <&highvoltage> wizzy: you should tweet that
  • 20:07 * wizzy doesn't tweet
  • 20:07 <&highvoltage> it's about time you start.
  • 20:08 < wizzy> highvoltage: I'm scared
  • 20:08 <&highvoltage> that irc oneliner you posted is really cool but it will go forgotten in our irc logs.
  • 20:08 < wizzy> I am only just getting the hang of IRC
  • 20:09 <&highvoltage> I'm too and that didn't stop me
  • 20:09 < wizzy> will it be remembered in tweettown?
  • 20:10 <&highvoltage> yep, people can mark it as a favourite, they can repeat it, google can find it, it can be indexed/searched better...
  • 20:10 <&highvoltage> just make sure Vhata follows you (at least in the beginning), and he'll be sure to tell you when you do anything kak
  • 20:11 <&highvoltage> doing that and following some basic guidelines will turn you into a pro in no time
  • 20:13 <&tumbleweed> joe reports that GD change has been submitted to org.za
  • 20:47 <&highvoltage> man reflective screens suck in offices with stupid flourecent lighting
  • 21:00 < wizzy> Spinach: twitter
  • 21:00 < Spinach> wizzy: twitter is http://www.penny-arcade.com/comic/2008/4/23/
  • 21:03 < wizzy> I bet Kenneth Kaunda's grandson doesn't tweet
  • 21:59 < wizzy> highvoltage: I tweeted. Am I as hip as Vhata yet ?
  • 22:02 * Vhata is basically one large pelvic bone
  • 22:12 < wizzy> http://twitter.com/wizzyct
  • 22:13 * wizzy is too much the noob to know if the hip people find out about their followers
  • 22:13 < cocooncrash> Spinach: last tweet from wizzyct
  • 22:13 < Spinach> cocooncrash: "wizzy gets a 3 minute international phone call from Kenneth Kaunda's grandson replying to http://en.wikipedia.org/wiki/User_talk:Mkaund" 19 minutes and 11 seconds ago, http://twitter.com/wizzyct/status/20163674522
  • 22:16 <&highvoltage> I just realised I don't know how to favourite a tweet in twitter (identi.ca is easier like that)

by Andy at 07 August 2010 03:41 PM

05 August 2010

Jonathan Carter (highvoltage)

Tristan Seligmann (mithrandi)

HTC OTA updates

I’m a little bored, and the whole internet (well, at least the portion of it composed of Desire owners) seems to be going crazy waiting around for the recently-announced rolling out of the Android 2.2 update for the HTC Desire, so I thought I’d poke around a little in the OTA update process.

UPDATE (2010/08/03): The update seems to be rolling out to most people, but some people still aren’t getting it, even though they have unlocked/unbranded phones. From what I’ve been able to discover, HTC appears to be employing an IMEI “blacklist” of some kind; checkins with specific IMEI values fail to return the 2.2 update, but anything else (including completely invalid IMEI values) returns the update. I’m still not sure whether this is just their way of staggering the update, or if there is some other reason for withholding the update from the affected devices.

UPDATE (2010/08/05): HTC now seems to either have a bad content server, or be in the process of pulling the update from their servers, including the update file itself on liveimage.htc.com. If it is deliberate, I have no idea why they’re doing it, and I can’t currently find any information that sheds any light.

The process seems to be relatively straightforward: when you hit “Check now”, the phone sends an HTTP POST to http://andchin.htc.com/android/checkin (not https, thus all in the clear, making it easy for me to sniff :P), with a Content-Type of “org/x-json” (wat), and a JSON-encoded payload. The payload looks as follows (I’ve pretty-printed it and stripped personal identifiers, but it’s still good enough to get a response):

{
  "locale": "en_GB",
  "checkin": {
    "build": {
      "product": "bravo",
      "serialno": "HTXXXXXXXXXX",
      "changelist": "174215",
      "build_type": "user",
      "carrier": "htc_wwe",
      "radio": "32.36.00.28U_4.06.00.02_2",
      "firmware_version": "1.21.405.2 CL174215 release-keys",
      "bootloader": "0.80.0000",
      "id": "htc_wwe/htc_bravo/bravo/bravo:2.1-update1/ERE27/174215:user/release-keys",
      "revision": "129"
    }
  },
  "model_number": "HTC Desire",
  "logging_id": 0,
  "imei": "",
  "id": 0,
  "digest": "8fccfd93dcbe837d072e5f1494da2"
}

Note the “carrier” value there; this is “htc_wwe” for phones that are not carrier-locked / otherwise carrier-customized. If you had a Sprint phone, for example, this would be “sprint”. I believe this value is ultimately determined by the the “androidboot.carrier” kernel parameter passed to the kernel by the boot loader.

I’m not sure what “digest” is of; it is 29 hex digits long, which doesn’t make any sense for a cryptographic digest. It doesn’t seem to be a personal identifier of any kind, though; if you modify it, you get some “upload crash” response back, which contains (among other things) the correct digest, so I can only guess that it corresponds to the product information in some way. I’ll be interested to see if it changes once I have the new update installed.

The response that comes back looks like this:

{"time_msec":"1280538364433","stats_ok":true,"intent":[{"action":"android.server.checkin.FOTA_CANCEL"}]}

The “intent” part will probably be obvious to Android developers (it’s specifying what the UI should do next), and time_msec is a UNIX timestamp in milliseconds, corresponding to the time the response was sent.

If an update *is* available, the response looks like this instead:

{
  "stats_ok": true,
  "intent": [
    {
      "action": "android.server.checkin.FOTA_UPDATE",
      "data_uri": "http://liveimage.htc.com/OTA_Bravo_HTC_WWE_1.21.405.2-1.15.405.4_release_P4ohim1mtp6zggcyon.zip",
      "extra": [
        {
          "name": "promptMessage",
          "value": "System Upgrade"
        },
        {
          "name": "promptFeature",
          "value": "Update:HTC application improvement"
        },
        {
          "name": "promptVersion",
          "value": "System upgrade1.21.405.2 (27.07 MB)We would recommend using a free Wi-Fi hotspot or an unlimited data plan to apply this update. If not, standard data connection charges may apply. Any questions? Contact us via http://www.htc.com/www/CA_Hotline.aspx"
        },
        {
          "name": "promptSize",
          "value": "27.07 MB"
        },
        {
          "name": "promptMinutes",
          "value": "30,..."
        },
        {
          "name": "timeoutSeconds",
          "value": "120"
        },
        {
          "name": "force_update",
          "value": "false"
        }
      ]
    }
  ],
  "time_msec": "1280513282008"
}

Now, it seems as if they are planning to do a rolling release of the 2.2 update, somehow. I assume this means that they will only be responding with the updated version to some requests, but I don’t know exactly what mechanism they’ll be using to do that. Oh well…

by mithrandi at 05 August 2010 01:39 PM

03 August 2010

Mike Morris

Measuring Progress

Background

I am about to take on the leadership of a new, still-in-formation developer team, on a project - the first of several - of critical importance to the client. This means that everything is up for negotiation: team structure, development methodology, coding styles, frameworks to be used,... everything!

Initially my role was confined to that of Consulting Architect, but, by force of circumstance, has evolved to Architect and Team Leader Pro Tem for a few months while the client gets their dev team properly resourced and settled-in. Naturally I'm trying to help that along as best I can.

Methodology

The client initially planned to use a BDUF (Big Design Up Front), waterfall approach to the project. The requirement is extremely well-known and quantified, in a very well understood business domain.

I have never believed in my tummy that BDUF is in any sense realistically or practically achievable, though, even long before the Agile Movement tore the idea to shreds. It is impossible to foresee every detailed design element, no matter how hard you work at it. On the other hand, some Agile proponents seem to say that no up-front design is necessary... Perhaps my hearing is playing tricks with me. I cannot agree with them, either.

So call me a proponent of SDUF: Some Design Up Front.

And on the Process front, I don't think there's a lot to argue about when we contrast a waterfall/sequential process with an agile/incremental process. For me the critical difference lies in how we report and feed-back progress and how frequently we do this. And what we do about the feedback we receive - how flexibly we accommodate direction changes from customers, business sponsors, unit-tests,... to change the still-in-the-pipeline development and requirements without completely trashing the budget and time-to-market constraints. An also-essential aspect of agile development is "to reflect on what has gone before, and to adjust what we do to make things better." [Ron Jeffries]

Waterfall possibly still does have a place in some circumstances. I can't honestly say that I've ever actually been party to such circumstances, though I've certainly been on projects where some of our business partners thought they needed hard, contractual milestones with no going back. (In reality we always "went back" anyway, when necessary, after some amount of renegotiation.)

Metrics

A very greenfield situation, this, which some people would immediately call a "wonderful opportunity", but which I very much see as a "two-edged weapon"...

The question that has been most on my mind is, "What should we measure?"

I am a very firm believer in the old saw, "Tell me how you Measure me, and I'll tell you how I Behave."

Measure a sales-person by the number of sales, and you'll get a high order volume of the easiest-to-sell products, regardless of whether they represent the best margins or quality-of-business for the company. Measure the same sales-person by margin-value of product, and you'd best hope that your high-margin products are ones that lots of people want to buy. Measure them by the number of sales calls they make and you'll have lots of calls that don't result in sales.

Here is where I believe that some Scrum proponents are going wrong... We take Features and break them up into Tasks - the developers' unit-of-work. And they measure Task completions using a burn-down chart of Tasks completed versus time. This can easily result in a situation where many Tasks are being completed, but not so many Features. A situation where Features reach an 80%-complete state, and then get stuck, for any of a variety of reasons, all of which amount to "Nobody wants to complete those Tasks" because they're boring,... or they're "just" test Tasks,... or they're difficult (because not well understood), or...

The solution is really simple. Just measure Feature completion instead of Task completion. Then the team only gets rewarded when Features or User Stories get completed. We only get beer and Pizza when the Business gets value.

But is this enough? Can we go further? Is there a way to tie developer reward directly to delivered Business Value?

In the situation I'm headed into, Business Value should be pretty easy to quantify: The product to be built is one that will directly generate revenue for the company, so we can very easily quantify how much Business Value the software is generating. (Successful completion of the product will also deliver a huge  strategic Business Value by enabling new revenue streams, but that's also quite easy to quantify, and, indeed, is the prime reason the client is taking on this quite substantial investment in the first place...)

Are there ways to close the loop? To feed-back to the dev team on how much business-value their efforts are generating without making money too much of an up-front issue? Then, too, I have a reservation: Developers can have notoriously short memories, and the sort of value we're talking about here is only delivered on longer time-scales... Maybe it's good to have both long-time-loop feedbacks as long as we also have the short-timespan feedback in place as well... Waterfall's failures are largely a result of too little feedback taking too much time for us to correct project course when we need to.

My instinct is that moving towards a continuous deployment process (the step beyond continuous integration) might help to shorten this feedback loop, which is completely the point of "agile" thinking, but I'm still not really clear on how we might implement it.

by mike at 03 August 2010 10:49 AM

02 August 2010

Raoul Snyman (superfly)

TortoiseBZR-Style Right-Click Menus in KDE

I think most folks are probably well aware of the Windows Subversion client, TortoiseSVN. It has been around for a number of years, and is easily one of the most handy version control clients on any platform.

Recently, I have been wanting to be able to do the same thing in Linux. Simply right-click and update. Sure I can use the command line, and sure I could even use Bazaar Explorer, but I don't always have a terminal open, and Bazaar Explorer doesn't work with files as much as workflow, and that doesn't always fly.

So, I started looking around to find out how I could edit Konqueror or Dolphin's context menu, or "service menu" as it is known in FreeDesktop terms. After much hunting, looking at existing service menu files, I was able to put together a submenu for QBazaar, the Qt dialogs for Bazaar (the same dialogs that get used in TortoiseBZR, in fact).

You can get my QBazaar.desktop file from the Scripts & Programs section on my blog. Once you have downloaded it, you need to copy it into the following location:

~/.kde/share/kde4/services/ServiceMenu

Note: The capitalisation is required, so don't make "ServiceMenu" all small letters.

by raoul at 02 August 2010 08:50 PM

01 August 2010

Raoul Snyman (superfly)

Bazaar Branching & Merging on Subversion Repositories

In my last post, I talked about using Bazaar on Subversion repositories. Soon afterward, David Rubin asked me in IRC if I can do the standard branching and merging on a Bazaar working copy of a Subversion repository, and how easy it is.

The answer is, "Yes, very easy." In fact, you don't even need to care that it is from a Subversion repository. For instance:

@:~$ bzr checkout https+urllib://svn.domain.com/svnroot/project/trunk trunk
@:~$ bzr branch trunk newfeature
@:~$ cd newfeature
[... do some stuff ...]
@:~$ bzr commit
@:~$ cd ../trunk
@:~$ bzr merge ../newfeature
@:~$ bzr commit

All done!

by raoul at 01 August 2010 08:56 PM

29 July 2010

Adrianna Pińska (Confluence)

Oh, look. A terrible news article about a subculture.

So the M&G did an article on ICON, the recent gaming convention up in Jo’burg. It’s about as awful as you would expect, only worse. It makes it sound as if all the women were walking around in revealing outfits with their tits falling out, and that the main attraction of the con to women is the possibility of attracting a horde of desperate nerds no matter how shy or unconventionally attractive they are. Not, you know, participation in any of the games, or the purchase of cool toys; those are for the smelly man-children running around and whacking each other with rubber swords.

Here’s where you can read this wonder of modern journalism in all its glory. Use of latex and bleach is recommended if you have a gentle and sensitive nature or are allergic to fail.

Since I appear to be kind of half maybe possibly not actually logged in to the website, and I have no idea whether it’s eaten my comment, and if it hasn’t eaten my comment it has almost certainly eaten the paragraph breaks in my comment, thus rendering it unreadable, here it is again:

This is yet another “quirky human interest” article written by a clueless mainstream journalist who briefly encounters a subculture and then regurgitates a hopelessly confused mess of whatever they found most memorable. But it’s a lot worse than average.

I came here expecting to get a bit annoyed about the conflation of LARPing with the SCA, or the portrayal of all LARPing as MEAD-style boffer LARPing. But the horrible and sensationalist gender stereotypes on display here kind of eclipse the geeky details.

I disagree that the article helps any of the hobbies it features. It tells men “these subcultures welcome sexist jerks” and tells women “stay far away from here unless you would enjoy wading through a cesspit of sexist jerks”.

I was there, I wore normal clothes (like a lot of other women there, who I guess were not exciting or exotic enough to be mentioned), I had a great geeky time and nobody was rude to me. But if all I knew about ICON came from this article, I would avoid it like the plague.

I know women who dress up at cons, sometimes in revealing outfits, satirically and non-satirically. I know a lot of the women from the T&A RPG team. I may have to agree to disagree with them about the feminist implications of dressing up in revealing outfits at cons, but that’s a whole other post — and on the whole I think they should wear whatever the hell they want and not be assumed to be wearing it for the benefit of dudely eyeballs. Our differences of opinion notwithstanding, I think it’s safe to say that the satirical element went so far over the reporter’s head it may have ended up in that giant football dirigible floating over the city.

(In non-ranty post-ICON news, I have giant blisters on my hands from screwing my giant alien’s legs in, but it was so worth it. It looks totally badass. :D )

P.S. The really annoying thing about this is that in South Africa roleplaying isn’t that male-dominated anymore. OK, maybe the nationwide roleplaying diaspora — all those tiny cells of friends who have played AD&D all by themselves since high school and never talk to other roleplayers — is male-dominated, but the larger communities centered on e.g. ICON or CLAWs at UCT are full of women and have been for over a decade. And they’re not just “girlfriends and sisters”; they write LARPs and modules and organise things and come to conventions every year. Anyone who doesn’t recognise that is seriously misrepresenting the community.

by confluence at 29 July 2010 11:26 AM

28 July 2010

Mike Morris

Refresher Training is Good, Too!

Some while ago I was teaching a course -- Java Web Application Programming, as it happens --  to a group of quite-experienced web developers working in a large corporate environment. Needless to say, we all thought that this was yet another case of the Training Department getting their act together waaaay too late...

We soon discovered, however, that some of the core concepts and technologies of Java Web Application development were, at best, only poorly understood, even by the most experienced developers in the group. Many of the details of the HTTP protocol were unknown to them, as was the development of custom Tag Libraries -- a key component for developing clean, maintainable Java Web applications without in-page scripting. They had not thought much about the consequences of placing large (multi-megabyte) objects in the application Session... (this is in a clustered web-container environment!)

This is not a criticism of those developers! They had, for years, been delivering absolutely critical business functionality. This is merely an observation that technologies move on; sometimes developers need a little help to catch up, since their management usually neglects to allow time for self-study catch-up on new evolutions in the technology.

More important, it is an observation that Development Managers, Team Leaders and Project Managers shouldn't assume that their developers are completely up-to-date on the technologies they're using for day-to-day development.


Replicated from http://coco.co.za/wiki/KeyTechnologyTrainingStory

by mike at 28 July 2010 03:14 PM

Jonathan Carter (highvoltage)

If I were superstitious…


A few weeks ago I moved to Québec, Canada. Today I bought this car from a colleague at Révolution Linux, he doesn’t need it anymore since he’s moving to Montréal. He bough it just a few months ago from another colleague who moved to France.

It doesn’t have a CD player, instead, it has a tape deck, which plays analogue magnetic tapes. They’re horribly obsolete now but this was how I listened to music way back when I was a kid. Another college that lives down the street from me has a hi-fi with a CD player AND a tape deck. I was planning to go there to write the Offspring Smash album to tape, it’s one of my favourite driving albums and I never tire from it.

All the tapes from 2 owners back was still in the car. I decided to remove them when I got home this afternoon. The *first* tape I took out happened to be this one:

I was amazed and delighted! Then I removed the next tape:

It had “High voltage” written on it, which is very close to my IRC/Identica/Twitter nickname, “highvoltage”. If I were at all superstitious, I’d take it as a very good sign that this car will serve me very well!

by jonathan at 28 July 2010 02:36 AM

26 July 2010

Andy Rabagliati (wizzy)

Centre for High performance computing in Cape Town

Sea Surface temperature

Last month I started a contracting job with the Marine Remote Sensing Unit - a collaboration between the Centre for High Performance Computing (CHPC) and University of Cape Town.

I have some history in parallel processing, mostly with Inmos, a British microelectronics company that built the Transputer, a ground-breaking microprocessor of the 1980s. I had been looking for an opportunity to work at the CHPC for a while, and took the chance when an opening arrived via the clug-work mailing list run by the Cape Town Linux Users Group.

What is the CHPC ?

Sun cluster at CHPCSupercomputers these days consist of racks of identically-configured Blades with a fast network switch connecting them together. There is also a filesystem built upon many hard drives, providing redundancy and speed, accessible over the network.

There are two clusters at the CHPC - an IBM e1350 Cluster, iQudu, consisting of 160 compute nodes and 3 storage nodes connected to 94 Terabytes of storage. There is also a Sun Microsystems cluster with 288 blades with 8 cores each and 200Terabytes of shared storage. This is an announcement of the commissioning of the Sun cluster, and here is a blog post from a Sun engineer. There is also an older IBM Blue Gene cluster, built of PowerPC ASICs.

Both clusters run x86_64 Linux, so they appear very similar. There is a certain expectation that you provide your own environment to run your application - they provide development libraries and compilation tools.

The Sun cluster is the more recent, and the one I am using. It uses Lustre as a user filesystem. The nodes boot from Flash, and the core operating system lives in 8Gig flash.

It also has a read-only NFS mount for non-critical code - as some of the 8Gig Flash is used for logspace.

What is Marine Remote Sensing?

MERIS satelite scan Earth observation satellites travel a polar orbit, with some synchronisation with the earth's spin. I think it crosses the equator at the same time every day. We use, among others, data from the Envisat satellite. There have been some recent news stories here and here. The satellite images earth as it passes over, onto a linear array of sensors tailored for different frequency bands. All data is publicly available.

We can get the raw level 1 sensor data, in a dozen or so different spectral bands, or ESA will crunch a few helpful numbers that will indicate algal bloom, turbidity, sea surface temperature, vegetation etc. as in the first story linked above.

We currently use the 'pre-chewed' data (level 2), but MRSU would like to put a few years worth of southern ocean data through some new algorithms, hence the need for CHPC. A lot of the algorithms were written for northern waters, and the Benguela current has its own idiosyncrasies that might benefit from a fresh look.

This is correlated with field measurements - a research ship that goes to the areas of interest and samples the ocean for algae that produce the chlorophyll signature visible from space. That allows the level 2 data processing to more accurately reflect sea conditions.

Research at the CHPC

There is the Advanced Computing Engineering (ACE) Lab that looks at other computing technologies, like GPGPU and field programmable gate array boards. It is staffed by graduates from UCT.

How do you program a supercomputer ?

The first thing to check is to see if your problem is easily divisible into a lot of self-contained chunks. Ours is - data for one day does not affect other days except in God's scheme of things.

Then the issue comes to be how you divide, and how you instruct them each to run the same program over different data. One way is to have a lookup table keyed by the hostname of the blade computer. Another way would be to have a central allocator to farm out the work jobs to blades as they become free.

There are other more sophisticated means. Matlab has long been a favourite of the scientific community, and Matlab have a parallel licence that allows commonly used matrix math on large datasets to be distributed over the blades.

I have been using python, and its NumPy and SciPy modules. These are optimised for single processors by, for instance, having core routines for Linear Algebra and Fourier Transforms written in FORTRAN. SciPy has a huge toolbox - with sparse matrices, signal processing, information theory. Python also has the MPI interface - a standardised way across languages to distribute your code across a computer cluster.

by Andy at 26 July 2010 02:49 PM

22 July 2010

Tristan Seligmann (mithrandi)

The Desire post

Encumbered forever by desire and ambition,
there’s a hunger still unsatisfied;
our weary eyes still stray to the horizon,
though down this road we’ve been so many times.

— Pink Floyd, High Hopes

Introduction

As some of you already know, I recently became the proud new owner of an HTC Desire. You can find the detailed specs elsewhere, but the phone is pretty much a Nexus One with an optical trackpad, real buttons, a little extra flash memory, and the HTC Sense software. This post isn’t exactly going to be an in-depth review, but I thought I’d give a brief rundown of my impressions, and also the apps I’m using on the phone at the moment.

Overall, I’m pretty happy with the phone. I can get 1-2 days of use between charges (depending on usage), which is good enough for my purposes, and that does include push email (quite a lot of email, in the case of my personal account) and syncing all sorts of stuff on a pretty regular schedule. The phone UI is generally way more responsive and snappy than my previous phones (Nokia E71, E65), and the touch screen works reasonably well. Also, I can actually get apps for a lot of the services I use now, whereas I couldn’t before (not many people are making Series 60 apps).

Input

The lack of a real keyboard turned out to be not as bad as I expected. Tap-typing with a single finger is not as fast as using both thumbs was on the E71, and holding the phone so that I can use both thumbs is somehow awkward enough that I never did it. Selecting predicted words is a lot easier with the touch screen, though (no need to scroll through the list). However, I am now using the Swype Beta, an alternative input method where you “swype” your finger through the letters of the word you want, without lifting it, along with a lot of other nice tweaks to the on-screen keyboard. It works pretty nicely; it doesn’t always select the right word, but you can finish your sentence (or paragraph) and then go back and select a different word where it made mistakes. If a word isn’t in the dictionary, or isn’t really a word at all, you can just tap it out; regular words will be added to the dictionary after you press space, but you can also add “non-words” like “http://” or “.co.za” for convenience. I’m fast enough on the Swype keyboard now that I can use it for taking notes during a conversation in real-time, which is great. Unfortunately, the beta is closed at the moment; if you didn’t have a chance to grab the app while it was open, you’ll have to wait around until they decide to let people have a crack at it again, or they open it up to everyone.

The multi-touch screen is great. A lot of apps (like Maps, or the browser) support the “pinch” and “spread” (what’s the real name for the opposite of pinch?) to zoom in and out, which easily lends itself to an “arbitrary precision” navigation style: zoom out to cover a lot of ground, then zoom back in to precisely select a button or other page element. The “momentum-based” scrolling mechanism (again, what the heck is this actually called?) is also used by most apps, and is similarly awesome. It sort of behaves like a globe: flick the screen to start scrolling; over time, it slowly slows down, but you can touch the screen to “catch” it once you get to where you want to be, or flick it again to keep going.

Multi-tasking

The Android approach to multi-tasking is awesome, and I kinda wish my desktop operating systems worked the same way. Under the hood, it’s basically just standard Linux processes being scheduled by the kernel, but with a bit of a twist. In terms of the UI, there’s no explicit process management. Some apps have an “exit” option, and you can burrow into the Applications list to “Force Stop” any app, but there isn’t even any built-in way to get a list of currently-running apps (although third-party apps for this purpose are available), simply because you don’t really need it. When the OS runs out of memory (think “OOM killer” if you’re familiar with Linux), it kills off the oldest apps to free up memory. In addition, provision is made for apps to save and restore their state. As a result, if you switch back and forth between apps, they’ll probably still be running, so switching will be immediate. If you open up an app that you haven’t used for a while, it may not be running anymore, so it’ll take a little longer (but usually not that much longer) for the app to start up again and restore the state. Most apps don’t do anything if they’re not in the foreground, so there’s no need to worry about wasting your battery running apps you’re not using. There are also “services”, which are for long-running background tasks that shouldn’t be killed off to reclaim memory; synchronization, for example.

Unfortunately, some people seem to be confused by all of this; as a result, there are a plethora of “advanced task killer” apps and suchlike on the Android market. These are all just about pointless; all you are likely to accomplish by running around killing random processes is breaking certain functionality like background synchronization that you turned on. If you want to stop your contacts syncing, for example, just go turn that off in the settings, instead of using an app that kills the process every time it starts up. Also, if an app really is draining your battery in the background, it’ll show up in the battery info screen, and you can then uninstall it or otherwise take steps to solve the problem. The only exception to the latter is built-in functionality that gets aggregated into the “Android Platform” entry; it may not be obvious what you need to disable or reconsider if “Android Platform” shows up as using too much juice.

Intents

Think of intents like file type associations on steroids. Instead of just “open this file which is of some type”, you also have “open this URL” and “dial this phone number” and “view these map coordinates” and “search for this text” and “display the home screen” and “the battery is running low” and just about anything else you can think of, including brand new intents created by third-party developers.

Since any application can register itself to handle an intent, this means that third-party applications can do anything from hooking in as a phone dialler (eg. a SIP client), to replacing the home screen; just about any aspect of the “default” OS software can be replaced. This can also be done selectively; for example, if you follow a link to a Google Maps URL (even from another web page in the browser), you’ll be given the option to open it in the “Maps” app as well as opening it in the browser.

The net result is that third-party software can replace and enhance the OS in a practically unlimited fashion; and different third-party apps can interoperate and integrate without a great deal of special effort being exerted on the part of the application developers.

GPS / Location

The Desire has A-GPS functionality. My E71 also supposedly had this functionality, but it never seemed to work; getting a GPS lock could take up to 5 minutes if I started the Ovi Maps app up in a different location to where I last closed it. On my Desire, under optimal conditions (outdoors, clear view), I can generally get a GPS lock in seconds, no matter how far I’ve moved since the last time I got a lock. I can even get a GPS lock in under 30 seconds standing indoors in the middle of my house! I guess this is probably a combination of a better A-GPS implementation and a better GPS receiver, but I’m definitely much happier with the results.

Battery lifetime

A few quick notes I wanted to make on battery lifetime. Firstly, the battery lifetime seems to go up after the first several charge-discharge cycles; I guess this probably applies to all batteries in this class, but I thought it was worth mentioning. Secondly, active wifi use generally uses less battery than an active cell data (GPRS/EDGE/3G/HSDPA) connection; but an idle wifi connection will use more battery than an idle cell data connection. You can adjust the wifi “sleep” policy to take advantage of this by disabling the wifi connection after a certain timeout, although you may wish to avoid the extra cell data charges. Also, if you are in an area with poor cell reception, the cell radio will use more battery as the transmit strength is increased in order to successfully transmit; this applies even if you are not making use of cell data.

My applications

You can see a list of all of the applications I have installed (thanks to AppBrain), but not all of them are worth mentioning, so I’ll run through the interesting ones here, with some commentary. Unfortunately paid apps are not currently available from the Android Market in South Africa, which some apps are either not available at all, while others are only available in free+ads form.

  • Aldiko Book Reader
    A pretty decent eBook reader for ePub format books. It includes support for purchasing books from some sites (they have a mechanism whereby any online store can integrate their catalogue); otherwise you can download and import them from anywhere you can find them, or copy them onto the phone from your PC.
  • Android Agenda Widget
    This is a ridiculously customizable home screen widget for viewing your calendar and tasks. It has support for “styles”, but you can also individually customize just about every aspect of the widget. It also provides widgets in almost every every possible size from 1×1 up to 4×4. It supports the various calendars (Google, HTC, etc.) as well as Astrid and some other tasks app that I can’t remember offhand.
  • AppBrain App Market
    The name is a little misleading: this is not a separate market, but just a way to sync and share your installed apps list, as well as scheduling installs / uninstalls via the web interface (which will be performed the next time you sync using the phone app).
  • Astrid Task/Todo List
    A nifty tasks list manager. You can schedule multiple reminders for tasks, tag them, track expected time / time spent, and sync with Remember The Milk.
  • ASTRO File Manager
    Android does not come with any kind of file manager, although you won’t need one very often since apps tend to avoid explicit file management. Still, there is the occasional need to rename or move a file around; it can also be very useful to transfer files over the network, especially with the SMB module.
  • Barcode Scanner
    Scan a variety of barcodes, including QR codes and UPC / EAN barcodes. Many sites provide download / market links for apps in the form of QR codes; scanning the code from another display is obviously easier than retyping the URL.
  • Dropbox
    Nothing much to this app; it just lets you view / download files you have stored on Dropbox.
  • Evernote
    Create and access your Evernote notes, including geotagging support.
  • Foursquare
    Check in on Foursquare, get alerts when your friends check in nearby, view nearby venues, and search for venues.
  • FoxyRing: Smart Ringtone
    I’m not actually using this app currently, but you may find it useful regardless. The app allows you to adjust your ringtone settings based on ambient noise levels, time of day, and location, as well as overriding them for selected contacts.
  • Glympse
    Unlike Google Latitude, which shares your location to all of your contacts the whole time you have it active, Glympse provides more limited and granular sharing. When you create a “Glympse”, you specify a lifetime (eg. 30 minutes) after which the Glympse expires, and optionally start and destination locations; a unique code is then generated. You can then share the URL by text message or email, or you can post it on Facebook. The recipients can then view your location in realtime, until the Glympse expires, either when the specified time has elapsed, or by you manually expiring it at any time of your choosing.
  • Google Goggles
    This app is described as a “visual search” application. You take a picture of anything, and the application attempts to recognise it. This might mean scanning a barcode / QR code, scanning and OCRing text (which you can then translate or search for), detecting a well-known landmark, a work of art, and more.
  • GPS Status
    A simple app that allows you to visualize the GPS satellites in range, how many satellites you are locked onto, and see other information from the GPS receiver.
  • Kindle for Android
    Amazon’s Kindle application. Great for reading Kindle books, but if you can get them in ePub, rather use Aldiko (see above), as the Kindle app is not nearly as featureful.
  • Nimbuzz
    This is an IM / voice chat app. It has support for Skype, which is useful, as Fring no longer has Skype support, and the official Skype Android app is currently only available to Verizon subscribers through a special deal. It also supports a variety of IM networks, including Facebook, but unfortunately generic Jabber support is no longer available.
  • Real Signal
    A simple app that gives you a configurable cell signal strength meter, as well as allowing you to see the actual numerical signal strength.
  • Remember The Milk
    Only usable by RTM Pro subscribers (although you get a 14-day trial of Pro if you aren’t a subscriber). This lets you sync your RTM tasks to your phone, create tasks on your phone, and includes a widget for displaying tasks. Not strictly necessariy in conjuction with Astrid (see above), but I find it useful for managing additional task views (eg. my shopping list).
  • ScrobbleDroid
    Just what it sounds like: scrobble your music activity to last.fm. Compatible with various music players.
  • Shazam
    Want to know what song is currently playing? Capture an audio sample via the phone’s microphone with this app, and then search their online database to identify the song.
  • Shopper
    This app overlaps with Google Goggles somewhat (see above). You can scan media (DVDs and CDs) or books by barcode or cover image, and then search for them online with Google Shopper; useful for doing some comparative shopping when you’re in a physical store.
  • SpeedView
    A simple speedometer app that uses the GPS to track your speed.
  • TripIt
    Sync your TripIt travel plans to your phone; allows for offline access, so you can get your important travel details even if you can’t get an internet connection from where you are.
  • Wifi Analyzer
    Visualize the wifi networks in range, including the channel and signal strength. Useful for selecting an unused channel for your wifi network, or picking an internet access point.

by mithrandi at 22 July 2010 11:18 PM

Adrianna Pińska (Confluence)

Forever Bubble

Finished all the levels in the default Frozen Bubble levelset? Run out of custom levels from the interwebs? Random levels too boring? Making levels too hard? Sounds like you need Forever Bubble — what I made on Tuesday night instead of working.

Randomly generate pretty levels — for ever! Run it with --help to see all the options. You need the argparse and networkx python modules, and obviously python. It should work on any *NIX. The Frozen Bubble levels directory needs to exist if you want to save there. Patches, ports and comments welcome. If you generate a particularly awesome level, paste it into a comment; maybe I’ll compile a “greatest hits” levelset.

by confluence at 22 July 2010 09:32 AM

21 July 2010

Graham Poulter (verdant)

Calculating the true cost of car ownership

In December 2008 I bought my 2004 model-year, 80000km Ford Fiesta 1.6i Ambiente for R72,800, freshly serviced. It now has 99,100km on the clock and went in early for the 100,000km service due to a fault that will yet cost me a couple grand more to get fixed properly.

Here are the costs so far. Maintenance includes the service, two front tyres and wheel alignment, a battery, car washing, and a couple of random repairs.

  • Parts & Maintenance: R4,539
  • Licensing: R872
  • Petrol: R11,854
  • Parking: R410
  • Fines: R615
  • Santam 3/F/T insurance: R2,989
Total cost: R21,279

But there's more: the car's current book value is R59,200 according to Santam, a depreciation of R13,600 since purchasing, bringing my total costs incurred during ownership to R34,879. Divide by 19,100km travel gives a complete running cost of R1.826 per kilometer. Yet of this cost, petrol only makes up 62c.

So, at least for me, petrol is only one-third of the all the costs I've incurred owning a car.  Note: I've include costs not part of proper Total Cost of Ownership: namely avoidable costs (fines/parking) and mileage-dependent costs (petrol,repairs).

Edit: Added insurance costs split out licensing as Alapan suggested, qualified total as "costs incurred".

by Graham (noreply@blogger.com) at 21 July 2010 12:11 PM

13 July 2010

Graham Poulter (verdant)

How to reduce 3G bandwidth usage, and 3G vs ADSL

My new place doesn't have ADSL yet, so I tethered my 3G iPhone to the computer. As a result, this post is about ways to make the computer sip bandwidth instead of guzzle it, and the changing break-even price between 3G and ADSL in South Africa.

Since I'm on MTN I needed to download a special config to enable tethering for the iPhone 3G, which is available from http://wan.to/iphone/.  Here's a how-to for iPhone tethering in Ubuntu.

But 3G bandwidth in South Africa is expensive: R80 for a 100MB MTN bundle (although its cheaper in bulk: R389 for a 2GB MTN bundle). The first time I plugged the phone into Windows the OS grabbed 40MB for updates. After that I did all I could to minimise bandwidth consumption:

Operating System Tweaks
  • Disable automatic download of operating system updates.
  • If using Windows, disable 3rd-parter auto-updaters using CCleaner (disable Flash, Java, Google updaters and any others)
  • Monitor TCP connections to see if any unexpected services are using the internet (lsof -i on linux, TcpView on Windows) and turn them off.
  • In iTunes, turn off update checking and change the default Podcast settings to "check manually" and never automatically download episodes!  That was another 20MB downloaded behind my back...
Firefox Preferences
  • Disable Firefox update and add-on updates.
  • Uncheck the Load images automatically checkbox. Text-only default saves a lot of bandwidth: I'm not going to pay to see sidebar ads.
  • Install FlashBlock and AdBlock Plus add-ons, to prevent downloading random content.
  • Install Firefox User Agent Switcher to pretend to be a mobile browser and get smaller mobile versions of websites.  If pretending to be an iPhone, be aware that Firefox is not compatible with some iPhone-only webapps.  
Google Chrome Options
  • In Options, "Under the bonnet", disable checking for updates, and various things like search-completion and DNS prefetching.
  • In  "Content settings" select "Do not show any images" and "Do not allow any sites to use plug-ins"
  • Start Google Chrome with --user-agent="Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543 Safari/419.3" to pretend its an iPhone. Chrome uses WebKit and will work with many iPhone webapps.

With this setup I can do searching, mail and news-checking on PC tethered to the phone, without spending hundreds of rands for 3G bandwidth.

The iPhone is faster tethered??

The strangest thing is that iPhone 3G internet suddenly gets fast when I tether it.  Safari on the phone at the same desk takes a while to load a heavy page, but plug the phone into the PC and use the PC browser and everything comes down at 500kbps.  I should double-check.  Does MTN have some way of knowing whether the phone is tethered and making 3G slow for mobile phones but fast when used like a 3G modem?   If so, is there a way for the iPhone to pretend its tethered when its not?

Comparing the cost of ADSL and 3G

A Telkom Closer 2 calling plan (free installation and free off-peak calls) is R170 per month, plus R200 pm for an MWEB All-in-One 2GB ADSL package - total of R370 per month.  That is almost as expensive as adding MTN's 2GB data bundle for R389 assuming an existing contract.  For more than 2GB per month, ADSL will be far cheaper, since R519 will buy the R170 Closer 2 line and R349 MWEB all-in-one uncapped ADSL at 384kbps.

Edit: Added iTunes podcast-disabling, and section on Google Chrome.

by Graham (noreply@blogger.com) at 13 July 2010 07:30 AM

03 July 2010

Charl van Niekerk (charlvn)

Twitter Facebook App Usability Fail

I just updated my Twitter profile picture and wanted to update my Facebook profile picture. What will the button do? Update my Facebook profile from my Twitter profile, or vice versa?

Screenshot

The answer: vice versa. Not cool guys. If it only works in one direction, please only make the arrow go in one direction!

A small thing, I know, and might sound like a nitpick. But it's these things that just tend to piss people off unnecessarily.

by Charl van Niekerk (charlvn@charlvn.com) at 03 July 2010 11:52 PM