Planet BLUG

May 12, 2012

Jonathan McDowell

Going to DebConf 12

DebConf12.png

Meant to post this a while ago when I booked the tickets, but life has a habit of being busy at present. I'm pleased to say I'm going to DebConf 12 in Managua. In the off-chance someone else might be on some of the same flights as me, here's what I've booked:

Outbound:

2012-07-07 00:15 SFO -> 08:12 CLT US466
2012-07-07 11:40 CLT -> 13:44 MIA US1831
2012-07-07 16:07 MIA -> 16:45 MGA US4925

Inbound:

2012-07-14 21:15 MGA -> 01:50 MIA US4944
2012-07-15 06:15 MIA -> 08:19 CLT US1800
2012-07-15 09:40 CLT -> 12:08 SFO US1485

There were some single stop options but the timings didn't them any quicker, they weren't any cheaper, and these times worked better for me anyway.

by Jonathan McDowell at May 12, 2012 03:50 PM

April 24, 2012

Philip Herron

Should I?

Well today i had a thought where i have spent about 3 to 4 years of my life working on my own projects and Open Source trying to learn outside of University. In my Degree path there is no Final Year project or anything, this always annoyed me. I only have 2 exams at the moment which i don’t fee that confident in. And since Gccpy is actually starting to get interesting where its starting to work and i completed my own interpreter to a decent amount crules and i created my own static compiler cmod a modula compiler for i386. I already had a thesis document started along side Gccpy and i am thinking of finishing it up this week to some extend detailing all 3 of these projects focusing on gccpy of course and handing this into my university i feel this must count towards something and i just want this monkey off my back i guess and i feel this might help. You can view the code for any of these projects over at:

code.redbrain.co.uk

Reminder the Gccpy code has been moved to the gccpy repository on that server and stable *ish code is maintined on the gccpy branch of the GCC git repository when i reach more stable code i will push the svn server also.

by redbrain at April 24, 2012 02:51 PM

Jonathan McDowell

The future is here again

Back in 2004 when Simon and I went full time with Black Cat one of the first things I did was sort out an ADSL offering, including native IPv6. We were one of the first UK ISPs to offer this (possibly the first; I know A&A had been doing tunneled IPv6 for a lot longer, but I'm not sure exactly when they enabled IPv6 on the PPP session. Also Bogons were fairly quick to enable it as well). By the middle of 2004 I was fully IPv6 enabled; my colo box had a native connection, my entire home network (a /64 for the wired, a /64 for the wireless) was configured, BCN had multiple native IPv6 connections to other ISPs (such as peering over LoNAP). By and large it just worked; I remember at one point looking at a traffic graph link from someone in Australia and them indicating surprise that I'd come in over v6. I hadn't noticed anything different than normal, which is exactly how it should be.

When we sold BCN in 2007 unfortunately one of the casualties was the v6 support. The ISP that took over the ADSL wasn't setup to be able to continue the v6 support, nor were RapidSwitch, who took over most of the hosting (I note with sadness that RapidSwitch still don't seem to be offering v6, though they keep saying it's a work in progress). So I stopped having any v6 for some time, refusing to slum it with a tunnel.

This changed at the start of last year, when I sought out new hosting for the. I ended up selecting Bytemark, partly because I knew of their commitment to v6. I'd chosen Sonic as my US access ISP, again partly because they offered an IPv6 tunnel service (while not as nice as native v6 over the DSL I felt that a tunnel provided by the DSL ISP was acceptable for access). However a combination of not having a machine that was always on at home, and a dynamic IP on my connection, meant that I never got round to configuring anything permanent up.

Recently I got around to buying a little low powered box to be always-on and this week I finally looked at configuring it up as the tunnel endpoint, planning to do some sort of screen scraping of the web interface to automatically update the tunnel broker information for the rare occurrences when my IP changes. The first nice surprise was that Sonic are now doing static IPs for free (previously you could only have a block of 8 for $20/month extra). That makes things a lot easier. So tonight I configured up the little server as the tunnel endpoint, installing radvd and some basic v6 firewalling. As expected my laptop sees the RAs, automatically configures everything up and my ssh sessions start to go over IPv6 instead. Looks like my phone also does the same. I'm not entirely sure what the NAT on the ADSL router is doing and if inbound connections will fail if there's nothing outbound holding the translation entry active, but I'm sure I can work around that if it turns out to be a problem. I care more about access than hosting anything on the end of my DSL anyway.

This means I'm finally almost back to where I was nearly 8 years ago, just in time for World IPv6 Launch day.

by Jonathan McDowell at April 24, 2012 06:00 AM

April 21, 2012

Philip Herron

Gccpy Update!

I have been very quite this last long while. Things are actually finally starting to come together for me now i am about to finish my degree when i got a few job interviews out of the blue and the one i really wanted i have now got the offer for the job and i am taking it. I have 2 exams to finish and i am just studying for them at the moment but not worrying about it that much because i quite frankly just don’t care that much because it wont affect any part of my life any-more. I have dreamed of this day for years and it feels so good. I have a small dilemma in that i went for Google Summer of code again for the 3rd year for Cython my proposal you can see here: gsoc 2012 proposal . Which i don’t feel i can accept if i get accepted but i shall see the start dates for my new job are set yet as i have to wait on the paper work coming though still and i will have to complete a course on financial software. I will give more info on the job because its quite exciting when i get everything set it stone more.

 

What i want to talk about is that my project in creating a Python Front-end to GCC is finally starting to do stuff now its quite exciting as of 1 hour ago you can compile this amount of python and have it work:

 

  1.  
  2. class date:
  3.   day = 0
  4.   month = 0
  5.   year = 0
  6.   print 11
  7.  
  8.   def __init__ (self, x, y, z):
  9.     self.day = x
  10.     self.month = y
  11.     self.year = z
  12.     print 22
  13.  
  14.   def print_date (self):
  15.     print 33
  16.     print self.day, self.month, self.year
  17.     print 34
  18.  
  19. print 0
  20. x = date (1, 2, 3)
  21. print 1
  22. x.print_date ()
  23. print 2
  24. x.day = 10
  25. print 3
  26. x.print_date ()
  27. print 4
  28.  

 

Although this is an extremely basic example this shows a helluva lot in how data is accessed and addressed which is all the core of dynamic typing. Right now i am just flesing things out with conditionals and loops now which will lead me on to creating the yield instruction and returns (which is half implemented) which i plan to use Setjmp.h to implement. Which leads on to exceptions etc. Then we move on to imports and some standard library stuff before i would work on a basic garbage collector.

 

Anyone interested i output gimple code for that example:

 

  1.  
  2. t_date_1.py.__main_start__ ()
  3. {
  4.   struct gpy_object_attrib_t * D.200;
  5.   struct gpy_object_attrib_t * D.201;
  6.   struct gpy_object_attrib_t * D.202;
  7.   struct gpy_object_attrib_t * D.203;
  8.   struct gpy_object_attrib_t * D.204;
  9.   struct gpy_object_attrib_t * D.205;
  10.   struct gpy_object_t * D.206;
  11.   struct gpy_object_t * D.207;
  12.   struct gpy_object_t * * __GPY_GLOBL_RR_STACK_POINTER.37;
  13.   struct gpy_object_t * * __GPY_GLOBL_RR_STACK_POINTER.38;
  14.   struct gpy_object_t * D.210;
  15.   struct gpy_object_t * * __GPY_GLOBL_RR_STACK_POINTER.39;
  16.   struct gpy_object_t * D.212;
  17.   struct gpy_object_t * D.213;
  18.   struct gpy_object_t * * __GPY_GLOBL_RR_STACK_POINTER.40;
  19.   struct gpy_object_t * D.215;
  20.   struct gpy_object_t * * __GPY_GLOBL_RR_STACK_POINTER.41;
  21.   struct gpy_object_t * D.217;
  22.   struct gpy_object_t * * __GPY_GLOBL_RR_STACK_POINTER.42;
  23.   struct gpy_object_t * D.219;
  24.   struct gpy_object_t * D.220;
  25.   void <retval>;
  26.  
  27.   gpy_rr_extend_runtime_stack (3);
  28.   D.200 = gpy_rr_fold_attribute ("month", 0B, 20);
  29.   D.201 = gpy_rr_fold_attribute ("day", 0B, 16);
  30.   D.202 = gpy_rr_fold_attribute ("__field_init__", t_date_1.py.date.__field_init__, 12);
  31.   D.203 = gpy_rr_fold_attribute ("print_date", t_date_1.py.date.print_date, 8);
  32.   D.204 = gpy_rr_fold_attribute ("__init__", t_date_1.py.date.__init__, 4);
  33.   D.205 = gpy_rr_fold_attribute ("year", 0B, 0);
  34.   C.13 = gpy_rr_fold_attrib_list (6, D.205, D.204, D.203, D.202, D.201, D.200);
  35.   A.14 = __GPY_GLOBL_RR_STACK_POINTER;
  36.   D.206 = gpy_rr_fold_class_decl (C.13, 24, "t_date_1.py.date");
  37.   *A.14 = D.206;
  38.   P.15 = gpy_rr_fold_integer (0);
  39.   gpy_rr_eval_print (1, 1, P.15);
  40.   A.16 = __GPY_GLOBL_RR_STACK_POINTER;
  41.   P.17 = gpy_rr_fold_integer (1);
  42.   P.18 = gpy_rr_fold_integer (2);
  43.   P.19 = gpy_rr_fold_integer (3);
  44.   D.207 = *A.16;
  45.   R.20 = gpy_rr_fold_call (D.207, 3, P.17, P.18, P.19);
  46.   __GPY_GLOBL_RR_STACK_POINTER.37 = __GPY_GLOBL_RR_STACK_POINTER;
  47.   A.21 = __GPY_GLOBL_RR_STACK_POINTER.37 + -4;
  48.   *A.21 = R.20;
  49.   P.22 = gpy_rr_fold_integer (1);
  50.   gpy_rr_eval_print (1, 1, P.22);
  51.   __GPY_GLOBL_RR_STACK_POINTER.38 = __GPY_GLOBL_RR_STACK_POINTER;
  52.   A.24 = __GPY_GLOBL_RR_STACK_POINTER.38 + -4;
  53.   D.210 = *A.24;
  54.   T.23 = gpy_rr_eval_attrib_reference (D.210, "print_date");
  55.   __GPY_GLOBL_RR_STACK_POINTER.39 = __GPY_GLOBL_RR_STACK_POINTER;
  56.   A.25 = __GPY_GLOBL_RR_STACK_POINTER.39 + -4;
  57.   D.212 = *A.25;
  58.   D.213 = *T.23;
  59.   R.26 = gpy_rr_fold_call (D.213, 1, D.212);
  60.   P.27 = gpy_rr_fold_integer (2);
  61.   gpy_rr_eval_print (1, 1, P.27);
  62.   P.29 = gpy_rr_fold_integer (10);
  63.   __GPY_GLOBL_RR_STACK_POINTER.40 = __GPY_GLOBL_RR_STACK_POINTER;
  64.   A.30 = __GPY_GLOBL_RR_STACK_POINTER.40 + -4;
  65.   D.215 = *A.30;
  66.   T.28 = gpy_rr_eval_attrib_reference (D.215, "day");
  67.   *T.28 = P.29;
  68.   P.31 = gpy_rr_fold_integer (3);
  69.   gpy_rr_eval_print (1, 1, P.31);
  70.   __GPY_GLOBL_RR_STACK_POINTER.41 = __GPY_GLOBL_RR_STACK_POINTER;
  71.   A.33 = __GPY_GLOBL_RR_STACK_POINTER.41 + -4;
  72.   D.217 = *A.33;
  73.   T.32 = gpy_rr_eval_attrib_reference (D.217, "print_date");
  74.   __GPY_GLOBL_RR_STACK_POINTER.42 = __GPY_GLOBL_RR_STACK_POINTER;
  75.   A.34 = __GPY_GLOBL_RR_STACK_POINTER.42 + -4;
  76.   D.219 = *A.34;
  77.   D.220 = *T.32;
  78.   R.35 = gpy_rr_fold_call (D.220, 1, D.219);
  79.   P.36 = gpy_rr_fold_integer (4);
  80.   gpy_rr_eval_print (1, 1, P.36);
  81. }
  82.  
  83.  
  84. t_date_1.py.date.__field_init__ (struct t_date_1.py.date * __object_state__)
  85. {
  86.   void <retval>;
  87.  
  88.   P.0 = gpy_rr_fold_integer (0);
  89.   __object_state__->day = P.0;
  90.   P.1 = gpy_rr_fold_integer (0);
  91.   __object_state__->month = P.1;
  92.   P.2 = gpy_rr_fold_integer (0);
  93.   __object_state__->year = P.2;
  94.   P.3 = gpy_rr_fold_integer (11);
  95.   gpy_rr_eval_print (1, 1, P.3);
  96. }
  97.  
  98.  
  99. t_date_1.py.date.print_date (struct gpy_object_t * self, struct gpy_object_t * * __arguments__)
  100. {
  101.   struct gpy_object_t * D.116;
  102.   struct gpy_object_t * D.117;
  103.   struct gpy_object_t * D.118;
  104.   void <retval>;
  105.  
  106.   P.8 = gpy_rr_fold_integer (33);
  107.   gpy_rr_eval_print (1, 1, P.8);
  108.   T.9 = gpy_rr_eval_attrib_reference (self, "day");
  109.   T.10 = gpy_rr_eval_attrib_reference (self, "month");
  110.   T.11 = gpy_rr_eval_attrib_reference (self, "year");
  111.   D.116 = *T.11;
  112.   D.117 = *T.10;
  113.   D.118 = *T.9;
  114.   gpy_rr_eval_print (1, 3, D.118, D.117, D.116);
  115.   P.12 = gpy_rr_fold_integer (34);
  116.   gpy_rr_eval_print (1, 1, P.12);
  117. }
  118.  
  119.  
  120. t_date_1.py.date.__init__ (struct gpy_object_t * self, struct gpy_object_t * * __arguments__)
  121. {
  122.   void <retval>;
  123.  
  124.   x = *__arguments__;
  125.   y = MEM[(struct gpy_object_t * *)__arguments__ + 4B];
  126.   z = MEM[(struct gpy_object_t * *)__arguments__ + 8B];
  127.   T.4 = gpy_rr_eval_attrib_reference (self, "day");
  128.   *T.4 = x;
  129.   T.5 = gpy_rr_eval_attrib_reference (self, "month");
  130.   *T.5 = y;
  131.   T.6 = gpy_rr_eval_attrib_reference (self, "year");
  132.   *T.6 = z;
  133.   P.7 = gpy_rr_fold_integer (22);
  134.   gpy_rr_eval_print (1, 1, P.7);
  135. }
  136.  

 

Its very exciting because its taken almost 3 years of my life in my spare time and 2 Google summer of Code to get this far but finally the huge task of getting the core working its nerly there. I will need to write up alot more about this project from now because its at a state where its much easier to work with people because creating a code base from scratch which can change alot with new ideas its hard untill your sure how each part will work but when its such a big project it can be difficult unless your working together fulltime almost.

by redbrain at April 21, 2012 06:33 PM

April 12, 2012

Simon McCartney

An Average Day

There is no such thing as an average or normal day, but here’s what today yesterday looked like (the first day back after a 6 day break):

  • 1000-1200 Wiki Gardening – moving some WIP from my head/evernote to team wiki pages
  • 1200-1230 Monitoring & Measuring Catchup – a quick check around on the stuff we don’t get alerted about, checkup on some new nodes I added to cacti before I finished up last week.
  • 1230-1330 Reading – closing out a bunch of open tabs etc
  • 1330-1430 Lunch (the joy of working from home, soup & sandwiches with family:-))
  • 1430-1600 Open CM tickets for up coming changes, upgrade Puppet Dashboard, publish some more strategy information on our internal wiki.  Work through the dreaded email back log.
  • 1600-1700 Baby Dr Appointment
  • 1700-1800 Weekly Team conference call (mostly around some major work scheduled for this weekend)
  • 1800-2100 Family Time – help the kids tidy up & get them to bed, get something to eat
  • 2100-2200 Finish up some puppet work, mostly tidying up & committing some work to git, review steps for some up coming work with Pacific Time colleague
  • 2200-2300 TV Break  - Michael McIntyre :-)
  • 2300-0030 more follow up with PT colleague, ironed out plan for moving from DAS to NAS for a pilot set of machines, committed plan to wiki for tracking, discussed the general meanness of some of the people we work with.
After the brain searching trying to remember what I did, I’ve re-installed RescueTime..

by simonm at April 12, 2012 11:25 AM

March 27, 2012

Paul Gregg

My OnLive Experience

In February BT posted an offer (no longer on the BT web site) allowing customers in Northern Ireland to buy an OnLive Gaming Console (MicroConsole) for £9.99 (normal price £70) plus £6 shipping. Seemed like a good deal - and so I signed up (2 Feb 2012). Remember these prices - they are important as they come up later.

Executive Summary:
I bought a MicroConsole device from OnLive, that is faulty.
OnLive is failing to uphold consumer's Statutory rights in the UK. And even goes to far as to explicitly deny those rights to consumers, itself a criminal offense in the UK. I have been denied a refund of a defective unit on the grounds that the unit was free and all I paid was postage (which is incorrect).
OnLive's website states "No refunds" - a criminal offense in the UK.
Onlive have stated that my MicroConsole was free, and I only paid shipping costs. And shipping costs will not be refunded. *wrong*
OnLive are also denying Sale of Goods Act by saying that I only have 7 days to cancel and that I agreed to this in the Terms of Service. This relates to the Distance Selling Regulations and not to faulty goods under the Sale of Goods Act.

I am of the opinion that I acted reasonably and gave OnLive sufficient time to rectify the problem. I also believe, given the time lines showing that the hardware never worked, that I can not, in law, be deemed to have accepted the goods, and so have a lawful right to fully reject them, and obtain a full refund for all monies paid.

I don't want to criticise OnLive Technical Support, just their Customer Service policies.

Timeline: I will update the timeline below as things develop.

I received the MicroConsole the week of February 18 (not sure exactly what date) and attempted to use it, however it was nothing like the experience received when playing on the PC.  The PC was reasonably quick and responsive and I would estimate ran at maybe 15fps which was reasonable for streaming videogame over the internet.  The MicroConsole on the otherhand was laggy, and I achieved maybe 3 to 4 fps. In short, the game (Dirt 3) was unplayable.

I opened a Support ticket February 18. And so the saga begins.

My original support request: 02/18/2012 05:18 PM (timestamps from OnLive support portal)

I have attempted to set up my MicroConsole and am able to connect to the service.
However any time I attempt to play/start HomeFront game, the MC crashes and reboots.
Attempting to play Dirt3 results in a game running at approx 4 frames per second.
Playing Homefront on my PC is fine.
The MC constantly pops a message in the top right complaining of network problems - but the fact my PC works fine, shows the network is fine.
http://www.speedtest.net/result/1782184455.png
My home is wired for Gbit ethernet, and the MC is plugged into that. I've tried an alternative ethernet cable - no difference.
Even the intro screen/animation on the MC is blocky and just looks wrong.
I'm beginning to think I got a bad MC as I have never been able to play a game on it.
Thanks,
PG.
Within an 80 minutes I had a reply, excellent. Except it is a standardised get-more-info affair. Fair enough I suppose: 02/18/2012 06:40 PM

Greetings PG,
Thank you for contacting OnLive. To help our team troubleshoot the issue, please provide the following information:
- In what country are you located?
- What is the name of your Internet Service Provider?
- Is an error message displayed when you connect? If so, what is the message?
- What are the results of the broadband quality test from http://www.pingtest.net? *
- What are the results of the Internet connection test from http://www.speedtest.net? *
- What is the brand and model of the cable or DSL modem used in your home network?
- What (if any) is the brand and model of the router used in your home network?
- Are you behind a firewall and/or are any antivirus applications running?
- Are you using a Wireless (Wi-Fi) or Wired router?
If Wi-Fi, please check for interference:
- Are you the only person currently on network (using the Internet), or are other members of your household sharing the connection?
- If you have a smartphone, is it configured to share your Wi-Fi network?
* For best results, choose the server closest to your location:
US
-- East Coast --> Washington D.C.
-- West Coast --> San Francisco, CA
-- Midwest --> Dallas, TX
UK
-- London
Best regards,
Realiana
Customer Service Representative
http://support.onlive.com/

So I respond to each of the questions: 02/19/2012 06:13 AM

In what country are you located?
UK
- What is the name of your Internet Service Provider?
BT
- Is an error message displayed when you connect? If so, what is the message?
No error message.
- What are the results of the broadband quality test from http://www.pingtest.net? *
http://www.pingtest.net/result/57209759.png
- What are the results of the Internet connection test from http://www.speedtest.net? *
http://www.speedtest.net/result/1782184455.png
- What is the brand and model of the cable or DSL modem used in your home network?
BT Supplied HomeHub3 (I believe) - supplied with the BT Infinity service.
- What (if any) is the brand and model of the router used in your home network?
Same device as the BT HomeHub3
- Are you behind a firewall and/or are any antivirus applications running?
No - just the BT HomeHub.
- Are you using a Wireless (Wi-Fi) or Wired router?
BT HomeHub does Wifi - but I am not using Wifi. I have Gbit Cat5e wired ethernet connections to all devices, including the MC.
If Wi-Fi, please check for interference:
No interference. The BT HomeHub3 is supposed to scan and pick the best channel with no interferences. However, the issue is moot - my nearest neighbour is 100m away and using my phone's (android app) Wifi Analyser, I am the only wifi network it can see.
- Are you the only person currently on network (using the Internet), or are other members of your household sharing the connection?
At the times of testing, I am the only one using the network.
- If you have a smartphone, is it configured to share your Wi-Fi network?
No.
Thanks,
PG
The following Wednesday I get a holding email: 02/22/2012 12:09 PM

Hello,
Thank you for the information. I will forward your inquiry to our Technical Team for further assistance, They will contact you via email as soon as they are able.
Thank you for your patience. Have a lovely day!
Best regards,
Realiana
Customer Service Representative
http://support.onlive.com/
And so I wait another 2 days to receive: 02/24/2012 02:23 PM

Hello,

Your issues may have to do with a couple of things. I saw that you had run a speed test, but we would like it if you could run the test to London.

Can you please run a test for me at www.speedtest.net and find the white dot that represents London. Click on that dot and start the test. When the test finishes, please click on Share This Result, then click Copy and paste the results here.

Best regards,

Berret
OnLive Technical Support
http://support.onlive.com

2 days later, I reply: 02/26/2012 04:41 PM

Hi,

Here are some results from London based speedtests that I ran just now.

http://www.speedtest.net/result/1798764992.png

http://www.speedtest.net/result/1798810091.png

http://www.speedtest.net/result/1798812080.png

http://www.speedtest.net/result/1798812973.png

Thanks,
PG
02/28/2012 04:22 PM:

Hello,

Thank you very much for providing those links for me. Is this issue only on your MicroConsole, or do you notice issues on you computer as well?

Best regards,

Berret
OnLive Technical Support
http://support.onlive.com

02/28/2012 06:26 PM

Hi,

No. PC play seems to be working well.

Thanks,
PG
--
Sent from my Android phone with K-9 Mail. Please excuse my brevity.
03/01/2012 10:26 AM

Hey PG,

I am trying to do some research into why you are having this experience on your MicroConsole only. Can you try and run a few more sessions on the device, so we can get some details? When I look up your previous sessions, they are understandably computer ones for the most part.

I appreciate the help in figuring out your issue.

Best regards,

Berret
OnLive Technical Support
http://support.onlive.com

Now, somehow I did not get this email :( but on Monday 5th I got a notification that the ticket was closed because I did not reply.

From: OnLive Support [mailto:support@onlive.com]
Sent: 05 March 2012 08:22
Subject: MC blocky and crashes. [Incident: 120218-000143]
 

This ticket has been closed because we have not heard back from you in 3 days. This is an automated message, but you can re-open the ticket at any time by replying to this email.

I replied saying I didn't get the earlier message, assuming it would reopen the ticket.
It didn't, but I was not aware of that and several days later I logged into the web site to find the ticket still closed :(  So I open another ticket.
 
03/20/2012 05:33 PM

Unfortunately you did not solve 120218-000143.

I did not receive the message just before you closed the ticket and so was surprised when the ticket was closed.

In your message about closing it you state:
"This ticket has been closed because we have not heard back from you in 3 days. This is an automated message, but you can re-open the ticket at any time by replying to this email."

Unfortunately this is not true because I did reply to this email with further information but this did not reopen the ticket. Now when I look at the ticket online, it says I can not reopen the ticket.

So with that complaint out of the way...

I wish to request a refund for this MC because it simply does not perform the function to which it is supposed to do.
Please advise as to the correct process to follow to achieve this.

Thank you
Paul Gregg

It was then I spotted on their web site the message "No refunds" and so sent a followup:

03/20/2012 06:14 PM

Oh - I just saw this:

What if I change my mind, and want to return the OnLive Game System or an accessory?

All purchases are final. No refunds.
Find comprehensive support information at: OnLive Game System.

FYI - Not only is this term unlawful - OnLive is *committing* a criminal offense in the UK.

Under the Consumer Protection from Unfair Trading Regulations 2008 it is also a criminal offence to mislead a consumer about his/her legal rights. Examples might include stating 'no refunds' or 'sold as seen'.

The picked it up again: 03/21/2012 04:02 PM

Hello,

Thank you for contacting us again, I apologize you had not seen my previous message. I would happy to continue to troubleshoot your issue with you if you are still having a bad experience. If you would like to pursue a refund, you are correct that our policy is that all sales are final, but we can escalate you to our billing department to review your request.

Please let us know how you would like to proceed.

Best regards,

Berret
OnLive Technical Support
http://support.onlive.com

  03/21/2012 05:26 PM

Hi Berret,

Thank you for your reply.
I am at the point where I believe the MC is faulty because it crashes and reboots when I start a game.

I understand that you state all sales are final - however this is contrary to UK law as I noted - and by even displaying this notice you are committing a criminal offense in UK law. I trust you will rectify this. Further, under the Sale of Goods Act, goods must be of merchantable quality and fit for purpose. You've had over a month to try and make the MC
I bought work, without success, and I am within my legal right to demand a full refund. This is what I am invoking now.

1. You will provide a full refund for the faulty MC.
2. You will provide return postage, or collection service to return the faulty MC to you.

Thank you,
Paul Gregg

03/24/2012 06:58 PM

Hello,

I will escalate your request to the billing department, and they will explain the next steps to you. They will be in on Monday and will address your issue as quickly as they can.

Best regards,

Berret
OnLive Technical Support
http://support.onlive.com

03/26/2012 11:13 AM

Greetings,

Thank you for contacting OnLive.

We understand that you are requesting a refund for your OnLive Game System purchase..
In order to credit your account, please return the OnLive Gaming System to following address:

ATTN: OnLive Department
LGI Logistics Group International UK LTD
4 Clarendon Drive
Wymbush
Milton Keynes
MK8 8DA

After we receive the OnLive Game System, we will apply a refund to your account. If we do not receive the device within 10 days from this email date, you will not receive the refund.

If you have any other questions please feel free to ask.

Joseph
Warranty Department
http://support.onlive.com/


03/27/2012 08:32 AM

Hi Joseph,

Thank you for your message. However, I would request that you pick the returned item up from me as is my right under Sale of Goods Act for faulty goods.

To be clear - I am requesting a full refund (again under law) and NOT a "credit to my account".

The device is faulty and has never performed as advertised. As is evidenced by support tickets you can see in my account.

Quote:
http://www.oft.gov.uk/business-advice/treating-customers-fairly/sogahome/sogaexplained/
"In the case of faulty goods being returned because they are not fit for purpose do not match their description or are not of a satisfactory quality , the customer is entitled to claim the cost of postage from you or to request that you arrange collection of the item."

I will have the goods packaged in the original box available from my shipping address from Wednesday 28th March.

Thank you.

Paul Gregg

03/27/2012 11:31 AM

Greetings,

As mentioned in the terms of service that you agreed upon when you created your account it states that "All hardware sales subject to a 7-day right to cancel."

You are past the 7-day right to cancel.

The OnLive Game System you ordered was free and only the shipping cost was charged to your account. That cost was to pay to have the unit sent to you which it was. Shipping costs will not be refunded.

If the unit is defective, we have no problem exchanging the unit for you at no cost to you. Would you like for me to process an exchange for a brand new unit for you? I can even provide you with a free 5-day PlayPass to use on a game of your choice to try out the new system.

If you have any other questions please feel free to ask.

Joseph
Warranty Department
http://support.onlive.com/

03/27/2012 03:40 PM

Hi Joseph,

Thank you for your reply.

I would like to address each of your points in turn.

1. 7 day right to cancel:
"Notwithstanding the above, the purchase of an OGS or any other hardware will constitute the supply of goods, and you will have seven days (beginning the day after you receive the goods) in which you may choose to cancel the contract."

This quote relates to the Distance Selling Regulations within which I would have a legal right to return the goods, without reason, for a full refund.

This is NOT a DSR issue. I am attempting to return the Goods under the Sale of Goods Act as faulty. Not as described, not fit for purpose and not of satisfactory quality. Given the dates of my support tickets, it should be obvious that the MicroConsole was faulty when delivered. I also filed my first ticket with the 7 days of delivery which, again, signals to you that I have not "accepted" the Good in law.

2. "You are past the 7-day right to cancel."

Irrelevant for reasons stated in 1.

3. "The OnLive Game System you ordered was free and only the shipping cost was charged to your account. That cost was to pay to have the unit sent to you which it was. Shipping costs will not be refunded."

Incorrect. The offer was a discounted MicroConsole @ £9.99 and £ 6.00 shipping.

4. "If the unit is defective, we have no problem exchanging the unit for you at no cost to you"

Thank you for your offer. However, since the original contract in in breech under Sale of Goods Act - I am legally entitled to reject the good and request a full refund, including postage. In essence, I should not be out of pocket since the contract is void.

Further, since you appear to be relying on DSR "7 day" notice period -
Your attention is drawn to the Consumer Protection (Distance Selling) Regulations 2000, specifically to regulation 14 which states that you may not make any charge in relation to the supply of goods under a contract whereby the cancellation of the contract is due to the breach of implied terms of the contract (specifically implied terms in relation to section 14 of the Sale of Goods Act).

I therefore request that you reimburse both goods and postage fees in accordance with these regulations.

Regards,
PG


 

by Paul Gregg at March 27, 2012 10:49 PM

OnLive UK Terms of Service and Terms of Use, copy

Copy taken from http://www.onlive.co.uk/legal/termsofservice and http://www.onlive.co.uk/legal/index on March 27, 2012.

TERMS OF SERVICE

OnLive EMEA S.à r.l TERMS OF SERVICE Last Updated 7 December 2011 Welcome to the OnLive® Game Service (the "Service" or "SERVICE"), a service of OnLive EMEA s.à r.l (collectively, "OnLive" or "ONLIVE" or "we" or "us"). The OnLive Terms of Service (the "Terms") govern our relationship with anyone who accesses the Service by any method or means, including but not limited to access of the Service through the OnLive Game System ("OGS"), which includes the MicroConsole™ TV adapter (the "MicroConsole TV adapter") and the Gamepad Controller ("Controller"). Please read the Terms, the Privacy Policy and the OnLive Community Guidelines carefully. By clicking "I Agree," you agree to be bound by the Terms, the OnLive Privacy Policy, and the OnLive Community Guidelines. Your use of the Service is only for purposes that are permitted by these Terms. Any use or access of the Service by any means other than those authorised by these Terms is prohibited unless specifically agreed with OnLive. On an ongoing basis, OnLive makes changes and additions to the Service including but not limited to: new games, features, and functionality. OnLive will provide reasonable notice of all material changes and additions to the Service. Your continued use of the Service after such notification will indicate your acceptance of any such changes and additions and your continued acceptance of the Terms, the OnLive Privacy Policy, and the OnLive Community Guidelines. You may not use the Service if you do not agree to be, or are unable to be, bound by the Terms, the OnLive Privacy Policy, and the OnLive Community Guidelines. 1. Privacy The OnLive Privacy Policy tells you about the way we handle and protect your Personal Information (as defined in the OnLive Privacy Policy) when you use the Service. We ask that you review and agree to the OnLive Privacy Policy before sharing Personal Information on the Service. 2. Community Guidelines In order to provide a safe and welcoming environment for all of our users, we have established certain ground rules regarding your behavior on the Service that are specified in the OnLive Community Guidelines. The OnLive Community Guidelines apply to your use of the Service and any and all User Generated Content (as defined in Section 9 below) that you contribute to the Service. OnLive reserves the right to terminate or suspend your OnLive Service Account ("Account") if you breach the OnLive Community Guidelines. 3. Eligibility In order to register for an Account on the Service, you must be at least 18 years of age, be an emancipated minor or have reached the age of majority in your country of residence, and be a current resident of the United Kingdom ("Account Holder"). As an Account Holder, you represent and warrant to OnLive that you meet the eligibility criteria in the preceding sentence. 4. Accepting and Changing the Terms You become bound by the Terms by (a) clicking to agree to the Terms; (b) downloading to a desktop, laptop, mobile device or obtaining through any other means on any other device or medium, the OnLive Application Software without the authorization of OnLive; (c) installing the OnLive Application Software without the authorization of OnLive; or (d) otherwise accessing the Service without the authorization of OnLive. We may change the Terms at any time in our sole discretion. We will provide you with reasonable notice of any changes to the Terms. Continued use of the Service after the notice period will constitute acceptance of the Terms. 5. Third Party Terms Buying or accessing certain third party content on the Service may require you to review, and accept or decline certain third party disclosures, policies, and agreements including but not limited to third party end user license agreements, privacy policies, and terms of service ("Third Party Terms"). You may be presented with Third Party Terms prior to your purchase or use of third party content, or wherever OnLive, in its sole discretion, deems presentation of Third Party Terms is reasonably necessary or legally required to provide proper notice to you. You can accept Third Party Terms by (a) entering your password to purchase access to or to use the third party content on the Service or (b) accessing the purchased or selected third party content through the Service having been given reasonable notice of the Third Party Terms. If you do not accept Third Party Terms in the manner described but you nevertheless gain unauthorized access to the Service, you will be deemed to have accepted Third Party Terms upon such access of the third party content. If you choose to decline any Third Party Terms, you may do so by not purchasing the third party content referenced by the Third Party Terms or otherwise declining the Third Party Terms as provided by OnLive or the third party providing the Terms. Please be advised that some Third Party Terms may state or imply you have certain rights to a physical product, rights to download, or install third party content to a local machine, and/or other rights associated with physical possession or control of third party content. Such statements within Third Party Terms may not be applicable to use of the third party content on the Service. In all Third Party Terms, the user agreeing to, and/or the user presented with Third Party Terms, will in all cases continue to be the consumer end user of the third party content. Unless expressly agreed by OnLive, OnLive shall not be the intended or actual licensee, user, or recipient of any Third Party Terms. 6. Accounts You do not have the right to share your Account with any third party, except as you provide pursuant to the Parental Controls features. You are solely responsible for all activity on your Account, including violations of the Terms by any third party that accesses the Service through your Account, and for the security of your Account. You also agree to the following: • You agree to provide and maintain an active email address through which you can be reached for the duration of your Account. You agree to provide accurate and up-to-date email address, contact and billing information to OnLive. • You agree to use the Service only for purposes that are permitted by (a) the Terms and (b) any applicable law, regulation, or generally accepted practices or guidelines in the relevant jurisdictions. • You agree to notify OnLive of any unauthorized use of your Account, any impending or threatened event that may negatively impact the Service, security of the Service, or any other violation of the Terms known to you, including by third parties that have accessed the Service through your Account. • You agree to not make any attempt to access the Service via any means or interface other than those which have been provided to you by OnLive, unless you have been granted explicit written permission by an authorized representative of OnLive to do otherwise. • You agree to not engage in any activity that interferes with or disrupts, degrades, harms or threatens to harm the Service, security of the Service, our servers, or the use of the Service by any of our users. • You agree to not represent to any third party that you are an OnLive employee or authorized representative of OnLive. • You agree to not register a Player Tag (i.e. OnLive user name) that is vulgar, offensive, libelous, slanderous, discriminatory or obscene or that violates any law, or otherwise breaches the Terms or Community Guidelines. • You agree to not transfer or share your Account with any other party except as permitted by the Parental Controls features as explained below. • You agree not to transfer or share your OnLive Service login information with any other party. • You agree to not tamper with in any manner, disassemble, reverse engineer, or otherwise modify any hardware or software of the Service made available to you. • The Service includes parental controls features ("Parental Controls") which restrict access to certain content and features which may be deemed inappropriate for Minors (youth between 13 and up to 18). The Parental Controls can only be accessed with a parental control passcode, and you agree not to share this parental control passcode with any third parties (including the Minor for whom the Parental Controls are activated). You may provide access to your Account to any member of your household (each an "Authorised User"), provided the following conditions are met: • You do not allow access to your Account to any person under the age of 13 years old; • You do not provide the details of your parental control passcode to any third party, including any Authorised User; • You expressly bring the OnLive Privacy Policy to the attention of each Authorised User; and expressly inform each Authorised User that their personal data, which may be disclosed through OnLive Friends and Voice Chat features, may be collected by OnLive and disclosed to other users while on the Service. You, as the Account Holder, assume responsibility for all activity on the Account from Authorised Users, including Authorised User activity when Parental Controls are enabled. Account Holders who set up Parental Controls and allow Minors to use an Account are liable for all activities of such Minor and all public disclosures of information made by such Minor. OnLive reserves the right to terminate or suspend your Account for breach of the account guidelines set out in this Section 6. 7. OnLive Application Software The OnLive Application Software and other related materials (collectively, the "Materials") made accessible to you in connection with the Service will be licensed under, and subject to, the terms and conditions of the OnLive End User License Agreement ("OnLive EULA"). 8. Our Content With the exception of User Generated Content (as defined in Section 9 below), as between you and OnLive or its affiliates, subsidiaries, licensors, or suppliers retain title to and ownership of everything on or used in connection with the Service, including, but not limited to, text; images; graphics; logos; audio and video content; visual, auditory, tactile, and motion user interfaces, and any OnLive hardware, software, or computer code (collectively, "Content"). This also includes, without limitation, the structure, design, animation, video, effects, overall "look and feel" and arrangement of Content on the Service. With regard to any gaming statistics like scores, rankings, log in/log out times, length of gameplay, and your presence on the Service, OnLive owns that content exclusively and/or shares ownership of that content with third party content providers and may grant any of our affiliates, subsidiaries, licensors, partners, or suppliers permission to use such content, including the use and display of such content publicly for the purposes of leaderboards, enhancing multiplayer gameplay, tournaments, and marketing and promotion efforts. Subject to license restrictions and these Terms, certain Content on the Service may not be available to users accessing the Service through specific client devices (e.g. Macintosh, Windows PC, MicroConsole™ TV adapter, cell phones, tablet computers, Internet TVs, and set-top boxes). Such limitations will be specified in the Content descriptions provided prior to your purchase of any such Content, during the purchase process and/or in the EULA for any particular piece of Content which has such restrictions. OnLive owns patents, copyrights, trademarks, service marks, trade names, trade secrets, domain names and other intellectual property, and proprietary rights throughout the world in, or to, or associated with the Content and/or the Service (the "IP Rights"), and the Content and the Service are protected by the IP Rights and all other applicable intellectual property rights and laws. Subject to your compliance with the Terms, the OnLive Privacy Policy and the OnLive Community Guidelines, OnLive grants you a limited, personal, non-exclusive, non-transferable, non-sublicensable, revocable license under the IP Rights to use the Service in accordance with the Terms, for the duration of your membership and/or access to the Service, solely for your personal and non-commercial use. You may not modify, reproduce, distribute, create derivative works or adaptations of, publish, perform, display, transmit or in any way exploit any of the Content in whole or in part except as expressly authorized by OnLive. You may not, in whole or in part, reverse engineer, derive (or attempt to derive) any source code, modify, disassemble, decompile, or remove any proprietary notices or labels from the Service or any hardware or software associated or used in connection with the Service. Except as expressly and unambiguously provided herein, OnLive does not grant you any express or implied rights in or to the Service, any Content or any software associated or used in connection with the Service. Except as expressly provided herein (or in the Privacy Policy) you may not transfer, publish, display, disclose or make available any reproductions of the Service or the Content to any other parties in any way, including, without limitation, by uploading videos or images to file sharing sites, sharing or making available screen captures of the Service or any Content, or sharing or making available any source code or executable code of any software associated or used in connection with the Service. You may not rent, lease, license or sublicense the Service to others, or use the Service in any manner for the benefit of any third party. 9. User Generated Content Any time you post a message or communication on an OnLive sponsored forum, or create, post, upload, submit, share or distribute any content through the use of the Service, including the OnLive User Community Forums, or play a game on the Service, including any user name, tag, handle, motto, avatar video or still, and including contributions via video, voice and text chat, text messaging, forums, message boards, whether within or outside a game (any such message, communication, content or play, collectively, "User Generated Content" or "UGC"), you grant OnLive a non-exclusive, worldwide, perpetual, irrevocable, unrestricted, royalty-free, fully paid-up license (with the right to sublicense) to use, reproduce, distribute, display, perform, transmit, modify, edit, create derivative works from, and otherwise exploit such UGC, in any form, format, or medium now known or later developed. You represent and warrant that you have the right to grant these rights to OnLive and that you will not post any content or links, user-generated or otherwise, that infringe, misappropriate or violate any privacy, intellectual property, or any other rights of any party, or which violates our Community Guidelines, or that is vulgar, offensive, libelous, slanderous, discriminatory or obscene or that violates any law. You hereby waive all "moral rights" with respect to all UGC and all copyrights therein to the extent such moral rights can be waived under the existing law of any jurisdiction, and, to the extent such moral rights cannot be waived, you warrant that you will not seek to enforce such moral rights against OnLive. UGC specifically excludes any gaming and Service usage statistics like scores, rankings, log in/log out times, length of gameplay, and your presence on the Service. OnLive owns gaming and Service usage statistics exclusively and/or shares ownership of that content with third party content providers and may grant any of our affiliates, subsidiaries, licensors, partners, or supplier's permission to use such content, including the use and display of such content publicly for the purposes of leaderboards, enhancing multiplayer gameplay, tournaments, and marketing and promotion efforts. OnLive reserves the right to pre-screen, monitor, moderate, and delete any UGC that you or other OnLive users submit to the Service, including, but not limited to, posts made to public forums. However, we have no obligation to do so, and you may be exposed to content you find vulgar, offensive, libelous, slanderous, discriminatory, obscene or is in violation of a law. You acknowledge that OnLive is not an author, publisher or editor of any UGC posted on the Service or of any information provided by another content provider on the Service. 10. Voice Chat Voice chat communications within the Service should not be considered private. Voice chat communications may be heard by others as part of gameplay or in other contexts, for example, as part of Spectating. OnLive is under no obligation to monitor user communications but reserves the right to act on reports of misconduct or abuse of such privileges at OnLive's sole discretion. Because voice chat and other communications may be viewed and/or heard, users should avoid revealing any personally identifiable information. 11. OnLive Purchases and Billing Offers are only valid within the United Kingdom. Offers cannot be combined unless expressly stated. Some game purchases may not be available for all platforms and different prices may be charged for different platforms (e.g., PC, Mac, and MicroConsole TV adapter). Promotion codes and coupons have no cash value. Subject to any OnLive promotional offers you may accept, OnLive may require payment of fees for the Service membership offer you select (the "Membership Plan"), third party content, and any additional items and services that may be available through the Service. You may have to register for an Account and sign up for a Membership Plan in order to access the various features of the Service and pay for any third party content. All purchases are charged in GBP. By registering for an Account on the Service, you represent that you are at least 18 years of age and have reached the age of majority in your country of residence. A credit card is not required to sign up for the Service. However, if you select a Membership Plan that requires a credit card, you represent that you are authorized to use that credit card. You must also be authorized to use any subsequent credit card in the event you change or update the credit card you used to register. By signing up for a Membership Plan, you expressly authorize OnLive to charge you for services and products purchased under your Account including but not limited to required or optional fees associated with maintaining an active Membership Plan in good standing (the "Membership Fees"), third party content, and any additional items and services that may be available through the Service. Membership Plans may require one-time or recurring Membership Fees. If so, OnLive will bill you in accordance with the terms of your Membership Plan. You acknowledge that the Service (including the sale of a right to play games through it) is a supply of services to you by OnLive, which commences once you register for the Service and pay the Membership Fees or once you purchase the right to play a particular game. OnLive will have commenced the supply of services to you by granting you access to the Service or the relevant game, and you will lose your right to cancel the purchase under Directive 97/7/EC as implemented in your country of residence. Notwithstanding the above, the purchase of an OGS or any other hardware will constitute the supply of goods, and you will have seven days (beginning the day after you receive the goods) in which you may choose to cancel the contract. If you provide notice of such cancellation to OnLive, and return the merchandise and we will provide you with a full refund for the purchase. Prices for any third party content are subject to change at any time without notice. OnLive reserves the right to change the pricing, billing, Membership Plans and Membership Fees for the Service at any time. In the event OnLive makes any such changes to the Service, we will provide you with at least thirty (30) calendar days notice via the email address you have provided in your Account. If you do not consent to these changes, you must stop using the Service and may close your Account. In the event your Account is closed or suspended for any reason, including because you do not consent to the changes to the changes to the pricing, billing, Membership Plans and Membership Fees for the Service, OnLive reserves the right to charge you for any costs, surcharges, or debts still pending on your Account. You may not register a new OnLive Account until all costs, surcharges, and debts are settled for any prior OnLive Account that you have used, or have been used with the same credit card or email address. 12. OnLive Game System: MicroConsole TV Adapter and OnLive Gamepad Controller The Terms also apply to use of the OnLive Game System, which includes the MicroConsole TV adapter and OnLive Gamepad Controller ("Controller") to access the Service. Use of the MicroConsole TV adapter or Controller confirms your agreement to: • Accept any software updates and upgrades sent to the MicroConsole TV adapter and/or Controller. • Accept any different or additional terms applicable to the third party components included with the MicroConsole TV adapter and/or Controller. • Not tamper with in any manner, disassemble, reverse engineer, or otherwise modify the MicroConsole TV adapter and/or Controller. • Save as permitted by law, not derive (or attempt to derive), modify, decompile, or remove any software code from the MicroConsole TV adapter and/or Controller. • Not remove any proprietary notices or labels from the MicroConsole TV adapter and/or Controller. • Save as permitted by law, use any software in the MicroConsole TV adapter only in executable form and solely in conjunction with the MicroConsole TV adapter. Basic information relating to setup, installation and support is shipped with the MicroConsole TV adapter and Controller, and further details are found in the Support section of the OnLive website. 13. Suspending Your Account You may suspend (i.e. temporarily deactivate) your Account at any time, for any or no reason, for up to twelve (12) months by contacting OnLive CS from the Support section of the OnLive website. Also, OnLive may suspend an Account, or resume a suspended Account, under certain conditions specified in the Terms, including, for example, the expiration or renewal of your Service membership term. OnLive may suspend your Account if it is inactive (i.e. you have not successfully logged in to the Service using your Account, or you have not made any transactions associated with your Account) for twelve (12) months. You or OnLive may resume (i.e. reactivate) a suspended Account, if the Account is in good standing and any outstanding concerns have been addressed, at any time during the suspension. Suspending your Account will temporarily disable your access to the Service using the suspended Account, and temporarily disable your access to all content or services on the Service that the Account would otherwise have access to, if any, whether purchased or not. Resuming your Account will restore your access to the suspended Account, and restore your access to content and services that are still available to you after the time that has elapsed during the suspension period or provide access to content and services that became available to you during the suspension. During this time, OnLive will retain all of your information, including your Personal Information, just as if the Account is in active use so as to enable OnLive to (a) keep track of any content or service expirations or activations during the suspension period, and (b) reactivate your Account if it is resumed during that twelve (12) month period. During the suspension period you, or OnLive under certain conditions specified in the Terms of Service, may close your Account per the terms described below in Closing Your Account. OnLive will close your Account if it not resumed within twelve (12) months of the last suspension. If you decide to suspend your Account, please contact OnLive CS from the Support section of the OnLive website. The Terms will continue to apply to you in full from the time you accept the Terms, as set forth in the "Accepting and Changing the Terms" section herein, throughout your Account suspension and until your Account is closed by either you or OnLive. 14. Closing Your Account CLOSING YOUR ACCOUNT WILL RESULT IN PERMANENT LOSS OF ACCESS, CONTENT, SERVICES AND VALUE ON THE ONLIVE SERVICE. ONLIVE URGES YOU TO CONSIDER SUSPENDING YOUR ACCOUNT, PER THE "SUSPENDING YOUR ACCOUNT" SECTION ABOVE. RATHER THAN CLOSING YOUR ACCOUNT, PLEASE READ THIS "CLOSING YOUR ACCOUNT" SECTION CAREFULLY BEFORE PROCEEDING WITH CLOSURE. You may close your Account at any time, however, OnLive may close an Account if the Account is suspended and not resumed within the twelve (12) month maximum suspension period, as detailed in the "Suspending Your Account" section, above, or under certain conditions specified in the Terms of Service. Closing your Account will immediately and permanently terminate your access to the Service using the closed Account; immediately and permanently terminate your access to all content, messages, services on the Service that the closed Account would otherwise have access to or could derive value from; and result in your immediate and permanent forfeiture of any coupons, access passes, credits, or anything that may be of value directly or indirectly associated with the Account, if any, whether purchased or not. Any remaining payments due on the Account will remain due and collectable after the Account is closed until they are paid. If you decide to close your Account, please contact OnLive CS from the Support section of the OnLive website. Within six (6) months after closing your Account or after any payments due on the Account are paid, whichever is later, we will either delete or securely encrypt your Personal Information except your email address, which we will keep in order to determine whether to send further marketing-related emails. We will also keep all financial and transactional records that are required for accounting, revenue-reporting and tax-reporting purposes. Your non-Personal Information, such as your Player Tag and password, will not be deleted. We will also keep information about your use of the Services or Websites including, but not limited to, data about your gameplay, session times and durations, and use of the Service, though we will disassociate such information from your Personal Information. Please note that even after you remove information from your Account or delete your Account entirely, information that was shared with other users may continue to exist on the Service. If you engage in any repeated or objectionable misconduct, to be determined in accordance with these Terms and the OnLive Community Guidelines, OnLive reserves the right to either suspend or close your Account, in OnLive's sole discretion, immediately and without notice as set forth in the "Suspending Your Account" and "Closing Your Account" sections herein. Please refer to the OnLive Community Guidelines for examples of objectionable conduct. The Terms will continue to apply to you in full from the time you accept the Terms, as set forth in the "Accepting and Changing the Terms" section herein, until your Account is closed by either you or OnLive. 15. Survival Sections 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, and 24 of the Terms shall survive any expiration or termination of the Terms, or your Account. Expiration or termination of the Terms or your Account will not affect any accrued rights or liabilities under these Terms. The Privacy Policy will survive termination of the Terms, or your Account in accordance with its terms. 16. Copyright Policy OnLive respects the intellectual property of others and we expect our users to do the same. If you are a copyright owner or authorized to act on behalf of a copyright owner and believe that any content or material provided through or in connection with the Service infringes any copyright you own or for which you are authorized to act on behalf of the copyright owner, please provide OnLive's Agent for Notice with written or electronic notice containing the following: Notice of Alleged Infringement ("Notice") 1. A description of the copyrighted work(s) you claim has been infringed. 2. A description of the allegedly infringing content or material, including the location on the Service of the allegedly infringing content or material with sufficient detail to enable us to locate it on the Service. 3. Your address, telephone number, and email address. 4. Both of the following statements outlined in the Notice: a. "I hereby state that I have a good faith belief that the disputed use of the copyrighted material is not authorized by the copyright owner, its agent, or the law." b. "I hereby state that the information in this Notice is accurate and that I am the owner of, or authorized to act on behalf of the owner of, an exclusive right that is allegedly infringed." 5. Your full legal name and your electronic or physical signature. Please send all of the above to: Copyright Agent c/o OnLive, Inc. 181 Lytton Ave. Palo Alto, CA 94301 Main: (650) 543-5500 Fax: (650) 543-5595 Or by email to: copyrightenforcement@onlive.com Any Personal Information provided to OnLive pursuant to this section 16 shall be held and processed by OnLive in accordance with the OnLive Privacy Policy. 17. Disputes and Governing Law and Jurisdiction You agree to handle any disputes between you and OnLive in accordance with the policy outlined below, the OnLive Privacy Policy or as otherwise agreed in writing between you and OnLive. As an alternative to litigation, we will consider reasonable requests to resolve any dispute through dispute resolution procedures such as arbitration or mediation. The construction, validity and performance of these Terms and all non-contractual obligations arising from or connected with these Terms, the OnLive Privacy Policy, the OnLive Community Guidelines or the Service shall be governed by English law. Any action or proceeding brought to adjudicate any dispute related to the Terms, OnLive Privacy Policy, OnLive Community Guidelines, or the Service shall be subject to the non-exclusive jurisdiction of the English courts, except as otherwise agreed by the parties in writing. 18. Injunctive Relief If you breach or indicate your intention to breach the Terms (including, without limitation, in a manner that infringes, misappropriates or violates any intellectual property or privacy rights or may cause irreparable or continuing harm), OnLive may seek injunctive relief against you, or any other remedy available under applicable law. 19. Representations and Warranties You represent and warrant that (i) you have the full power and authority to enter and perform under the Terms, (ii) the execution and performance of your obligations under the Terms does not constitute a breach of or conflict with any other agreement or arrangement by which you are bound, and (iii) the Terms are a legal, valid, and binding obligation of you, enforceable in accordance with its terms and conditions. 20. Indemnification You agree to defend, indemnify and hold OnLive, its directors, officers, employees, contractors, affiliates, suppliers, and licensors (collectively "OnLive Indemnified Parties") harmless from any liability, damage, settlement, loss, or expense (including, without limitation, attorneys' fees and costs) incurred in connection with any third-party claim, demand or action ("Claim") brought or made against any of the OnLive Indemnified Parties arising out of or relating to any actions by you that infringes any copyright, trademark, trade secret, patent or other intellectual property right of any person or defames any person or violates their rights of publicity or privacy. If you have to indemnify any of the OnLive Indemnified Parties under this Section, OnLive and/or the relevant OnLive Indemnified Parties will have the right to control the defense, settlement, and resolution of any Claim at your sole expense. You may not settle or otherwise resolve any Claim without OnLive's prior express written permission. 21. INFORMATION NOTICE OnLive provides the Service on an "as is" and "as available" basis, though OnLive will provide the Service to you with reasonable skill and due care. OnLive does not represent or warrant that the Service or its use (i) will be uninterrupted; or (ii) will be free of inaccuracies or errors. OnLive utilizes the internet, which by its very nature can be unreliable and unpredictable. Internet connection and reliability problems may reduce service quality and in some cases make the service unavailable. In addition to an internet connection, the service also requires suitable, capable, reliable, and fully operational devices and software, which are all outside of OnLive's control. OnLive is not responsible for any internet, telephone, wireless, or other fees associated with your use or access of any service, product, or content through the OnLive Service, including your use or access of any free service, product, or content through the OnLive Service. 22. LIMITATION OF LIABILITY TO THE EXTENT NOT PROHIBITED BY LAW, IN NO EVENT SHALL ONLIVE (OR ANY OF ITS AFFILIATES OR LICENSORS) NOR ANY OF THE OFFICERS, DIRECTORS, EMPLOYEES, SHAREHOLDERS, LICENSORS, CUSTOMERS, AGENTS OR REPRESENTATIVES OF ONLIVE HAVE ANY LIABILITY OF ANY KIND OR NATURE TO YOU OR ANY THIRD PARTY FOR ANY INDIRECT, INCIDENTAL, CONSEQUENTIAL, SPECIAL, OR PUNITIVE DAMAGES WHATSOEVER (INCLUDING, BUT NOT LIMITED TO, DAMAGES FOR ANY LOSS OF PROFITS OR LOSS OF ANY CONFIDENTIAL OR OTHER INFORMATION OR FOR BUSINESS INTERRUPTION) ARISING OUT OF OR IN ANY WAY RELATING TO YOUR USE OF OR INABILITY TO USE THE MATERIALS OR THE SERVICE OR OTHERWISE WITH RESPECT TO THIS AGREEMENT, WHETHER ARISING IN TORT (INCLUDING NEGLIGENCE), CONTRACT, STRICT LIABILITY OR OTHERWISE, WHETHER OR NOT YOU HAVE ADVISED OF THE POSSIBILITY OF ANY SUCH LOSS OR DAMAGE. OnLive will not be liable for any liability associated with provision of the service or failure to provide the Service associated with infrastructure (including, without limitation, the internet), devices and software outside of OnLive's control such as computers, displays, televisions, input devices, switches, routers, firewalls, operating systems, and browsers. Nothing in these Terms will exclude or limit either party's liability for (i) fraud or fraudulent misrepresentation; (ii) death or personal injury caused by its negligence (iii) under the indemnity in section 19; or (iv) any other liability which cannot be excluded by law. 23. Severability If any provision of the Terms is held invalid or unenforceable, in whole or in part, such provision shall be modified to the minimum extent necessary to make it valid and enforceable. This shall, in no way, affect the validity and enforceability of all other provisions in the Terms. 24. Miscellaneous You and OnLive are independent parties, and nothing in the Terms constitutes a partnership or joint venture between you and OnLive or makes either party the agent of the other. Unless otherwise specified herein, the Terms, the OnLive Privacy Policy, and the OnLive Community Guidelines constitute the entire agreement between you and OnLive with respect to the subject matter hereof and supersede all prior or contemporaneous communications, negotiations and proposals with respect to such subject matter. You may not assign or transfer the Terms or any of your rights or obligations under the Terms (whether by operation of law or otherwise) without the prior written consent of OnLive. 25. Beta Program OnLive may from time-to-time establish a Beta program ("Beta") to give certain users an opportunity to test and experience additional new features of the Service, pay for and use third party content, and gather feedback on the new features and content on the Service. Any and all information made available to you by virtue of your participation in a Beta, whether furnished to you directly by OnLive or learned by you through your access to a Beta, is confidential to OnLive. For example, you may not do any Tweets, Facebook posts, or other online posting of details, and you may not post or otherwise communicate screenshots, or videos, or any other content whatsoever about your participation in a Beta. You may disclose that you are a participant in a Beta, but you may not discuss with or disclose to any third party any information you learn through a Beta including your opinions regarding a Beta. If you are chosen to participate in a Beta, you will: • Carry out the testing in connection with a Beta personally. You will not display or provide access to the Service to any other person. • Use your best efforts to secure your system and the Beta against unauthorized access or disclosure. • Never disclose any information about a Beta, including, without limitation, any information about the Service provided or made available by OnLive or any hardware, software, screenshots, video, or other code or scripts to any third party. • Never discuss gameplay, quality of service, or bugs encountered while using a Beta anywhere outside of OnLive's provided in-site forums and customer support. • Delete and destroy all information related to a Beta in your possession or control immediately upon the request of OnLive, and confirm deletion and destruction of such information if requested to do so by OnLive. OnLive notes that any breach by you of this confidentiality provision will cause irreparable harm to OnLive, and OnLive may seek injunctive relief to prevent the breach or threatened breach of your obligations. As a Beta user, you agree to: • Test and evaluate a Beta and/or devices to be used with the Beta, including, but not limited to, audiovisual content, features, functionality, capabilities, operation, Service performance and device performance. • Inform OnLive of any bugs or other defects you encounter in connection with the Service. • Receive all software updates and upgrades, if any that OnLive sends to the MicroConsole TV adapter, to your computer, or to any hardware or software associated or used in connection with the Service, including the OnLive Gamepad Controller. • Comply with reasonable requests and instructions from OnLive in connection with Beta, which may be provided from time to time during a Beta, including, but not limited to, requests and instructions to test or evaluate specific aspects of the Service. • Provide OnLive with your comments, feedback, evaluations, analyses, suggestions and recommendations regarding a Beta ("Feedback"), all as voluntarily provided by you or as may otherwise be requested by OnLive. Your participation in a Beta is strictly voluntary and for your enjoyment. While your participation in a Beta is helpful, you understand that it is not a vital part of the development of the Service so as to give you any right to compensation or payment. Participation in one phase of a Beta does not entitle you to participation in any other phase of a Beta, if any, or to any compensation or payment with respect to the Service. You acknowledge and agree that your participation in a Beta (or any phase of a Beta) does not give you any claim of ownership to any part of the Service. All Feedback that you provide or make available to OnLive during a Beta, however communicated by you and whether at OnLive's request or not, shall be the sole and exclusive property of OnLive, and you hereby irrevocably assign to OnLive all of your right, title and interest in and to such Feedback, including, without limitation, any and all intellectual property rights in or to any such Feedback. Without limiting the generality of the preceding sentence, you agree that OnLive and its successors, assigns and licensees shall have the perpetual and irrevocable right to reproduce, modify and otherwise use and exploit all of the Feedback (and any and all portions and derivatives thereof) in any manner now known or hereafter devised for any purposes, including, but not limited to, in connection with the development and exploitation of the Service or any other product or service, without any compensation or the provision of any credit to you. You hereby waive all moral rights with respect to all Feedback and all copyrights therein to and, the extent such moral rights cannot be waived, you warrant that you will not enforce such moral rights against OnLive. All other terms in the OnLive Terms of Service continue to apply to your participation in a Beta.


TERMS OF USE

ONLIVE, INC. TERMS OF USE AGREEMENT

As of September 22, 2011

Acceptance of Terms

This Terms of Use Agreement (the "Agreement") applies to certain websites of OnLive EMEA S.à r.l and its group of companies (collectively, "OnLive", "we", "our", or "us" or the "OnLive Websites"). By visiting, accessing, or using the OnLive Websites or any portion thereof , you agree that you have read, understood, and agree to be bound by this Agreement, whether or not you are a registered user of any of the OnLive Websites or any portion thereof.

We reserve the right to amend this Agreement at any time and without notice. If we do this, we will post the amended Agreement on this page and indicate at the top of the page the date the Agreement was last revised. Your continued use of the OnLive Websites after any such changes constitutes your acceptance of the new Terms of Use. If you do not agree to any of these terms or any future Terms of Use, do not visit, use or access (or continue to access) the OnLive Websites. This Agreement applies to all visitors, users, and others who access the OnLive Websites ("Users"). The Agreement incorporates by reference our Privacy Statement, or any supplemental terms, schedules, exhibits and related materials that are attached or referenced herein. It is your responsibility to review this Agreement from time to time for any changes as it creates a binding legal agreement between you and us. You do not have to register in order to visit the OnLive Websites. In the future, though, we may allow you to register with the OnLive Websites and create a "User" account.

Permission to Use the Site

Subject to all of the terms and conditions of this Agreement, you are hereby granted a non-exclusive, limited, personal licence to access the OnLive Websites and view our Content (as defined below). We reserve all rights not expressly granted herein in the OnLive Websites and the Content (as defined below). We may terminate this licence for convenience at any time at our sole discretion.

You agree not to engage in any of the following prohibited activities: (i) copying, distributing, or disclosing any part of the OnLive Websites in any medium, including without limitation by any automated or non-automated "scraping"; (ii) using any automated system, including without limitation "robots", "spiders", or "offline readers", to access the OnLive Websites in a manner that sends more request messages to our servers than a human can reasonably produce in the same period of time by using a conventional on-line web browser; (iii) transmitting spam, chain letters, or other unsolicited email; (iv) using any "bot", spider, site search/retrieval tool or utility, or any other manual or automated technique, to collect, extract, index, mine, or otherwise seek to obtain any data or information from OnLive, OnLive Websites, or any User, or in any manner compromise, degrade or circumvent the navigational structure or the presentation of the OnLive Websites, or the display or performance of the Content (as defined below) of the OnLive Websites; (v) attempting to interfere with, compromise the system integrity or security or decipher any transmissions to or from the servers running the OnLive Websites; (vi) taking any action that imposes, or may impose an unreasonable or disproportionately large load on our infrastructure (as determined at our sole discretion); (vii) uploading invalid data, viruses, worms, or other software agents through the OnLive Websites; (viii) collecting or harvesting any personally identifiable information from the OnLive Websites; (ix) using the OnLive Websites for any commercial solicitation purposes; (x) using the OnLive Websites or any Content or products obtained through the OnLive Websites for any resale or commercial use; (xi) collecting or using any product listings, descriptions, or prices on the OnLive Websites; (xii) impersonating another person or otherwise misrepresenting your affiliation with a person or entity, conducting fraud, hiding or attempting to hide your identity; (xiii) interfering with the proper working of the OnLive Websites; (xiv) bypassing the measures we may use to prevent or restrict access to the OnLive Websites; or (xv) disseminating any abusive, harmful, offensive or illegal content. We may permanently or temporarily terminate, suspend, or otherwise refuse to permit your access to the OnLive Websites without notice and liability for any reason, including if in our sole determination you violate any provision of this Agreement, or for no reason. You further understand and agree that OnLive has the right, but not the obligation, to remove in whole or in part any Content related to the OnLive Websites, including without limitation all data and Content residing on our servers, at any time at our sole discretion, with or without notice and with no liability to us of any kind.

The OnLive Websites or portions thereof are subject to scheduled and unscheduled site interruptions. All aspects of the OnLive Websites are subject to change or elimination at our sole discretion. We reserve the right to interrupt the OnLive Websites with or without prior notice for any reason or no reason. You agree that OnLive is not liable to you for any interruption of the OnLive Websites or any portion thereof, or any delay or failure to provide the OnLive Websites or any portion thereof.

Our Proprietary Rights

The OnLive Websites and all materials therein or transferred thereby, including, without limitation, software, images, text, graphics, illustrations, logos, trademarks, trade names, photographs, audio, videos, and music (the "Content"), and all Intellectual Property Rights related thereto, are the exclusive property of OnLive and our licensors.

Except as explicitly provided herein, nothing in this Agreement shall be deemed to create a licence in or under any such Intellectual Property Rights, and you agree not to sell, licence, rent, modify, distribute, copy, reproduce, transmit, publicly display, publicly perform, publish, adapt, edit or create derivative works from any materials or Content accessible on the OnLive Websites. Use of the Content or materials on the OnLive Websites for any purpose not expressly permitted by this Agreement is strictly prohibited.

For the purposes of this Agreement, "Intellectual Property Rights" means all patent rights, copyright rights, mask work rights, moral rights, rights of publicity, trademark, trade dress and trade name rights, service mark rights, goodwill, trade secret rights and other intellectual property rights as may now exist or hereafter come into existence, and all applications therefore and registrations, renewals and extensions thereof, under the laws of any state, country, territory or other jurisdiction worldwide.

Eligibility/Representations and Warranties

You shall be solely responsible for your use of the OnLive Websites and all activity undertaken by you while visiting the OnLive Websites.

This OnLive Websites are intended solely for Users who are thirteen (13) years of age or older, and any use or access to the OnLive Websites by anyone under thirteen (13) is unauthorized, unlicensed, and in violation of this Agreement. In connection with your use of the OnLive Websites, you affirm, represent and warrant, in addition to the other representations and warranties in this Agreement, the following: You are at least thirteen (13) years of age.

You must be at least eighteen (18) years of age to register for an account on the OnLive Service. In connection with registering for an OnLive account, you affirm, represent and warrant, in addition to the other representations and warranties in this Agreement, the following: You are at least eighteen (18) years of age, or if you are under 18 years of age you are an emancipated minor and are fully able and competent to enter into the terms, conditions, obligations, affirmations, representations, and warranties set forth in this Agreement, and to abide by and comply with this Agreement.

Privacy

We care about the privacy of our Users. Click here to view our Privacy Statement, which is incorporated by reference in this Agreement as if it is fully set forth herein. By using the OnLive Websites, you are consenting to have your personal data transferred to and processed in the United States.

Your use of the Site may be subject to use by us of "cookies", which are text files placed on your computer to temporarily store information. Our use of cookies is subject to the Privacy Statement.

Third-Party Websites, Advertisers or Sites: As set forth in our Privacy Statement, the OnLive Websites may contain links to third-party websites, advertisers, or sites that are not owned or controlled by us. We have no control over, and assume no responsibility for, the content, privacy policies, or practices of any third party websites. If you access a third party website from the OnLive Websites, you do so at your own risk, and you understand that this Agreement and our Privacy Statement do not apply to your use of such sites. To the fullest extent permissible by law, you expressly relieve us from any and all liability arising from your use of any third-party website or third party owned content. Additionally, your dealings with or participation in promotions of advertisers that may be found on the OnLive Websites, including payment and delivery of goods, and any other terms (such as warranties) are solely between you and such advertisers. You agree that we are not responsible for any loss or damage of any sort relating to your dealings with such advertisers.

We encourage you to be aware of when you leave the OnLive Websites, and to read the terms and conditions and privacy policy of any third-party website that you visit.

Indemnity

You agree to defend, indemnify and hold harmless OnLive, and its subsidiaries, agents, managers, partners, suppliers, advertisers, product and OnLive Website providers, and other affiliated companies, and their employees, contractors, agents, officers and directors, from and against any and all claims, damages, obligations, losses, liabilities, costs or debt, and expenses (including but not limited to attorneys' and experts' fees) arising from: (i) any infringement of OnLive's Intellectual Property Rights by you; (ii) your violation of any third-party right, including without limitation any right of privacy, publicity rights or Intellectual Property Rights; and (iii) your violation of any law, rule or regulation of the UK or any other country.

No Warranty

The OnLive Websites are provided on an "as is" and "as available" basis. Use of the OnLive Websites is at your own risk. To the extent permitted by law, OnLive Websites are provided without warranties of any kind, whether express or implied. Without limiting the foregoing, OnLive, its subsidiaries, and its licensors do not warrant that the operation of the OnLive Websites or the information, content, materials, or products included on the OnLive Websites is accurate, reliable or correct; that the OnLive Websites will meet your requirements; that the OnLive Websites will be available at any particular time or location, uninterrupted or secure; that any defects or errors will be corrected; or that the OnLive Websites are free of viruses or other harmful components. Any information, content, materials, or products downloaded or otherwise obtained through the use of the OnLive Websites is obtained at your own risk and you will be solely responsible for any damages or losses, including damage to your computer system or loss of data, that result from such procurement.

OnLive does not warrant, endorse, guarantee, or assume responsibility for any product or websites advertised or offered by a third party through the Onlive Websites or any hyperlinked website or site, or featured in any banner or other advertising, and OnLive will not be a party to or in any way monitor any transaction between you and third-party providers of products or sites.

Limitation of Liability

OnLive will not be responsible for any damage, loss or expense resulting from hacking, tampering or other unauthorized access or use of the Onlive Websites or your account or the information contained therein.

To the extent permitted by law, in no event shall Onlive (or any of its affiliates or licensors) nor any of the officers, directors, employees, shareholders, licensors, customers, agents or representatives of Onlive have any liability of any kind or nature to you or any third party for any indirect, incidental, consequential, special, or punitive damages whatsoever (including, but not limited to, damages for any loss of profits or loss of any confidential or other information or for business interruption) arising out of or in any way relating to your use of the OnLive Websites (including an inability to access or use the OnLive Websites) or otherwise with respect to this Agreement, whether arising in tort (including negligence), contract, strict liability or otherwise, whether or not you have advised of the possibility of any such loss or damage.

OnLive will not be liable for any liability associated with infrastructure (including, without limitation, the internet), devices and software outside of OnLive's control such as computers, displays, televisions, input devices, switches, routers, firewalls, operating systems, and browsers.

Nothing in this Agreement will exclude or limit either party's liability for (i) fraud or fraudulent misrepresentation; (ii) death or personal injury caused by its negligence (iii) under the indemnity in clause 6 above; or (iv) any other liability which cannot be excluded by law.

Export Control

You may not use, export or re-export any Content or any copy or adaptation of such Content, or any product or service offered on the OnLive Websites, in violation of any applicable laws or regulations, including, without limitation, UK export laws and regulations. The OnLive Websites are controlled and operated from facilities in the UK. We make no representations that the OnLive Websites or any portions thereof are appropriate or available for use in other locations. Those who access or use the OnLive Websites from other jurisdictions do so of their own volition and are entirely responsible for compliance with all applicable UK and local laws and regulations, including but not limited to export and import regulations. You may not use the OnLive Websites if you are a resident of a country embargoed by the UK, or are a foreign person or entity blocked or denied by the UK government.

Assignment

This Agreement, and any rights and licenses granted hereunder, may not be transferred or assigned by you, but may be assigned by us without restriction.

General
  • Governing Law and Legal Actions. You agree to handle any disputes between you and OnLive in accordance with the policy outlined below, the OnLive Privacy Policy or as otherwise agreed in writing between you and OnLive. As an alternative to litigation, OnLive will consider reasonable requests to resolve any dispute through dispute resolution procedures such as arbitration or mediation.

    The construction, validity and performance of this Agreement and all non-contractual obligations arising from or connected with this Agreement, the OnLive Privacy Statement, the OnLive Community Guidelines or the service shall be governed by English law. Any action or proceeding brought to adjudicate any dispute related to this Agreement, the OnLive Privacy Statement, OnLive Community Guidelines, or the service shall be subject to the non-exclusive jurisdiction of the English courts, except as otherwise agreed by the parties in writing.

    If you breach or indicate your intention to breach this Agreement (including, without limitation, in a manner that infringes, misappropriates or violates any Intellectual Property Rights or privacy rights or may cause irreparable or continuing harm), OnLive may seek injunctive relief against you, or any other remedy available under applicable law

  • Notification Procedures. We may provide notifications, whether such notifications are required by law or are for marketing or other business related purposes, to you via email notice, written or hard copy notice, or through conspicuous posting of such notice on our website, as determined by us in our sole discretion. We reserve the right to determine the form and means of providing notifications to our Users.

  • Entire Agreement/Severability. This Agreement, together with our Privacy Statement and any other legal notices and agreements published by us via the OnLive Websites, shall constitute the entire agreement between you and OnLive concerning the OnLive Websites. If any provision of this Agreement is deemed invalid by a court of competent jurisdiction, the invalidity of such provision shall not affect the validity of the remaining provisions of this Agreement, which shall remain in full force and effect.

  • No Waiver. No waiver of any term of this Agreement shall be deemed a further or continuing waiver of such term or any other term, and OnLive's failure to assert any right or provision under this Agreement shall not constitute a waiver of such right or provision.

by Paul Gregg at March 27, 2012 09:57 PM

March 05, 2012

Colin Turner

Life after the tomb: minidlna

Last Sunday morning I tried to access my mediatomb UPnP music server using the radio in my kitchen to be told it was offline. After messing around at the radio end a bit, I went to check on the actual machine, and found that mediatomb was not running. Attempting to restart it looked OK, but it was segfaulting almost immediately.

After trawling around a bit on bugs.debian.org I finally found this little gem. Basically mediatomb has been removed from unstable, partly because it's (ahem) unstable. I can't disagree with anything Neil says here; it's been a pain to keep mediatomb working, and there have been many problems. Nevertheless, after solving these and generally having it working (till Sunday) I was frustrated that was the end of the road. Obviously Neil has had a bit of a backlash too.

Anyway, life goes on and I looked in the Debian archive for alternatives and found minidlna. I wasn't too optimistic from the package description, but thought I'd give it a whirl. It has no web interface, but I don't care about that. Anyway, I installed it, reconfigured the path, forced a database reload, and was very pleased to find it all worked out of the box. Far less hassle that mediatomb has proven.

Only a tiny grumble so far, while all the playlists appear, and are in the correct order, if you browse by Albums, or Artists, the eventual track list is always alphabetical and not track order. I've read some claims that this is due to the client, but every single client I have used to get the lists from mediatomb in track order, and every single one now gets in alphabetical order.

Time to dive into the source at some time...

by Colin Turner (nospam@example.com) at March 05, 2012 07:05 PM

February 15, 2012

Colin Turner

Bacon and Egg cupcakes

This Sunday it's the birthday of both Bruce Wayne and my better half, Tamsin. I figure Bruce will have a birthday breakfast sorted, so I thought I might look at having a special breakfast for Tam. So it's French toast on order, and pancakes for Aimee etc.. Recently I had tripped over this image of bacon and egg cupcakes. A bit of research revealed lots of recipes which seemed a bit overly convoluted, so I thought I'd try my own ahead of the big day.

You will need:
  • A muffin baking tray (it needs to be deep, so not the shallow bun variation);
  • Decent quality back bacon, well, the important bit is the shape and size of the slices;
  • Eggs, since it's a cosmetic recipe, I used organic eggs that tend to have great colour as well as flavour.


I tried two different variations of bacon, which you can see below.

First of all, just grill the bacon normally. I know you know what that looks like, but to get an idea of the size of the slices I used. (Click on any thumbnail to enlarge)

Grilling bacon
The normal slices I used.


But I also tried another variation of back bacon without the fatty "tail":

Lean bacon
More lean version


If, like me, you only have a single oven, turn off the grill, and put the oven on at around 200 degrees centigrade (probably 180 for fan assisted ovens, and that's around 400 Fahrenheit for any Americans). Give the grill element some time (only about 5-10 minutes) to cool down, so you will be baking the eggs later and not grilling them.

Now, you need to simply put the bacon into one of the cups in the tray. Don't do what I did and use an edge, working from the centre probably makes a lot more sense. For the "normal" bacon I simply put the slice round the edge, and it covers almost everything. I actually took the most fatty bit off the second slice and placed it on over the hole. I didn't bother to do anything special with the tray, and I didn't use cupcake cases or bread as I've seen in some of the more complex procedures. You don't have to worry about the odd small gap, but cover what you can.

Wrap two, or one and a half slices into each cups
Wrap two, or one and a half slices into each cups


My second variation involved using three of the lean slices to make a flower petal kind of effect.

The leaner bacon version.
The leaner bacon version.


Now you simply have to carefully crack an egg into each cup, trying not to rupture the yolk.

Eggs cracked in.
Eggs cracked in.


So now bake in the centre of the oven, for around 15-20 minutes. I found the second variation seemed to take more time to cook because the egg was further away from the metal most likely. Then use a silicon spatula or similar to easy the edge of the bacon away from the case, lift out, and serve warm.

The end result.
The end result.


You can see one cut in half. Tam and I tried the results and we feel the original version (with the regular bacon) is the best, and I think it looks the best too. At just under 20 minutes I found the white totally set, but the yolk still had a good moist consistency. The saltiness of the bacon infuses the egg in a really pleasing way. I hope you enjoy trying it. I will be making them again on Sunday.

One cut in half.
One cut in half.

by Colin Turner (nospam@example.com) at February 15, 2012 03:29 PM

February 11, 2012

Jonathan McDowell

On arranging meetings

I've been spending a lot more time recently in meetings. Mostly things I should actually be at. And in general if it's something I think is reasonable I'll try to be there. In an effort to help with this I actually keep my work calendar up to date. Given that I'm running Linux on my laptop and the corporate standard is Exchange this requires a little bit of effort on my part (the Thunderbird Provider for Microsoft Exchange and Android support for talking to Exchange are helpful with this).

Sometimes it seems like I shouldn't bother. I spent this week at a conference, and marked my calendar to indicate I was out of the office. I think I had at least 3 meeting requests, all for things that would actually have been appropriate for me to go to. Last week I managed to be booked for 7 hours of meetings from 7am until noon. That included a 30 minute window where I was triple booked.

The thing is, I'm really not that busy in terms of meetings - you can usually find a spot when I'm free on any given day unless I'm actually not in the office. If you bother to check my calendar, that is.

Another problem I have is the times people like to book meetings at. Booking a technical meeting at 9am isn't going to get me at my best. Equally doing so at 5pm is likely to have me clock watching to make sure I don't miss my bus and/or train. Also I seem to work with far too many people who don't eat lunch and book hour long meetings at midday or 1pm.

I understand sometimes that's the only time you can get everyone into a room together, but at least bloody ask and explain the need rather than just sending out a meeting invite.

Finally, book meetings of a realistic length. There are some people who invite me to things and cause me to add another 30 minutes on the end, because I know it always overruns.

It's not all bad. I have a VP who always runs a meeting to time, and never seems to call one for spurious reasons. I've also worked with a program manager who will organize the meeting so that if you're only there for one point on the agenda that'll get dealt with near the beginning so it doesn't take up more of your time that it needs to. Funnily enough I'm much more likely to go to things both of these people arrange.

Disclaimer: In the unlikely event anyone I work with who invites me to meetings is reading this, I might be talking about you, but everything I mention has been done by more than one person, so I'm not thinking about anyone in particular for each point.

by Jonathan McDowell at February 11, 2012 11:46 PM

February 04, 2012

Colin Turner

Swan Heated Tray repair

We have a nice Swan Heated Tray courtesy of my Mum. It's useful for lots of things, heating plates for dinner and then placing serving dishes on it, or for keeping a stack of pancakes warm on Sunday. Unfortunately it stopped working recently. The red power LED still lit when power was applied but no heating. Google produced no answers (which is why I'm writing this for anyone following a similar trail). The helpline couldn't help, and theoretically the tray was under warranty, but with no receipt we couldn't follow their advice to return it to the store. So I had to fix it myself.

You should obviously think twice before messing around with something (a) electrical and (b) which generates large amounts of heat. Please don't kill yourself or burn your house down, that will make us both feel really bad.

The tray is fitted with triangular screws which reinforces my comments above, but not having previously purchased some triangular screwdrivers, these were next to be acquired. I figured they might come in useful for something else in the future.

Taking the device apart shows that basically it's quite simple, there are some blocks through which elements do the heating, a lot of glass fibre (so wear gloves) to protect the underneath from the blocks.

The inside of the tray
The inside of the tray. You can see the connections on the two right most blocks where I removed the section of cabling that was not working.
There are also a number of polythene covers to hold the corners of the blocks, though it seems a few were missing. There was no obvious fuse much to my surprise and irritation. A bit of testing with a continuity tester showed that a particular loop of cable was no longer doing its job. I pulled it out, and pulled back some insulated sheathing to reveal the culprit fuse.

The culprit
The culprit
Replacement fuses can be obtained here. I teased upon the crimps with a precision screw driver and fitted the replacement, crimping it very firmly back in place. Then it was a matter of putting it all back together and testing it was appropriate safety measures in case of problems. All working again.

by Colin Turner (nospam@example.com) at February 04, 2012 02:40 PM

January 23, 2012

Jonathan McDowell

I want you to see my storage automagically

For my day job I build storage systems. A lot of what I do at present involves caring a lot about how different OSes deal with things like new LUNs being presented from a SCSI target, or errors along a subset of the available paths to a device.

It will come as no surprise to you to discover that they all suck (for values of all equal to Linux, Solaris, Windows and VMWare). New LUNs are particularly annoying. I'm in the situation that creation and removal of a LUN is exceptionally easy.

Hmmm. Maybe I need to back up here a bit first. SCSI has the concept of a target (think, device, eg hard drive). Each target can present multiple logical units. Each of these is assigned a number - a Logical Unit Number. Most devices (a hard drive, or a CDROM drive) will present a single LUN. A storage array will tend to present multiple LUNs; one for each volume that is exported to the host. At the host level each LUN really just looks like a separate device (for Linux /dev/sda and /dev/sdb may well be separate LUNs on the same array, rather than 2 separate arrays/hard drives, for example. At the block device level you don't care about the difference usually).

Anyway. For various reasons I end up adding and removing LUNs quite often. And there are ways for the array to indicate that this has happened to the host (the UNIT ATTENTION/REPORT LUNS DATA CHANGED check condition seems to be favoured these days, as a complete Fibre Channel LIP can be disruptive). What I'd like to happen in that case is the host to pick up the check condition and drop and/or add the devices that have changed. Instead everything wants a manual rescan. rescan-scsi-bus tends to be simplest for Linux. Windows wants a manual refresh in Disk Administrator. VMWare a "Rescan HBAs" from vSphere. Solaris a "devfsadm -C" and possibly a "cfgadm -al" first. And all of these can be temperamental about picking up the changes.

We've done a lot about hotplug for the desktop user experience, without doing the same level for the server experience. I appreciate that there are situations that you don't want your server to reconfigure things without being told to, but the current situation can be detrimental (for example Linux multipathing will hold a device open even after it's disappeared and is returning an "INVALID LUN" response; it would be much better if it could cleanly close that device and wait for it to return). Storage is capable of being much more than just a single block device these days, and it's a shame that nothing seems to deal fully with that fact.

(Yes, yes, I should write and submit patches, but I appreciate that there's not always a simple answer, nor necessarily an answer that works for all situations automatically. Plus, y'know, not enough hours in the day and I hope you all appreciate I've taken a break from watching BSG to write this.)

by Jonathan McDowell at January 23, 2012 12:01 AM

January 22, 2012

Jonathan McDowell

Totally divorced

I got divorced earlier this month; the decree absolute arrived in the post last weekend. I'm hoping this isn't news to anyone who knows me well, and I only really mention it here as an endpoint given that I blogged about the wedding itself.

by Jonathan McDowell at January 22, 2012 10:18 PM

December 20, 2011

Simon McCartney

Faking Production – database access

One of our services has been around for a while, a realy long time.  It used to get developed in production, there is an awful lot of work involved in making the app self-contained, to where it could be brought up in a VM and run without access to production or some kinds of fake supporting environment.  There’s lots of stuff hard coded in the app (like database server names/ip etc), and indeed, and there’s a lot of code designed to handle inaccessible database servers in some kind of graceful manor.

We’ve been taking bite sized chunks of all of this over the last few years, we’re on the home straight.

One of the handy tricks we used to get this application to be better self-contained was avoid changing all of the database access layer (hint, there isn’t one) and just use iptables to redirect requests to production database servers to either local empty database schema on the VM, or shared database servers with realistic amounts of data.

We manage our database pools (master-dbs.example.com, slave-dbs.example.com, other-dataset.example.com etc) using DNS (PowerDNS with MySQL back end), in production, if you make a DNS request for master-dbs.example.com, you will get 3+ IPs back, one of which will be in your datacentre, the others will be other datacentres, the app has logic for selecting the local DB first, and using an offsite DB if there is some kind of connection issue.  We also mark databases as offline by prepending the relevant record in MySQL with OUTOF, so that a request for master-dbs.example.com will return only 2 IPs, and a DNS request for OUTOFmaster-dbs.example.com will return any DB servers marked out of service.

Why am I telling you all of this?  Well, it’s just not very straight forward for us to update a single config file and have the entire app start using a different database server. Fear not, our production databases aren’t actually accessible from the dev environments.

But what we can do is easily identify the IP:PORT combinations that an application server will try and connect to.  And once we know that it’s pretty trivial to generate a set of iptables statements that will quietly divert that traffic elsewhere.

Here’s a little ruby that generates some iptables statements to divert access to remote, production, databases to local ports, where you can either use ssh port-forwarding to forward on to a shared set of development databases, or to several local empty-schema MySQL instances:

require “rubygems”
require ‘socket’

# map FQDNs to local ports
fqdn_port = Hash.new
fqdn_port["master-dbs.example.com"] = 3311
fqdn_port["slave-dbs.example.com"] = 3312
fqdn_port["other-dataset.example.com"] = 3314

fqdn_port.each do |fqdn, port|
puts “#”
puts “# #{fqdn}”
# addressess for this FQDN
fqdn_addr = Array.new

# get the addresses for the FQDN
addr = TCPSocket.gethostbyname(fqdn)
addr[3, addr.length].each { |ip| fqdn_addr << ip }

addr = TCPSocket.gethostbyname(‘OUTOF’ + fqdn)
addr[3, addr.length].each { |ip| fqdn_addr << ip }

fqdn_addr.each do |ip|
puts “iptables -t nat -A OUTPUT -p tcp -d #{ip} –dport 3306 -j DNAT –to 127.0.0.1:#{fqdn_port[fqdn]}”
end
end

And yes, this only generates the statements, just pipe the output into bash if you want the commands actually run.  Want to see what it’s going to do?  Just run it.  Simples.

by simonm at December 20, 2011 12:52 PM

November 26, 2011

Jonathan McDowell

All I need is a large enough white wall

I think I'm currently supposed to be out buying a TV at the moment. Or something else expensive. Instead I'm lying on the sofa listening to Whale and drinking tea. That's much better in my opinion, but it reminded me that I hadn't mentioned that I bought a projector.

I had the loan of a projector for a while when I was in Belfast. It was a huge thing that made a lot of noise, but was pretty cool for watching films with. When I moved to the US I decided not to bother with a TV to start with - using my laptop did just fine for most things. Except films. They really benefit from a bigger screen. Especially if you want to watch them with someone else. So I started looking at pico projectors, because I wanted something small and cute that I could throw in a bag with my tiny laptop. At the time the best the pico projectors could do was 840x480, which I felt wasn't really that great. However back in January TI announced their DLP Pico HD chipset, offering a resolution 1280x800.

I kept a look out for projectors using this to appear, and eventually, in July, Amazon claimed to have availability of the Vivtek Qumi. So I bought one. And I'm very happy with it. I'm not a heavy user, and there are some niggles, but it's small and does exactly what I want. In low light conditions it'll happily throw an image all the way across the room, which is more than it's rated at. There's a mini-HDMI connector on the back, so it's a doddle to plug it into my laptop using the supplied HDMI to mini-HDMI cable. The laptop auto-detects the device and extends the desktop appropriate, as you'd expect.

It'll also do media playback itself - there's a USB host port and a micro SD slot on the back. This works ok, and the included remote means you can easily set the projector somewhere above your head and still be able to easily control it. Unfortunately the built in speakers are fairly useless. There's a 3.5mm socket for external speakers, but having to plug something else in detracts from the convenience factor of the built-in media player. Also my unit had the power switch installed upside down (the little red line indicating the power is on actually shows up when it's off), but that's the only complaint I've got about the build quality. There's a little neoprene case to store the thing in as well.

So, er, yeah. I think I can continue to make do without a normal TV for a while longer and avoid the nightmare that I suspect are the shops on Black Friday.

by Jonathan McDowell at November 26, 2011 12:32 AM

November 16, 2011

Philip Herron

Detective Story

So the other day, was exciting something i will always remember; becoming a detective. What you say, yes well i will try to keep this mostly anonymous as i think that’s more appropriate due to the circumstances. Well a close friend of mine created a website for buying and selling cars in a foreign country which his brother lives in. So all going well website is fine bla bla, I just helped my friend system admin for the server maintaining apache, mysql, postfix etc.. the website was fairly busy.

But there was fake accounts created over time posting fake ads selling cars but most of which in-fact all were very obvious scams but one of which ads was created 5 times on this website from 5 different users with 5 different emails but each listing was exactly the same. Long and short of it one person fell for this listing and ended up wiring ~£8000 to this scammer. So the victim contacted the local police which contacted us to try and find as much details as possible on the scammer like emails ip’s etc.

As the scammer was trying to get more money out of the victim the police suggested to play along with the scammer so we can catch him in the act. But my job was to find out as much information as you can. And by god the amount of information you can figure out about someone based of server logs is scary if your clever.

So we cross referenced the times which the scammer signed up to the website each time, to get his ip and his email and checking the post data to be 100% sure we had the right ip. There were 5 instances we had to go through. 3 of which ips would origionate from exactly the same place which was a major city and isp the other 2 were in a more local rural town. And if you take more attention to the dates the first 2 sign-ups by this scammer originated from this city and occurred around June then nothing until October or so where the next 3 sign-ups occurred so this could give rise to the idea that this person moved house. We know its the same scammer each time when the listing is exactly the same each time and the trace on the ip go to the same places each time.

So yes this was an interesting day but very very interesting what you can figure out about people from their IP.

 

by redbrain at November 16, 2011 05:36 PM

November 08, 2011

Jonathan McDowell

The cost of progress

You should probably ignore this post. I'm just venting. I'll be better after a nice cup of tea.

Things that are causing me to fume about the fact Gnome Shell just hit Debian/Testing:

  • Spacefun came back. Even on GDM3. Just fucking die already.
  • I had to reboot to get bluetooth working again.
  • /desktop/gnome/shell/windows/workspaces_only_on_primary set by default? SRSLY?
  • It failed to carry over my previous monitor settings.
  • I'm pretty sure I don't have a latent desire for a machine running OS X, whatever the GNOME devs might think.
  • How many mouse clicks to get to the list of applications?
  • Er, why have you changed my default apps? (Why is clicking a link in a terminal opening Epiphany rather than a new tab in Iceweasel?)

I update my testing boxes (work + home laptops) almost every day. It rarely breaks, and certainly when it does I accept that's what I get for doing rolling upgrades. I can't remember the last time I did an upgrade that actually made me angry.

Also I suspect this thing is going to have a complete fit on my binary nVidia/hacked up DisplayLink configuration at work (the DisplayLink side refuses to do 3D for starters). Perhaps better not to upgrade there until I have a sufficient block of free time.

Maybe it's time to go back to evilwm. I only stopped because I wanted a dock for wifi/bluetooth etc applets on my laptop that didn't get hidden when I fullscreened things. Implementing _NET_WM_STRUT might make that doable...

(I'm sure some of this is just dealing with the change but it's a bit bloody difficult to deal with a complete change in user interface that hasn't even managed to carry across settings from the old one.)

by Jonathan McDowell at November 08, 2011 06:13 AM

November 01, 2011

Philip Herron

Update #1

So i plan to try and do an update of me every 2 weeks on my blog to get more into routine in my life. For the last few years i realized i was very depressed and frustrated, from university i would go in and do my mathematics side of my degree and go to my Computer Science classes and hope to learn from these to understand what the updates in my debian system meant like changes to libc for security reasons then once 2nd year hit, it became very obvious that university wasn’t going to teach me the skills i wanted or hoped. So i took things into my own hands and threw my self into ~4 years of solid learning on my own and university kind of took a back step.

I have no regrets in the choices that i made,  doing what i have done has opened so many more doors for me in my life than anything else has in my life, including university. These days so many students go to university especially science related topics and dont get a related job from it in the end. I can say for me i know i am good at programming, i know i love it; i know i want to do this for the rest of my life as a career  not many people at my age can say anything like that about themselves. For me i never wanted to blame university to not get where i wanted to be in life. If it wasn’t for me taking so much time to learn on my own i wouldn’t have become a decent GCC hacker with server access etc. Mentored by Ian Taylor a well know free software hacker. I took my until june this year to break a lot of depression i had in my life and to accept my failing at university i felt like i had let down my whole family so much when i failed a module, it was when i tried the absolute hardest i possibly could at an applied math module at university and it didn’t pay off and there didn’t seem to be anyone to help you or talk to about it. That was in my 2nd year and that was when i really pushed my self into open source and free software.

It feels good to just talk about it and it doesnt make me feel sad anymore, i am back at university this year i should have been finished now but i failed all my modules last year it really took the biscuit if i am honest, i realised even more so that there is no chance students can learn anything useful from university, well at least from my university if you compare what others do. But yeah the long and short of it is i only need to pass 4 modules now this year to finish up my degree and i will be finished. Its hard for me but i will do it there is so much i want to do this year so i am pushing my self into alot of work to keep my mind active and my self in a routine.

 

It scares me how much power your mind has over your body, when getting over all my depression i feel so much better in every day life. Its like i can see again but anyways enough of me blabing on i have lots of gccpy updates to post so i will do that over the coming weeks.

by redbrain at November 01, 2011 01:44 PM

October 30, 2011

Colin Turner

Gnome 3, or Gnome Shell issues

I use the Debian operating system on several computers. My "main" computer (Imladris) runs Debian unstable (Sid) while the others mostly run on testing. I've been anticipating the Gnome 3 upgrade for some time, mainly because of the switch to Gnome Shell which is a completely new way of using the desktop. I had played with Gnome Shell a while ago, and was kind of impressed and worried by it in equal measure, I decided it wasn't ready for prime time so stopped using it. Naturally I assumed it would be much more impressive upon release; especially since Debian is not (by far) the first GNU/Linux distribution to include Shell.

A while ago a big upgrade came through on imladris, and it was clear it was the Gnome 3 upgrade. I share this computer with three other users, two of which are children for whom I have implemented password less login (locally only). I can only say I think Gnome have significantly mishandled the upgrade. Here are some reasons why.

Login is seriously slow

The display manager can take up to a whole minute to display the list of users (and often doesn't display the icons). There are some bug reports about a possible race condition that causes this, but seriously on a reasonable spec computer this is unacceptably slow. The same problems occurs when switching user.

I couldn't login

My, admittedly old user account simply wouldn't launch a working desktop. I had to (at a command prompt) delete configuration directories to get my account working again.

Absolutely zero support for the user in transition

So the average user does the upgrade and suddenly their entire desktop has changed. But when they first login there will be some guidance about where everything is gone... right? No. Having already used Shell, I knew, but I had to try and show everyone else how to use the machine again. It's not that spectacularly intuitive.

Actually, a lot of functions have just gone

There's a huge removal of existing functionality. All your carefully tweaked panels: gone. All your applets: gone. And bizarrely often with no working alternative.

Not friendly for children

It was possible to set up a Gnome 2 account to make it easy for kids. Low res graphics, and big panels with big select icons. The new paradigm completely ignores all that in favour of a sleek minimalist environment which is probably not that easy for young children to understand.

Dictatorial design choices

It's been decided that we don't need minimise buttons or maximise buttons. It's been decided not to honour old desktop backgrounds. It's been decided not to honour existing resolution settings. It's been decided not to show anything on the Desktop (much to the confusion of many users). It's been decided we can't right click on the desktop.

Some of this kind of nonsense is exactly why I don't like some other operating systems who believe they know what's best for you with Messianic Zeal (I'm looking at you Apple).

All in all I find this transition very disappointing. There are lots of basic things no-one seems to have thought of, and years of desktop customisation have been swept away with an extraordinary arrogance. Don't get me wrong, I support the idea of trying a new Desktop paradigm: but, for instance, if people used to have applets on their desktop for the weather, or for system monitoring, it's because they needed it. Rolling out a new desktop that simply ignores these things in favour of how some people thing everyone should use their desktop is exasperating.

I'm seriously hoping that Gnome Shell improves significantly and fast. I won't hold my breath.

by Colin Turner (nospam@example.com) at October 30, 2011 07:35 PM

October 16, 2011

Simon McCartney

State of the Java Onion

I’m siting on my flight home from my first devopsdays in Goteborg, so firstly, many thanks to the awesome Patrick Debois, Ulf & many many others that put the effort in to organising the conference, and everybody that turned up and made the event so worth while! My primary reason for going was to hear other people’s experience with configuration management and general ops deployment experience. (I’m in the process of adding puppet to our large legacy LAMP stack)

I kind of expected to be the fuddy duddy in the room (my group runs 4 SaaS services, our largest is a LAMP+JBoss SIP stack, a Solaris/Tomcat/Oracle/Coherence stack, a Linux/Tomcat/MySQL stack and a Apache/Weblogic/Cognos/Oracle stack, all hosted on our own hardware, how retro), so I was prepared to hear stories of how easy it was to deploy services built on modern interpreted stacks to the cloud, but I was pleasantly surprised to hear that plenty of people are using java application servers of all shapes & sizes in production. I was less pleased to hear, but somewhat comforted, that everybody running java stacks in production is suffering pain somewhere (damn, no silver bullet to take home).

 

Deployment Pain

Lots of people were good enough to share their success & horror stories about how their current java stacks get into production, some of the recurring topics:

Orchestration

I think this deserved a talk or open space on it’s own, but John E. Vincent covered chunks of this in his great tools talk, and it came up in the “deploying java artifacts” open space.

I’ve got some take away reading to do about tools like Apache Whirr & UrbanCode’s deployment & configuration tools, but everybody has similar problems, needing a controlled, reliable method of automating the pre & post deployment steps (traffic bleed off, deploy, service verification, data load, back in service) and managing the service availability during the deployment (or managing the stress on systems affected by the post deployment steps)

Hot/Cold deployments?

In general, hot deployments never seem to work as planned reliably, hot deployments are highly desirable for some services due to session requirements, but most people observed that hot deployments are prone to problems, leaking memory on many occasions, leading to hot deployments being something you can only get away with a few times, if at all depending on your memory overhead.
The guys from zeroturnaround demoed their latest jrebel/liverebel tools. JRebel is a developer focused tool that allows a jar to be hot updated in a running JaS, for quicker iterative java development. LiveRebel is built on similar technology but aimed at use in production, to do hot updates (I’m not sure how this differs from the hot deployments of war & ear etc, but that’s a gap in my JaS understanding)

war/ear or exploded webapps directory?

Currently we do both, and each have their pros & cons, exploded webapp directories have a tendency to build up undocumented cruft essential to the smooth running, and war/ear deploys have a tendency to break your heart with environment issues (what do you mean we need a new build to use a different database server!?)

For our next service going into production, we need to be able to vary the number of tomcats running on a physical host, each running on a different port, to support this we’ve extended our existing in_service hook, which in a our simpler environments just lets the load balancer know that this host is now good to take traffic, now it will build out the multiple tomcat CATALINA_HOME trees from scratch, going as far as grabbing the ant & tomcat tarballs required (version numbers pulled from central config db, allowing per host overrides for piloting versions on individual machines), the aim here is 2 fold, have a clearly documented process for building a working CATALINA_HOME and be able to dynamically vary our tomcat count without lots of manual preparation required)

Environment & Configuration

Lots of issues & lots of different solutions to this one, best case, war file ships with 3 environments configured, default to production, over ride on the command line for other environments (down side, production passwords are in the artefacts & therefore in source control).

There was some discussion over externalising the config, various methods (XML includes in comtext.xml/server.xml) and providing an standard-ish API to get/set properties (some commercial JaS already do this).

Horror stories included the deploy process having a start to explode the war, stop, remove the war, fix the config, restart. Another involved a post restart data load that took 30-40min before the tomcat was ready for traffic again.

General concencus was that involving dev in more of the ops deployment pain helped hilight areas that needed some improvement.

Config/Properties APIs

There was a little bit of discussion around APIs for managing configs in a running AS, some of the commercial AS already have this, but their was little support around the room for single vendor solutions, although most agreed that practically nobody changes AS after initial selection, the desire for a single tool was focused on having a single tool to gain momentum instead of fragmented tooling.

No Ops in the Java Serverlet Steering committee?

I missed the exact names of the standards & people involved, I’ll update this if you have specifics
One of the participants in the java artifacts open space is on the Java Community Process mailing list, he pointed out that their was practically no one representing ops in the ML, some of the proposed changes for horrified ops people in the room.

the platform/application split

Some ardent supporters of deploying nothing but packages, people using FPM and other tools to build RPMs and other packages of the AS and another package for application.

Part of this also comes down to your orchestration tools and how you run your CM, Ramon of Hyves hilighted that they don’t run puppet continuously, they run once a day, due to orchestration requirements and scale (they have 3,000+ application server in production).

Most people agree that the CM goes as far as preparing the AS for an application to be dropped in, although most of these environments ran a single AS per host.

by simonm at October 16, 2011 11:14 PM

October 05, 2011

Jonathan McDowell

Thanks for the offer, but...

I was due for another Google interview mail it seems. I have to say I wasn't expecting it, but this week I had a follow up to my polite mail from 6 months ago that said "No thanks, I'm not looking" asking if it was still the case.

Normally I welcome this little bit of ego stroking; it's always nice to be wanted. Except that's not really the case, is it? It's an invitation to interview for something, not any indication that you've done more than tick some initial boxes. Google mails inevitably ask me if I'd like to work in SRE. It's always SRE. No one ever emails and asks if I want to work on self-replicating nanobots that will roam Mars searching for the perfect spot to build a beach house.

And that's where things fall down. If someone currently has a job, then emailing them out of the blue to ask if they want to come and interview for something vague is hoping that they're either looking, and just haven't come to you yet, or not looking but unhappy enough with their current role that all they needed to start was an email asking them to submit a recent CV.

For the former, if you're Google, do you really think that person doesn't know where to find you? For the latter, you're being quite presumptuous, aren't you? The act of updating my CV my be some effort (actually it's usually not, because the stuff that's not on it is the stuff I can't talk about because it's not released yet, or stuff that's specific and thus wouldn't go on a CV for a vague job spec). Even if it's not the act of interviewing is potentially a waste of time for both of us, if the role isn't clear.

One argument used is that people will be placed according to the skills they show during the interview process. That's fine from the employers point of view, but if you're actively trying to get some interest from people who are gainfully employed you really need to grab their attention somehow. I can't remember the last time I had an unsolicited email interview offer that actually wowed me, or indeed even showed more than a passing sign of tailoring a spec to my profile.

When I was running Black Cat I made a point of always replying to unsolicited CVs. How polite I was depended on how the covering emails were worded (a Word document with nothing else was likely to get short shrift, something well targeted in a Linux friendly format would normally get some comment about how we weren't hiring and were unlikely to be, but if that changed it would be mentioned on the website), but I felt people deserved a reply - I have been disappointed by not receiving responses myself to what I considered well targeted job inquiries.

So far I've so far taken the same approach with mails from corporate recruiters (less so with recruiters that are associated with recruitment firms, rather than directly with the companies they are hiring for), but I'm starting to feel like changing that stance. Candidates are told to tailor CVs to the role being applied for, provide a decent cover letter, and in general make companies want to talk to them. Companies who are sending out recruitment emails should be held to the same standard. Even assuming you do a basic phone screen first, I can probably expect to need to take a day off work assuming that goes well. You need to convince me I can justify that before I'm going to feel like engaging at all.

(And if I'm honest, based on what I've seen so far, it's unlikely to happen. All of the things I've considered have come from conversations with people I know directly about companies they own or work for, never some random contact via email. I try hard not to think of recruitment mail as spam, but I can how that line of thought follows through.)

I should apologize to Google here. They got mentioned as an example, but I don't think they're particularly bad. I did interview with them at one point, and made the decision not to continue that process after deciding a different, more certain, path was better for me. So I've displayed interest. And in response to my reply today of "I know where to find you, so please assume I'll do so if I change my mind." they've said they'll make a note on their records.

by Jonathan McDowell at October 05, 2011 06:02 AM

September 12, 2011

Simon McCartney

Windows 7 Essentials

I’ve just rebuilt my laptop (a combination of McAfee Whole Disk Encryption slowing the current build down & a Crucial ReadSSD 128Gb that was too cheap to resist forced me to, honest guv), so it’s time to refresh & re-document the essential software list:

  1. Windows 7 Professional 64bit
  2. VistaSwitcher (better alt-tab)
  3. WindowSpace (snap windows to screen edges & other windows, extended keyboard support for moving/resizing)
  4. Launchy
  5. Thunderbird6
    1. Lightning (required for work calendars)
    2. OBET
    3. Provider for Google Calendar (so I can see my personal calendar)
    4. Google Contacts (sync sync sync)
    5. Mail Redirect (bounce/redirect email to a ticketing system)
    6. Nostalgy (move/copy mail to different folders from the keyboard)
    7. Phoenity Shredder or Littlebird (the default theme is a bit slow, these are lighter and quicker)
    8. Hacked BlunderDelay & mailnews.sendInBackground=true
  6. Chrome + Xmarks
  7. Xmarks for IE
  8. Evernote
  9. Dropbox & Dropbox Folder Sync
  10. PuTTY (remember to export HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions)
  11. WinSCP
  12. Pidgin + OTR
  13. gVim
  14. Cisco AnyConnect (main work VPN)
  15. Cisco VPNClient (backup & OOB VPN)

I think that’s it for now.

by simonm at September 12, 2011 12:14 PM

August 25, 2011

Paul Gregg

Amusing, True Near Death Experience.

Those who know me will know that there have been two important events occurring in my life this week. 1) Tiling my kitchen, and 2) Trying to buy a HP TouchPad.

As part of tiling the kitchen, significant other wanted to replace all the standard white wall sockets with Stainless Steel ones to match the rest of the kitchen colour scheme. I was safely over half way through this task, having disconnected the socket mains supply, when a van pulled up bearing HP TouchPad goodness. Thus the next 30 minutes of my life was accounted for.

Upon returning to the kitchen tasks I came to the Cooker 40A switch. I disconnected the ring main from the switch and proceeded to move the wires so that I kept the supply and load pairs apart when BUZZZZZZ and 240 Volts of high energy goodness shot through my hand and up my arm.

Yes folks, TouchPad caused me to forget to flip the cooker ring circuit in the fuse box.

Cue me jumping back, dropping tools and collapsing to the floor in a bout of Arrrrgh.

Wife said "Stop it, you'll scare the kids.".

Kids run in asking what happened and wife explains that Daddy electrocuted himself.

Six year old Lauren asked "Could you see his bones?".

by Paul Gregg at August 25, 2011 11:02 PM

August 06, 2011

Marty Pauley

Beam me up, Scotty.

Based on the messages we have received from family and friends, I’m sure that if Star Trek’s transporter technology worked they would without hesitation beam us out of Tokyo.

But despite the best efforts of many so-called “news” media, I don’t feel afraid to be in Tokyo. I’m not unnamed Starfleet crewman #2. With the tricorder information I have here I am confident that my continued exploration of Tokyo is much safer than being dematerialized, where I would risk being trapped in a pattern buffer for 70 years, or cloned by inadvertent reflection off the ionosphere.

I’m glad to say that the radiation threatening my life, just like the transporter, does not yet exist.

by Marty at August 06, 2011 01:59 PM

August 04, 2011

Colin Turner

Multi User Sound in GNU/Linux

For some years now, basically since Aimee became old enough to use a computer, I have had a need for decent multi-user sound. Specifically I would often have intricate work open in multiple work spaces on my desktop, and Aimee would want to do some artwork.

I guess Aimee was about two when she started using my computer a fair bit, and I immediately had a separate account for her with lower resolution graphics, easier menus, simple shortcuts and the like. I also had a graphics tablet for her, which she mastered very quickly. Another important reason to have a separate account was that if stuff got really badly messed up I could just nuke the account and start again, and she couldn't really hurt my configuration.

As you would imagine, lots of the excellent free software for children, like GCompris, and Tuxpaint is very rich in its sound effects, and sometimes the sound is not just desirable, but essential for the activities. So a very annoying persistent problem has been that, once in a while, something in the sound stack in my login would stop Aimee's sound from working.

Now I share my main PC with two other people, Tamsin and Aimee, and soon Matilda too, so this recurrent problem is more of an issue, it's also very hard to nail down. Despite protests to the contrary the default ALSA setup still has this problem; ConsoleKit on its own doesn't seem to get it quite right. I tried PulseAudio for a while, and generally it was an improvement, but the problem did still occur sometimes. I even made sure all the users were members of the right groups including pulse-rt.

Then I found this entry in the PulseAudio FAQ.

Sound doesn't work when switching users

PulseAudio works with a single user, but when an additional user logs in (fast user switching), sound/audio does not work for the additional user.

Check that no users are part of the "audio" group.

In simple setups (e.g. singe user, without PulseAudio), users must be a member of the "audio" group to access the sound devices (/dev/snd/* (which have group "audio" write permissions)). Switching users will not automatically stop programs using those sound devices though, so those sound devices will not be accessible to a new (faster user switched) user's programs.

By removing all users from the "audio" group (the PulseAudio server still runs in the "audio" group), PulseAudio is able manage access to sound devices (/dev/snd/*) amongst multiple users with the help of ConsoleKit.



It would never have occurred to me to remove the users from the audio group, but doing so seems to have solved the problem. I almost don't want to say that, because every "solution" up to now has been partial, but so far no problems, so maybe this will be the fix.

by Colin Turner (nospam@example.com) at August 04, 2011 08:42 AM

July 11, 2011

Colin Turner

Rooting and Upgrading the HTC Desire

I have been asked by a few friends to document how I did this. All the information is derived from elsewhere and its currency may be limited. Trying to root and flash phones is potentially dangerous. You need to take your time and consider what you are doing carefully. If you break your phone, you own the pieces. This worked for me, but I can make no guarantees. You get the idea.

Read the whole article before you start please.

The HTC Desire is a lovely phone, but it has two pretty annoying flaws. First of all the battery life isn't great, but that's not what this article is about, and secondly, the internal memory is very limited. I thought when I got the phone that Froyo would save me because it had apps2sd. Apps2sd allows you to move applications from the internal memory to the SD card, but it has some serious limitations:
  • apps with widgets and some other bits won't work properly from SD
  • many apps only partially move to SD
  • some huge apps won't move at all (I'm looking at you Google).


The ROM images I was getting, from Google to HTC to O2 were out of date, and they clearly didn't even care about fixing some significant issues (like the broken authentication in the HTC Peep program). This wouldn't matter because you could install a decent twitter client if you had the memory... oh... you get the idea. I was rapidly having to remove apps hand over fist with every upgrade, and my Daughter was complaining about their absence. So I decided to sort it out.

Some ROM images have the rather different data2sd. This allows you to treat part of your SD card as the internal memory of the phone. This makes a crucial difference, no messing about partially moving to "SD", but allowing a large amount of memory to be treated as internal.

Step Zero: You will need

  1. This process will take some time, during which you won't really be able to use your phone. Make sure you have time. If it works you will have to do some work setting some things back up, it will to some extent be like having a new phone; some work can be done to minimise this. See below.
  2. For this to work you will need a half decent SD card. Mine is a class 6, 8G card. The class information is written in the card in a number with a circle on it, and has to do with the speed of the card. Class 2 will apparently be painful. Class 4 is apparently fine. But I already had class 6. Get a decent card.
  3. Some means of mounting the card on your PC, usually an SD to micro SD adapter.
  4. Possibly a blank CD, and some spare Hard Disc space for backups.
Step One: Backup Your Phone.... Really

Even if this all works it will be like having a new phone to some extent, so expect to do some setup again. If you don't have time, don't start. Backup your phone. I had Backup PRO which I used to backup everything. I did this to the SD card this time, but actually, I should have done it online instead (or as well). I'll explain why later. Backup PRO wasn't free, but it was cheap and has been more than worth it for me. I've used it several times.

Now backup your SD card. Either mount it as a drive or take it out of the phone and put it in your adapter or whatever. Copy everything to your PC as files (in the past I've used dd, but this is not needed).

Step Two: Root Your Phone

At some points in the past this has been very tricky, but this was easy this time. I went to the Unrevoked website, and downloaded the software to flash the phone. Follow the instructions carefully and read all the guidance. Click on the Desire, and your OS, and download what's needed (some extra drivers for Windows please note). I was using Debian GNU/Linux at the time.

Turn on "USB Debugging" (Menu >> Settings >> Applications >> Development) on the phone, and then plug the phone in (leave it as charge only when it prompts you). Run the software, wait, and in a few minutes your phone should reboot with ClockworkMod and root access. Note some people suggest you need to run the program on your PC as root, I did need to do so.

Step Three: Check you can access recover mode

For some reason I couldn't do this with the volume buttons on power on, so I did the following. Power off the phone. Hold the "back" (hardware button) down. Now press power on. You will get to the Bootloader screen. By using the power button you can run the Bootloader. This brings another menu and (after some patience) allows you to move up and down with the volume buttons until you pick "Recovery". Now press the power button again. When the phone reboots it will be into recovery mode. Peruse the options, see that you can navigate with the optical trackball and the back button.

Step Four: Possibly install a ROM manager

Now you can pick an alternative ROM of your choice. But this article following on below is specific to the Supernova ROM.

I installed ROM Manager (and it's cheap but not free upgrade) to allow me to download ROMs and flash them, and I flashed Cyanogen... but I didn't like it. I did it for old time's sake and much as I tried to bring myself to like it I found I missed the HTC Sense stuff (that surprised me). You can experiment with all of this. I strongly recommend you opt to wipe user data on a major ROM change, the phone will probably hang if you don't when you reboot, and you'll have to get into recovery mode anyway and do it there.

Step Five: Get the ROM files

The ROM I went for was Supernova since essentially it's a good, HTC Sense oriented, Gingerbread based ROM with the data2sd extra. In other words, you get newer Android goodies with much the same user experience, but don't have to worry so much about the memory. You need to sign up to the website and then go to the download links and get the ROM and data2sd installer. Copy them to your hard disc for now.

Step Six: Prepare your SD card

For the data2sd to work, you need to prepare your SD card with a FAT32 partition (for general use) followed by an ext4 partition (for use as internal memory). Don't panic if you're not a Linux user. There is a way to do this for you.

In Debian, I installed gparted. I then put the SD card in its adapter and in the machine. The machine may mount it automatically... make sure you unmount it before proceeding. Run gparted and follow on below.

If you are using another OS, get the GParted live CD.

Follow these instructions carefully.

Make sure the GParted is accessing the correct device in the pull down before you start, make sure the disc space in front of you looks correct. YOU DO NOT WANT TO ACCIDENTALLY REPARTITION YOUR COMPUTER'S HARD DISC. TAKE YOUR TIME. Personally I went for about 7000 MB on FAT32 and the remainder for my ext4 partition.

Get out of GParted, back into your regular environment (close GParted, reboot or whatever). Now copy your SD card backup (remember that, right?) back onto the card. Finally copy the two ZIP files from the Supernova website (the ROM and data2sd installer) into the root of the SD card. Dismount the card and put it in your phone.

Step Seven: Install the ROM and data2sd bits

I recommend you read and follow the official instructions carefully from here in. Note I didn't bother with the radio code because I was confident it was already very recent. Follow the instructions very carefully to be sure the data2sd will work correctly... note there are a few very specific things you must do and must not do in between boots.. Basically you need to use reovey mode to do a factory reset, navigate to the ROM ZIP and install, reboot, change a few settings, back to recovery, navigate to the data2sd ZIP, install, reboot.

Step Eight: Restore as needed

You should now have loads of space in internal memory. Check in Menu >> Settings >> Applications >> Storage.

I then put in my Google credentials and restored everything after downloading Backup PRO again. Because my backup was on the SD and it was copying to SD, it was slow. I recommend using the online option. Be patient, if you are restoring call logs and SMS messages it will take time, do not navigate away. Wait for it to finish and immediately restart. Think twice about copying "settings", I always worry it will cause the newer ROM to cease. Your mileage may vary.

by Colin Turner (nospam@example.com) at July 11, 2011 08:23 AM

July 02, 2011

Jonathan McDowell

Chromium

The thing that finally made me install Chromium? The refusal of Google+ to work with Firefox 3.5 (from Debian/testing). Well played Google. Well played.

Update: Please note I didn't say "switch to Chromium", it was just installing it at all. I've also pulled in FF 5 from experimental which seems to be working nicely - I hope that it can make its way into unstable and thus to testing soon.

by Jonathan McDowell at July 02, 2011 03:16 AM

June 28, 2011

Colin Turner

Tau versus Pi

Today, two of my friends independently sent me a story about Tau Day which I had hitherto never heard of. One of them asked for me comment about whether this had any point to it. At first I thought the article was just mathematical trolling, thought about it a bit more, thought there might be a real point to it, thought some more and concluded it seemed rather silly.

The argument is about whether the mathematical constant pi, would be better being replaced throughout mathematics with an alternative tau, which is just twice pi (in other words, replacing pi everywhere with a half of this tau). It's suggested that formulae with tau will be more simple.

Basic Geometry

So this is all about the fact that pi was defined historically as the ratio of the circumference to the diameter of the circle, a very old classical reference stemming back to Greek geometry (incidentally pi is also known as Archimedes' constant since he attempted to calculate an approximation to it). Once upon a time, the formula used in schools would have been:

C = \pi D

related the circumference C to the diameter D. But generally now, we use the radius r rather than the diameter. And so that gives us (for circumference and area):

C = 2 \pi r \quad ; \quad A = \pi r^2

The argument for tau begins by observing the extra 2 in the first formula, and wouldn't be nicer if we just defined tau to be twice pi so that these formula would be so much nicer. Would they?

C = \tau r ; \quad A = \frac{\tau}{2} r^2

Set aside for the moment the fact that pi is probably the most recognisable Greek letter in the world that speaks languages based on the Latin alphabet (aside from those that are, or appear to be the same). Set aside the fact that tau is used for other specific purposes in much of modern Mathematics, and in particular in the discipline of Topology. The first formula might be nicer, but the second one is probably worse, and by enough to make the improvement of the first rather parlous. OK. But the article talks about this being the problem behind radians, so maybe that's where we get the big gain. Let's explore that.

Radians instead of Degrees

There's nothing particularly clever about using degrees. It's an arbitrary choice (360 degrees in a circle) that probably owes a lot to do with historical factors in one civilisation. It is true that when you start to do some significant mathematics with degrees, it starts to look quite unwieldy. The classic two formulae to consider are the length of an arc and area of a sector.

Suppose we have a circle of radius r and we want to work out the length of an arc (a part of the circumference) where the angle subtending this arc is theta degrees (don't panic, no more Greek to come). Then in degrees the formula will be:

s = \frac{\theta}{360} \times 2 \pi r = \frac{2 \pi r \theta}{360}

The reason why is that the fraction on the left is the fraction of the relevant angle out of all the angle available, multiplied by the total arc length available (the whole circumference). The formula is not beautiful, and the similar formula for sector area is also a big ugly.

A = \frac{\theta}{360} \times \pi r^2 = \frac{\pi r^2 \theta}{360}

You will note that in both cases there is a 360 on the bottom of the fraction and a 2 pi on the top. This looks like nature's way of trying to tell us something. What would happen if we used an unit of angle so that, instead of having 360 of them in a circle, we had 2 pi of them in a circle (proponents of tau will just say tau of them in a circle)? The formula, derived using the same logic, become much nicer.

 s = \frac{\theta}{2 \pi} \times 2 \pi r = r \theta
 A = \frac{\theta}{2 \pi} \times \pi r^2 = \frac{1}{2} r^2 \theta

So we get

 s = r \theta \quad ; \quad A = \frac{1}{2} r^2 \theta

Now these are beautiful, elegant formulae, and the underpinning of why radians (the unit of angle we are talking about here) are used instead of degrees in much of higher mathematics, the formula are much simpler (particularly true when using calculus). Also, look at that first formula, it has all the resonance of F = ma. 1 unit of arc length is found in a circle of radius 1 unit with an angle of 1 radian. So beautiful is this that it used as the definition of the radian in many books. So far, so good. Did we really need tau to produce these? Does it matter that it it tau and not pi that cancels out? I can't see why.

Fourier Series

Another example owes to the work of Fourier, who showed that repeating patterns can be broken into sums of the most basic repeating functions, the ones that are most simple are the sine and cosine functions. These are used to model waves of any sort which are of course ubiquitous in nature. It turns out you can build up more odd shapes like triangular and square waves out of these sinusoidal ones. Being able to do this is important in many aspects of Science and Engineering, and eventually this theory leads to all sorts of cool stuff like the way data is compressed in photos and more.

The graphs of Sine and Cosine
The graphs of Sine and Cosine (sin t and cos t)


This graph is labelled in degrees, so you can imagine if we change it to radians as we should then the 360 would become 2 pi. This is where again, proponents of tau will argue that replacing the 360 with a simple tau makes things easier. And it does, if all you want to do is to label that diagram. But the foundation of Fourier theory is building functions up in combinations of these:

 1, \sin t, \cos t, \sin 2t, \cos 2t, \sin 3t, \cos 3t, \ldots

The formulae you need to be able to deal with to do this are (among others):

 a_n = \frac{1}{\pi} \int_{-\pi}^{\pi} f(t) \cos nt dt \quad ; \quad  b_n = \frac{1}{\pi} \int_{-\pi}^{\pi} f(t) \sin nt dt

which I grant, strike fear into the hearts of many. But they don't look nicer with tau (and are a little more awkward):

 a_n = \frac{2}{\tau} \int_{-\frac{\tau}{2}}^{\frac{\tau}{2}} f(t) \cos nt dt \quad ; \quad  b_n = \frac{2}{\tau} \int_{-\frac{\tau}{2}}}^{\frac{\tau}{2}} f(t) \sin nt dt

Remember, the people arguing for tau are claiming it simplifies formulae, not making them look worse.

Euler's Identity

Finally, I cannot leave this without talking about Euler's identity considered by most mathematicians (including myself) to be one of the most beautiful results in Mathematics.

e^{i \pi} + 1 = 0

This result can be written in a few ways, but this way is very commonly used. This is because in this form you can see how this identity connects the five most important numbers of Mathematics: 0, 1, pi, i and e. With tau, it just doesn't have the same beauty:

e^{i \frac{\tau}{2}} + 1 = 0

so I will stick with pi. Thanks all the same.

by Colin Turner (nospam@example.com) at June 28, 2011 02:32 PM

June 05, 2011

Jonathan McDowell

Building a FreeDOS bootable USB stick under Linux

This is for my own reference more than anything else; periodically I find myself needing to boot DOS. Usually because I want to upgrade a BIOS and the upgrade tool only works with Windows or DOS. Yes, I'm aware of flashrom, but the scary messages about toasting laptops means I'm much happier going the DOS route there. So I need a writable medium with a DOS boot image. The easy way to do it is to find a DOS floppy image and write that to a USB stick with dd, but it's basically a one off and means you can't fit a whole lot on the image. I wanted to do a native USB boot. The following did the trick for me.

Firstly, this is all on a Debian testing box, in particular with dosfstools (3.0.9-1), mbr (1.1.11-4) and syslinux (2:4.04+dfsg-2). I don't think I'm using anything particularly new from these tools, so I suspect Debian stable will work just fine.

In the below my USB stick is on /dev/sdb, I've got a copy of FreeDOS in ~/FreeDOS/ (I extracted the files from a balder10.img floppy image that's easy enough to find, but all you need is kernel.sys and command.com), and I wanted things neatly in their own subdirectories so I could try and keep the key for repeated use and know which bits I wanted to keep and which were transient. I also added a copy of the Debian Installer for convenience; it would need a copy of the netinst ISO dropped into the root to actually be useful, as there's not enough to do a full netboot from the wider Internet using just the HD initrd.

    # Create a single bootable LBA VFAT partition spanning entire stick.
    echo 0,,C,* | sfdisk /dev/sdb
    # Format as VFAT and give it a disk label.
    mkfs.vfat -n 'DOS BOOT' /dev/sdb1
    # Install an MBR
    install-mbr /dev/sdb
    # Mount it and create some directories for our files.
    mount /dev/sdb1 /media/DOS\ BOOT/
    cd /media/DOS\ BOOT/
    mkdir boot
    mkdir boot/syslinux/
    mkdir FreeDOS
    # Copy the chain.c32 syslinux tool over.
    cp /usr/lib/syslinux/chain.c32 boot/syslinux/
    # Copy FreeDOS over and move the important bits to /
    cp ~/FreeDOS/* FreeDOS/
    mv FreeDOS/command.com .
    mv FreeDOS/autoexec.bat .
    mv FreeDOS/fdconfig.sys .

    # Add the Debian Installer
    mkdir boot/d-i/
    cd boot/d-i/
    wget http://cdn.debian.net/debian/dists/squeeze/main/installer-amd64/current/images/hd-media/initrd.gz
    wget http://cdn.debian.net/debian/dists/squeeze/main/installer-amd64/current/images/hd-media/vmlinuz

    # Install syslinux
    syslinux -d boot /dev/sdb1

I made a boot/syslinux.help file containing:

    Available boot options are: FreeDOS d-i

and a boot/syslinux.cfg with:

    prompt 1
    display syslinux.help
    default FreeDOS

    label FreeDOS
        COM32 /boot/syslinux/chain.c32
        APPEND freedos=/FreeDOS/kernel.sys

    label d-i
        KERNEL /boot/d-i/vmlinuz
        INITRD /boot/d-i/initrd.gz

Initial testing was done using kvm which was a lot easier than constantly rebooting my laptop.

Hopefully this is of help to someone. The only neat bit that I didn't see elsewhere when I was looking was the use of chain.c32 to load kernel.sys rather than having to use a FreeDOS provided boot sector image.

by Jonathan McDowell at June 05, 2011 03:59 AM

May 09, 2011

Jonathan McDowell

A minor keyring-maint rant

This should probably be an official FAQ, but a) I wanted to rant a bit more than is probably acceptable for something "official" and b) the sort of person this information is directed at never bloody reads keyring.debian.org, which is the logical place for it.

Who are keyring-maint?

Currently Gunnar Wolf (good cop) and Jonathan McDowell (bad cop). Previous keyring maintainers include Igor Grobman & James Troup.

I'd like to be a DM/DD. Do I send you my key?

No. You go through the DebianMaintainer or NM processes. Then the DM team or DAM tell us to add your key to the appropriate keyring.

I'd like to replace my DM/DD key in the Debian keyring. What should I do?

Read the instructions at http://keyring.debian.org/replacing_keys.html

I have a new key that isn't signed by anyone else, will you accept it?

No. Did you read http://keyring.debian.org/replacing_keys.html ?

I've got a single DD signature on my new key. That's enough, right?

Not unless your old key has been lost and you're getting a different DD to request the replacement for you (and if they're prepared to ask for a key replacement we'll wonder why they're not prepared to sign the new key too).

Did you read http://keyring.debian.org/replacing_keys.html ?

I'm still really confused about how I should request a key replacement. Help?

Try reading https://rt.debian.org/Ticket/Display.html?id=3141 (which just happens to be a recent decent example). Clear subject line (I'd have added a real name too, but it's still fairly clear), full fingerprint of the old and new keys, inline signed so RT doesn't mangle it. New key signed by old key and 3 other DDs. Request signed by old key.

That RT link needs a login. I don't have one.

Have you tried reading up on the Debian RT system? There's a generic read only login that'll get you access.

That's too hard. Can't you just give me the details?

Damnit. It appears the read-only login details are currently disabled due to misuse (one wonders how). Try reading http://wiki.debian.org/rt.debian.org

Why are you using RT? Isn't bugs.debian.org more appropriate?

We need the ability to for people to contact us is in a private fashion, for example if they need to us to remove a key because it's been lost or compromised. We could only use RT for that purpose and use bugs.d.o for things that can be public, but this way all the information is in one place and we get to make the call about when it becomes a publicly viewable ticket.

What's with jetring? Should I send you a jetring changeset?

jetring is a tool written by Joey Hess that used to be used to manage the Debian Maintainers keyring. keyring-maint borrowed a number of good ideas from jetring but don't use it at all. We ignore jetring changesets.

So you just want key fingerprints, not attached keys?

Yes. Of course you have to make sure your key is actually on a public keyserver so we can get it. the.earth.li is a good choice (because Jonathan runs it and thus pays more attention to it), but subkeys.pgp.net or pool.sks-keyservers.net are also commonly used.

My key has expired and I want to update the key expiry date. I should email RT asking for this to be done, right?

No, you should send the updated key via HKP to keyring.debian.org. You can do this with

"gpg --keyserver keyring.debian.org --send-key <keyid>"

Obviously replace <keyid> with your own key ID.

I tried to send an entirely new key via HKP to keyring.debian.org, but I can't see it there. What gives?

keyring.debian.org only accepts updates to keys it already knows about. That means you can send updated expiry dates, new uids and new signatures to your existing key, but not an entirely new key.

I sent my updated key via HKP to keyring.debian.org and can see it's updated there, but the Debian archive processing tools (eg dak) don't seem to recognize the update. Why not?

The updates sent via HKP are folded back into the HKP server automatically every 15 minutes or so. They are folded into the live Debian keyrings on a manual basis, at least once a month.

This means if your key has an expiry date then you probably want to update your key at least a month before it expires.

Where can I find these live Debian keyrings?

They're what's available via rsync from keyring.debian.org::keyrings/keyrings/

This is canonical location for the current Debian Developers and Debian Maintainers keyrings.

What about the debian-keyring package?

This is a convenience package of the keyrings. It's usually the most out of date. We update it sporadically and try to ensure that the version shipped with a stable Debian release is current at the point of release. It is not used by any of the official Debian infrastructure.

Why don't you automatically update my key in the live keyring when I send an update via HKP?

We think that automatic updates of keys that allow uploads to Debian are a bad thing and that invoking a human eye at some step of the process is a useful sanity check.

Paranoid much?

Never enough.

How are updates to the keyring tracked?

We use bzr to maintain the keyring, with a separate file per key that can then be easily combined into the various keyrings. You can see the repository at:

http://bzr.debian.org/scm/loggerhead/keyring/debian-keyring/changes

Note that this is only updated when a keyring is pushed to live; the working tree may contain details of compromised keys and thus isn't public.

What's with the whole replacement of 1024 bit keys?

2 things. Firstly 1024 bit keys tend to use SHA1 as a hash algorithm, which has been shown to be weaker than expected. While we're not aware of active exploits against this updating all of the keys Debian uses is not a trivial process and it's wiser to get it done /before/ there's a known issue. Secondly computing power has moved on and we feel that upgrading to larger key sizes is prudent.

Elliptic curve cryptography (ECC) keys look like the future. Can I use one for Debian?

No, not at present. When there are tools that are part of a Debian stable release that support them we'll look into it, after discussion with the major users of the keyring (DSA, ftpmaster, the secretary).

by Jonathan McDowell at May 09, 2011 12:56 AM

May 07, 2011

Jonathan McDowell

Not going to DebConf11

no-debconf11.pngI'm sad to report that I won't be attending DebConf11. I'd have loved to go, but unfortunately I couldn't get the time off work due to various schedule conflicts. I'll have to find another excuse to make it to Bosnia at some point.

by Jonathan McDowell at May 07, 2011 04:43 AM

May 01, 2011

Philip Herron

GccPy – Dynamic Typing

Hey guys time for an overview of Gccpy,:

Gccpy is a Python front-end to gcc from my last years GSOC (2010), I was mentored by Ian Lance Taylor
who continues to be a great inspiration to me with his work on gccgo and his help on gcc-help to the community
of users and developers.
An overview of what the project aims to achive is creating an AOT compiled version of Python using GCC as a framework for
middle-end, back-end optimization aswell as protable code-generation. Creating AOT languages has
been generally aimed for more ‘low-level’ languages such as C/C++/Fortran where the language requires
strong typing and other kinds declarative features; which gives rise to much less dynamic
features which languages like Python/PHP/Perl take for granted. The reason these more ‘high-level’
languages are able to do such things is due to the fact they are generaly implemented as interpreted
languages and this allows for much of this dynamic logic to take place at runtime when a program is passed
through their respective interpreters. But gccpy tackles this by generating code which allows for and efficient
runtime as well as the dynamic features required.
Personally I feel this is a very strong and important style of implementing dynamic languages; which needs to be shown
and proven to be an effective and strong way of implementing new and up-comming languages and why GCC is the right platform
to do so.

Gccpy is a Python front-end to gcc from my last years GSOC (2010), I was mentored by Ian Lance Taylor who continues to be a great inspiration to me with his work on gccgo and his help on gcc-help to the community of users and developers.

An overview of what the project aims to achieve is creating an AOT compiled version of Python using GCC as a framework for middle-end, back-end optimization as well as protable code-generation. Creating AOT languages has been generally aimed for more ‘low-level’ languages such as C/C++/Fortran where the language requires strong typing and other kinds declarative features; which gives rise to much less dynamic features which languages like Python/PHP/Perl take for granted. The reason these more ‘high-level’  languages are able to do such things is due to the fact they are generally implemented as interpreted languages and this allows for much of this dynamic logic to take place at runtime when a program is passed through their respective interpreters. But gccpy tackles this by generating code which allows for and efficient runtime as well as the dynamic features required.

Personally I feel this is a very strong and important style of implementing dynamic languages; which needs to be shown and proven to be an effective and strong way of implementing new and up-coming languages and why GCC is the right platform to do so.

So ok this was the overview of my Gsoc application, but i think its about the best i can word it. But first lets discuss how this actually works over several blog posts i will demonstrate some of the basic ideas which lets us compile python.  From the title of this post i will quickly demonstrate the ideas behind dynamic typing:

Lets look at how we can easily generate code for some C code for example:

  1.  
  2. int foobar (void)
  3. {
  4.   int x = 1, y = 2;
  5.   return x + y;
  6. }
  7.  

We could generate an IR of:

  1.  
  2. int foobar (void)
  3. {
  4.  
  5.   int x, y, T.1;
  6.  
  7.   x = 1;
  8.   y = 2;
  9.  
  10.   T.1 = x + y;
  11.  
  12.   return T.1;
  13. }
  14.  

And the i386 code of:

  1.  
  2. .globl foobar
  3. foobar:
  4.   subl $12, %esp            # get some stack space
  5.   mov $1, %esp             # x
  6.   mov $2, 4(%esp)         # y
  7.   mov 4(%esp), 8(%esp) # setting up a very highlevel/*un-optimized* addition
  8.   addl %esp, 8(%esp)     # T.1
  9.   mov 8(%esp), %eax     # the return
  10.   addl $12, %esp           # fix the stack
  11.   ret
  12.  

This is where some interpreters/runtimes start to try and become much more like a ‘virtual machine’ like Java they implement their language by having a runtime which runs code that is in a virtual inscrution set. So when they parse their language with a front-end they generate this virtual instruction set for the given program but then they ‘compile/assemble’ this to bytecode which is a similar akin to C where we assemble the target code to an object code before linking into an executeable format. But really the byte code is nothing more than a binary form of the instruction set to optimize execution of the instruction set.

An example why many people belive generating efficient code for dynamic languages can be difficult is take for example:

  1.  
  2. def foo (x):
  3.   x.append (1)
  4.   return x + [ 1, 2, 3 ]
  5.  

So what happens here in an abstract point of view you can’t assume anything about this code due to dynamic typing compared to something like

  1.  
  2. def List foo (List x):
  3.   x.append (1)
  4.   return x + [ 1, 2, 3 ]
  5.  

Having storage specifiers insantly makes this set of code much more declaritive and gives rise to many more assumptions able to be made; which in turn gives a compiler more ‘hints’ on what it can do to generate code. Of course in the example above this is just a hypothetical language just to demonstrate the idea. So to implement dynamic typing we have to analyse what it actually is.

Lets take a normal/regular python session:

  1.  
  2. >>> x = 1
  3. >>> x = "string"
  4. >>> y = x
  5. >>> x = 2
  6.  

So what is actually happening now line by line by showing what each identifier is assigned to what data.

  1.  
  2. >>> x = 1                 # x = 1        | y = NULL
  3. >>> x = "string"          # x = "string" | y = NULL
  4. >>> y = x                 # x = "string" | y = "string"
  5. >>>  x = 2                 # x = 2        | y = "string"
  6.  

So why is this actually a problem, traditionly take for example code like:

  1.  
  2. int x = 1
  3. x = 1.5555
  4. x = "string"
  5.  

When a c-compiler would run over that code it would give all manar of warnings about type conversion and invalid types being assigned. But why is this since a compiler will want to generate efficient code it will reserve the space valid for an integer on the stack which on an i386 32bit processor would be 32 bits usualy and would asuse subl $4, %esp to have space on the stack for that integer, but the problem arises if we were to then want to put in data which is greater than the size previously allocated for the given initial data. So you will have overflow and corruption of data. So how can you combat that to make dynamic typing work, the method or approach i have taken for gccpy takes much inspiration in how object orientation works. Every piece of static data give in a program is wraped into a gpy_object_t structure at runtime so in turn every type in gccpy is implemented via a gpy_object_t type, so for example the previous python session could be represented in GIMPLE via something like:

  1.  
  2. gpy_object_t * x = fold_integer (1)
  3. incr_ref_count (x)
  4.  
  5. decr_ref_count (x)
  6. x = fold_string ("string")
  7.  
  8. gpy_object_t * y = x
  9. incr_ref_count (y)
  10.  
  11. x = fold_integer (2)
  12. incr_ref_count (x)
  13.  

The basic idea how dynamic typing is not what an identifier with a specified storage specifier holds its what an identifier points to. So when `x = fold_integer (1)` we should look at what the gpy_object_t structure looks like currently its in many ways similar to how PY_object works in the cpython implemetation but is a little more specific and streamlined to gccpy’s needs.

  1.  
  2. typedef struct gpy_object_t {
  3. enum GPY_OBJECT_T T;
  4.   union {
  5.     gpy_object_state_t * object_state;
  6.     struct gpy_callable__t * call;
  7.     gpy_literal_t * literal;
  8.   } o ;
  9. } gpy_object_t ;
  10.  

This structure is quite open to be used in many areas of how gccpy works but what we are interested in is the:

  1.  
  2. gpy_object_state_t * object_state;
  3.  

This is the part where it stores the static data defined be it an integer or a class defined in the source code.

  1.  
  2. typedef struct gpy_rr_object_state_t {
  3.   char * obj_t_ident;
  4.   signed long ref_count;
  5.   void * self;
  6.   struct gpy_typedef_t * definition;
  7. } gpy_object_state_t ;
  8.  

This structure is whats used to hold the object_state it holds the object type identifier as a string the reference count for the garbage collector the pointer to a structure in memory which is the actual data for example int or FILE * etc, and also a pointer to the objects definition structure. Each object has its own definition and each definition requires several hooks:

  1.  
  2. typedef struct gpy_typedef_t {
  3.   char * identifier;
  4.   size_t builtin_type_size;
  5.   gpy_object_t * (*init_hook)(struct gpy_typedef_t *, gpy_object_t **);
  6.   void (*destroy_hook)(gpy_object_t *);
  7.   void (*print_hook)(gpy_object_t * , FILE *, bool);
  8.   struct gpy_number_prot_t * binary_protocol;
  9.   struct gpy_builtin_method_def_t * methods;
  10. } gpy_typedef_t ;
  11.  

It has the identifier the size of the sturcture of which holds the actual data the initilization hook which returns the object state when you initialize an object the destroy hook for the garbage collector, a print hook for the print keyword to print the data. Now things get more interesting, the binary protocol is whats used to allow for dynamic binary operators so things like:

  1.  
  2. x = 2 + 1.5
  3. concat = "foo" + "bar"
  4.  

Can allow for mixed type binary operations, by having hooks for each type of binary operation be it addition subtraction etc. Finaly there is a table of member methods which allows for dot accesors like:

  1.  
  2. list.append ()
  3. list.index ()
  4.  

As append and index are both member methods to the builtin type List.

by redbrain at May 01, 2011 04:25 AM

Quick Update

Hey all i am sorry for the last post i have many posts drafted to be posted within the next 2-3 weeks where i am going to discuss my project GccPy as there has been alot happening with it recently, i am working on a paper which shows everything about it so far but i want to have some posts demonstrating the basic principles of compilers and in deed creating an Ahead of Time version of Python on top of GCC and how this actually works. I personally find it a pretty cool topic but first i will am just in a bit of rant mood and its about whats happened since my last blog post:

Well anyway i’m currently in an awkward position i feel i may leave university but i will see because its simply causing me so much problems in my day to day life, I’ve got onto Google summer of code 2011 yet again to work on Gccpy with Ian lance Taylor but i may focus a little more on working on the Gcc middle-end to make some of my work a little easier. But the problem i am having at the moment with university is i actually failed all my modules last semester which may sound awful. Esp the one in compiler development i am writing a complaint about this at the moment due to the fact i actually took my own time to create a compiler specificity for this language they developed which works i cant emphasize this enough it actually works and demonstrates an IR properly designed and works well and doesn’t segv if you put in a syntax/grammar error i didnt even have to do this for the module.

I guess it was my own fault where i answered the exam using x86 code and more normal DAG graphs and IR’s to demonstrate things to answer the questions where they wanted this _FAKE_ code and _WIERD_ ideas to demonstrate Lexical Analysis. I failed my Math one but i kind of expected this one because i just didnt care anymore the lectureer just had a problem with me and wouldnt put any work online as i wasnt able to attend for a week or so and just gave me awkard looks when i went to class and was just sooo condecending the whole time to me i tried hard but it was just awful then the other exam concurrent programming where your forced to learn off all these Java constructs to implement monitors thats all fine 100% in all practicals but exam your just forced to learn off meaning less facts and stuff where it really means nothing and all the practicals are only worth 10% of the module.

So yeah didnt go well but i feel very strongly about my compiler development module so i am going to write a complaint about it and send it in, the problem being is i am just made to feel like one of the students who just goes out and doesnt do work. I am so far away from that statement its insane, i am 100x more dedicated and practical than anyone in my university thats why after Gsoc 2011 i have another interview with Google which will be interesting. I am just so increibly sick of feeling useless, i just feel like giving up at the moment. Its destroyed nearly all my confidence recently, if it wasnt for getting Gsoc 2011 for my own project i dont know what i would do sometimes.

Its not just those exams that annoyed me even a few years ago i remember studying months i mean months for an exam and lost by like 5% i was so gobsmacked. Its just got to this stage where absolutly everything i have done in university has just annoyed me so much i cant concentrate at all, when you consider absolutly everything is soooo niche and acedemic its insane in computer science esp in open-source and linux its such a hands on subject. It scares me that everyone in my university couldnt actually design a project and implement any kind of system level project even though they are meant to have studied it. Take the operating systems module is literately take a book and re-wrtie paragraphs of crap down in an exam the exact same went for networking.

Basically i found this comment on a website http://ihateuniversity.com/2004/03/why-i-hate-university-life/:

University seems to suck all the life out of learning. The assignments are meaningless, the lectures are boring and the people are all mindless. I have no time anymore to read a book…a real book, worth reading. I’m too busy with my nose buried in a textbook learning meaningless facts to pass another meaningless test, to earn a meaningless number entitled “grade”.

Sorry for the rant but i just have been made to feel very useless at the moment and personally i just feel if i was to just quit university to persue my gccpy project over summer and have this paper finished and apply to jobs based on this project as it demonstrates everything i know and understand and how i designed it all and implemented it. Also GCC hackers are a very scarce resource so i can even taylor alot of middle end trickery to pop up specific things for a project using plugins etc. Which i think could be a usefull thing for a company to have but i have literly no confidence in my self anymore i in the UK university has become this Class system and if you didnt pass your made to feel like a lesser person. But its kind of irritating i’ve tried to get help from my university but because i do Mathematics and Computer Science there are like zero people who do this course esp my set of modules i choose i get like no help or no one to talk to coupled with the fact my advisor of studies just retired and the new guy doesn’t really know.

The thing that has annoyed me the most i feel almost ashamed of myself to talk to my friends on identi.ca i just need to prove myself and i just dont know what to persue but i know right now i am pretty much miserable when i worked full time for SAP i was happy they offered me a PHd positions for goodness sake. I must be good at something when so few get that as well as Gsoc twice in a row on the same project which i started myself. I’ve set my self the goal of at Oggcamp comming up i will have the Linux outlaws testsuite for Gccpy working which it pretty much is and to demonstrate its awesomeness to everyone i care about. :)

Dont worry i will be posting up from now over the next few weeks much more frequently every time i write a blog post i feel much better about myself. I a lot to offer the world and its time for me to do it.

PS: Sorry for the mountains of spelling errors! xD and i prob wont leave uni its just how i feel i talked some stuff over and feel alot better i just need to stay calm and get though it all xD

by redbrain at May 01, 2011 03:00 AM

April 24, 2011

Jonathan McDowell

onak 0.4.0 released

I don't normally mention the PGP keyserver I've been working on for the past 9 years, but there are a few keyserver related comments I've been meaning to make that prompt me to do so this time.

onak is the keyserver powering the.earth.li (AKA wwwkeys.uk.pgp.net). Back in February I finally enabled hkps (HKP over SSL) access to it as I promised dkg I would do back at DebConf10. I also turned on IPv6.

Most of the active keyservers out there are running SKS. I think there might be a few OpenPKSD instances as well. If you're running SKS please ensure that you have at least one address in your mailsync file, so that you send key updates to the non SKS keyservers out there - it seems that SKS requires the receiving keyserver to send out updates via email, rather than each server sending out any updates it processes to its mailsync peers. Feel free to add pgp-public-keys at earth.li - no need to contact me to do so (but you can drop me a line if you want me to send you mail updates back).

Also in the past there was a pgp-keyserver-folk mailing list, originally on flame.org, then on alt.org. Both of these have been dead for a while. I created a local pgp-keyserver-folk some time ago, but never publicised it. I believe the SKS lists are fairly active, but limited to that community, so it would be nice to have somewhere that was keyserver agnostic that admins could talk to each other.

Anyway. onak 0.4.0. Largely fixes to keyd, which is a backend daemon that handles talking to the key database. This is particularly useful for large/busy keyservers. Also a couple of fixes that make the db4 backend a lot more reliable (especially with queries that return lots of results). And various other minor cleanups. If you're one of the 3 people running it you probably want to upgrade; updated packages have already been uploaded to Debian unstable.

by Jonathan McDowell at April 24, 2011 06:56 AM

April 17, 2011

Jonathan McDowell

Why Linux? (Part 7: Support)

(This is part of a series of posts on Why Linux?)

This is probably a non-obvious reason to run Linux to most people. One of the complaints I've heard in the past is the lack of support for Linux. It's not really relevant to running it on a work desktop (where support is presumably from some central IT organisation), but I believe it's a red herring. Support in the Free software world can exceed that in the proprietary by an impressive margin. And that can turn out to be useful at work, even if you do suppose the existence of central IT.

The support I've received for Linux and applications under it has been, on numerous occasions, excellent in a way I feel I could never expect from the commercial software world. And when it isn't, I have the choice of whomever I want to try and fix my problems, rather than being stuck with no options.

I have found that if I am polite, and provide useful information, and patient, I can talk directly to the developers who make the software I use. If I have a patch they will often take it from me, or use it as a basis for the final fix. If they are no longer available, or too busy, then because I have the source I can find someone else to look at the problem, or do so myself.

The chances of most large proprietary software companies giving me the time of day is low. I don't understand why small businesses think that Windows is a safer choice due to being able to get support from Microsoft.

Again using experience gained at Black Cat, at one point we had a problem with IPv6 routes being updated. Signs pointed to Quagga, Simon collected relevant information and got in contact with the Quagga devs. They investigated, realised it wasn't a problem with their code, and then proceeded to find the issue in the Linux kernel, produce the fix and pass it upstream. Within hours of us reporting the problem. I'll accept that's an exceptional response that can be matched within the proprietary software world, but not without a hefty support contract and I doubt you would have got a response other than "Not our fault, talk to the other supplier", or maybe a workaround at best.

More recently, I had a conversation about Linux and discard support, with one of the people who'd worked on it. Very interesting from my PoV, useful to my work (I ended up fixing something in our code base that led to the Linux support Just Working with our product) and I believe was useful to that developer too, in terms of providing some insight to the other side of the problem. I don't get that kind of access to proprietary software developers - while it could be argued that I know a lot of Free software people, I also know a lot of other programmers and they're just not able to be so open about things, so both sides lose out.

Or my new laptop's ethernet wasn't supported by the kernel in squeeze. I filed a bug requesting the driver be added (and pointing to the patch). The week I wrote the first draft of this article I saw confirmation that this had been done, and will be part of the final squeeze release. I think that's pretty impressive. (Thanks, Ben.)

by Jonathan McDowell at April 17, 2011 06:48 AM

April 16, 2011

Paul Gregg

The O2 Joggler - A first hack.

devicev2.JPG
If you were not aware - O2 last week reduced the price of the O2 Joggler from £149.99 to £99.99 to £49.99.  Nothing remarkable in price reductions, however what is remarkable is what you actually get for your money.

The O2 Joggler is a silent 7" touchscreen device with Intel Atom Z520 running at 1.3Ghz, 512Mb ram, 1GB internal flash storage with additional storage available via an external USB port. What makes the device really exciting is that it also has a 1GB ethernet (Realtec 8168) and Wifi.

Looking at that - I know you're all thinking "linux box" - but conveniently, the default operating system on it is based on Ubuntu 8.04 and busybox, The frontend is a custom flash driven UI developed by OpenPeak (makers of the Jogger which is rebadged by O2).

There are plenty of clever individuals over at http://hackthejoggler.freeforums.org/and in the #mer channel on freenode who are working to allow the Joggler to run other Operating Systems such as Android, Ubuntu Netbook Edition, MID, even Windows and OSX.

However, the standard OS supplied is also pretty powerful and allows significant customisation.  You can enable telnet just by turning it on with a custom USB stick plugged in. To do some of the things I'll be describing here you will need to have started with that.

Once you can telnet in, the world opens up and you can do lots of things that you would expect* to be able to do in a linux system. (* except run a web browser.... at this time - we don't have web access with the stock OS due to the custom flash GUI interface.)

Lets install some useful utilities, how about perl, terminfo, irc clients, bit torrent, rsync, ssh/scp ?   Yes, I know what you're thinking - overnight silent downloads - no need to leave PC on... nice...

I've built several of these utilities with installation instructions and uploaded them over here: 
  http://pgregg.com/projects/joggler/

Feel free to download, examine, install etc.  Read the README on the download page - it explains how to do it. Most of the packs include an install.sh script that will provide an installation safety net - it won't overwrite existing files or libraries.

Usual disclaimers apply - you try these applications at your own risk. I accept no responsibility if you manage to brick, fry or otherwise trash your joggler.

Comments, suggestions for other applications are always welcome.

Update: Thanks to NP - seems I was a little too brutal with the library stripping to keep the download sizes small and I missed some required libraries (that I mistakenly thought were in the standard Joggler distro).   I have rebuilt the following packages as they were missing some libs: rtorrent, rsync, sudo,ssh
The screen package has been rebuilt too to add one final tweak (to the installer script) so it can be used by non-root users - the only difference you need to do is run the command: chmod 666 /dev/ptmp /dev/tty

by Paul Gregg at April 16, 2011 04:05 PM

April 11, 2011

Paul Gregg

What 16TB raw space looks like at home

I've been looking for some home backup solutions over the past couple of months. This has led me down both the do-it-yourself route and buying a ready-made solution.

One of my requirements was that I wanted the solution to be more than just storage - otherwise I would have purchased a straight NAS box from the likes of Qnap, Netgear or if feeling rich Drobo. Most of these dedicated NAS boxes can be "rooted" to allow ssh access , however their CPUs are generally underpowered for general purpose use.

Other requirements were that I wanted a reasonably small form factor and to be able to use at least 4 SATA hard drives, preferably with hot swap ability. Hardware raid was not a requirement because I intended on using a Linux distribution with mdadm software raid.

In the end, I ended up building two boxes.
The first, a home build, based on the CFI A7879 chassis CFI_A7879_1.jpgwith a Gigabyte GA-D525TUD Dual Core Atom Mini-ITX Board.
GA-D525TUD.jpg

The second was a off-the-shelf HP ProLiant Microserver which, to be brutally honest, was because HP were offering £100 cashback deal on it. This made the server much cheaper than you could possibly build yourself from components.
HP_Microserver.jpg
I added 4GB ram to each box (total 5GB in the HP box because it comes with 1GB).

The CFI boot drive is a 8GB (30MB/sec) CompactFlash card mounted as an IDE drive. The HP boot drive is a 16GB Sandisk Cruzer USB stick.

Finally added 4 x 2TB Samsung F4EG HD204UI drives to each box.

The CFI box has 8TB in RAID5 providing 5.4TB usable. The HP has 8TB in RAID6 providing 3.6TB usable space.

If there is more interest, I'll write up the build process is more detail with pictures.

For now - here are some shots of my utility shelf.

IMG_20110411_173250.jpgIMG_20110411_173740.jpg


by Paul Gregg at April 11, 2011 06:44 PM

March 17, 2011

Marty Pauley

My room, after the quake

my room, after the quake

Thankfully, that is exactly how it looked before the quake. Nothing was damaged.

by Marty at March 17, 2011 02:41 PM

March 12, 2011

Jonathan McDowell

Another 2 wheels

It's my birthday, so a week ago I bought myself a present:

Red Brompton M3R folded

The office is 4.5 miles from the BART station, so up until now I've been taking a bus. Unfortunately the timings aren't that frequent (every 45-60 minutes). Plus I haven't been doing any exercise since I moved out here. Now it seems to be getting drier I figured it was time to sort out a bike. I wanted something flexible, and have heard nothing but good things from the Brompton owners I know, so that's what I ended up with. I'm very happy with it; despite my lack of recent exercise it's pretty easy to ride. I've actually found it doesn't take any longer than taking the bus, and is sometimes quicker, because I avoid having all of the waiting around for it.

I bought it from Warm Planet Bikes, who were incredibly helpful. They had a selection in store that they let me try (and quite a few other models of folding bikes too) and when I made my decision it turned out they could do the customizations I wanted in shop. So rather than me having to order it and wait a month I was able to cycle away that same evening! Full marks to Matt for staying late to sort me out (plus he's a Brompton owner too).

Red Brompton M3R

by Jonathan McDowell at March 12, 2011 08:45 PM

February 28, 2011

Jonathan McDowell

Notes on moving to America

I've been out here for 6 months now. At the point in time I was coming out I was pointed at Andrew Pollock's On bootstrapping oneself in the US. I figure some extra data may be useful for anyone considering the same. I moved from the UK rather than Australia.

Banking

I sorted out my US banking long before I ever moved here; in fact I kicked the process off shortly after I accepted the move offer. Matthew had recommended the HSBC approach, so I did that. This meant when I arrived I had a credit card, debit card and check book. They also allow me to do really easy online transfers between my US and UK accounts.

Mobile phone

My mobile phone was something else that was dealt with before the move. I bought a Simple Mobile SIM off eBay. I thought I'd end up moving to a contract once I had a credit record here, but actually the $60/month unlimited tariff seems to be fairly reasonable. Their customer service leaves a lot to be desired, but I've sadly come to expect that from phone companies. I've got a Google Voice account which is the number I've been giving out, so it's easily for me to switch providers (or redirect things to a VOIP setup for when I'm back in the UK, but I've got a writeup to do for that at a later point in time).

Finding somewhere to live

One of my concerns was that it would be hard to find somewhere to live at short notice without any credit history or SSN. This turned out to be ill founded. Both of the managed apartment complexes I looked at were ok with the fact I'd just moved to the country and seemed used to such a setup. The place I went with is privately leased and was a bit more wary, but after a conversation with my US manager (who'd managed me even when I was in the UK) it was fine.

Social Security Number

AKA existing as an entity as far as the US is concern. I was told to wait at least 10 working days after entry before even applying for this, or I wouldn't be in the system and it could cause delays. I did so and the card turned up within about a week (I had been told up to 2 weeks). Which was good, because work were having problems figuring out how to pay me without one.

You do seem to need the SSN for everything. The only times I can remember needing my National Insurance number in the UK is for new jobs and my E111 application.

Driving licence

I haven't ended up buying a car here; I pretty much don't need one most of the time and I've signed up to ZipCar for easy short term rentals - they're happy to take a UK licence for sign up. However I figured getting a licence here was a good idea in case I did decide to get a car, and even just for ID (I kept having to point people at the DOB on my UK licence - everywhere here seems to card). Applying for a licence ideally relies an SSN, so I did so a few days after I'd got that. I did the car + motorbike written tests and got my learner's permit. I applied for the car theory test the same day, but the first available slot was about 6 weeks later. During this period I did the CMSP basic RiderCourse, which meant that when I passed the car test I was also fully entitled to ride a motorbike here.

Other useful notes

As I live in the Bay Area I got myself a ClipperCard - it's like Oyster except without the clever discounts. Works on more agencies though and helps avoid having to sort out change. For broadband I went with Sonic.net - I'm in their ADSL2 coverage area so I'm getting a reasonable 17Mb/s connection. The other options were AT&T ADSL (slower) or Comcast cable (evil). I've had zero problems with Sonic; It Just Works.

Also I sort of ended up with a trial run thanks to DebConf10 being in New York. Due to the way timings worked out this took place only a few weeks before my move to SF was scheduled. My banking and phone were already in place by this point, so it allowed me to check both were working ok. They were, and I didn't really expect them not to be, but it was a nice safety net to have for the move proper.

Overall the main issue I had was that a lot of things were dependant on other things; get the SSN, get a learner's permit, apply for the practical test, wait for the licence to actually turn up etc. It probably took over 3 months for everything to actually happen and come through in the post. I can tell when I actually started to exist in the system because Capital One being junk mailing me about whether I want a credit card with them...

by Jonathan McDowell at February 28, 2011 06:46 AM

February 08, 2011

Jonathan McDowell

My Squeeze upgrade notes

I did my first upgrade of a lenny box to squeeze today; a test server in work. All went pretty smoothly but I had a handful of things I had to frob manually that I thought I'd write up here:

  • collectd SNMP plugin needs MIBs or it won't start: installed snmp-mibs-downloader from non-free
  • autofs starts before nis (#470573): added ypbind to the Required-Start: line in /etc/init.d/autofs and re-ran insserv
  • NFS automounts now using NFSv4 instead of v3 and user/group mapping setting everything to nobody: Set NEED_IDMAPD=yes in /etc/default/nfs-common and ensure Domain in /etc/idmapd.conf is set to the correct domain name (look in /var/log/daemon.log for lines from rpc.idmapd saying "does not map into domain" to find out what this should be if you don't know).

I think that's pretty smooth overall; kudos to all those involved. I've a few more boxes to upgrade, but they're all more likely to have people complaining at me if there are hiccups so they'll have to wait until I have a suitable block of time set aside.

by Jonathan McDowell at February 08, 2011 06:00 AM

February 07, 2011

Jonathan McDowell

Why Linux? (Part 6: Freedom)

(This is part of a series of posts on Why Linux?)

I think of myself as reasonably pragmatic in my approach to Free/Open Source software. I don't get worked up over which set of language people want to use. I use devices that require binary firmware to be downloaded to them (because just because I can't see it doesn't mean it doesn't exist). I have non-free in my sources.list.

And yet, talking to other Linux users these days, I realize I'm much more of a Freedom nut job than average. I want the source, be it for a driver, a minor widget, or a full app. I don't buy nVidia. I will sacrifice a degree of functionality in order to get Free. And while I think WINE is an excellent piece of software, I think the best end result is that it's no longer necessary, not that it's a perfect implementation of the ABI.

How does any of this help justify my use of Linux in the work place? As previously mentioned, I'm a developer. Most developers don't operate in a vacuum; they have to inter-operate with other ecosystems. And usually somewhere along the line there's a failure to document exactly how something is handled, or an ambiguity about what exact choice might be taken. If I have access to the source then I can check that out for myself. If I don't, I have to guess. As an example, a long time ago I was involved in writing a serial console driver for QNX. There came a point where the behaviour wasn't quite as we'd expect. Although the organisation had a license for the source, I wasn't allowed to look at it. Instead I had to come up with a series of suitable questions that someone who could look at the source could answer without violating any NDAs. If I'd been able to look at the source directly we'd have all saved a lot of time. And that's an example where someone could look at the source, rather than having to make a bunch of guesses and instrument tests to see which was right.

Access to the Linux source has helped me in other commercial contexts too. At Black Cat we were able to take advantage of patches like grsecurity in order to tighten up shell account boxes. I wrote the IPv6 support for l2tpns, because we had access to the source and could. I've been able to look at the source to understand exactly what SCSI responses are sent in certain circumstances too (or understand exactly what the error that a user land test program was getting back meant).

Also I'm a big believe in Linus' Law. I do think that good Free software is much better than proprietary software (there's some really bad Free software out there though, I'm not disputing that). The fact that smart people can look at it and scratch whatever their itch is means that we get a gradual process of improvement that can't be ignored. Equally as long as someone has an interest in the software, end users can't be left high and dry by organisations abandoning still users applications. I think that should be a powerful driver to business to look towards Free software.

(Before my more astute readers point it out; yes, I am employed writing non-free software. See the first sentence. One day I'll find a job working on Free software that ticks enough of the other boxes to be viable.)

by Jonathan McDowell at February 07, 2011 01:50 AM

January 28, 2011

Jonathan McDowell

We fear undocumented change

I love revision control. I love the ability to track changes over time, whether that be to see why I changed something in the past, or to see why a particular thing has stopped working, or to see if a particular thing is fixed in a more recent version than the one I'm using.

However I have a few opinions about the use of revision control that are obviously not shared by other people. Here are a few of them:

  • One change per changeset.

    The only argument I can see against this is laziness. Changesets are cheap. Checking in multiple things in a single go makes it hard to work out exactly which piece of code fixes which problem. I'm fine with a big initial drops of code if logically it all needs to go together, but changesets that bundle up half a dozen different fixes piss me off.

  • Descriptive changeset comments.

    Don't make me guess what you changed. Tell me. Bug numbers are not sufficient (though including them is really helpful).

  • Comments in the changeset, not per file.

    I've only seen this with BitKeeper; you can have per file comments and then an overall changeset comment. At first I thought this was quite neat, because you can explain each part of a change. Now it just annoys me, because I want the relevant detail in one place rather than having to drill down to a per file level to figure out what's going on.

  • The tree should always compile.

    There are people I respect who are all for checking in all the time throughout development no matter what the status. I have to disagree, at least for anything that's available to other people. The tree should always compile. This avoids pissing off your coworkers (especially if they're in a different timezone) and means you can do things like git bisect more easily. Plus it shows you've at least done minimal testing.

  • Don't hide your tree.

    I like centralised locations for master trees. It means I can make an educated guess about where to look first for information about changes. Trees that live in obscure network shares or, worse, someone's home directory aren't helpful. While I may not always agree with the choice of VCS for the centralised service as long as it's actually fit for purpose I think it makes much more sense to use it than go off on a separate path that's less obvious for others to find.

by Jonathan McDowell at January 28, 2011 05:42 AM

January 20, 2011

Paul Gregg

Experts Exchange, Google, AllFAQ.org and misappropriation of copyright.

Opinion Piece

I was googling (as a verb) and came across a rather peculiar message at the bottom of Google's search results:

In response to a complaint we received under the US Digital Millennium Copyright Act, we have removed 1 result(s) from this page. If you wish, you may read the DMCA complaint that caused the removal(s) at ChillingEffects.org.

Interesting - never saw that before!

Following the link to Chilling Effects shows a copy of the complaint which has some interesting text in it.

Experts-Exchange makes a detailed itemisation of their registered Copyrights, none of which I find objectionable, however, the complaint then goes on to list several issues against the Defendant, the first and most egregious of which is:

a direct "copy and paste job" lifting the content of Plaintiff's question and answer forums and inserting them onto AllFAQ's website. AllFAQ's question and "Solutions" are verbatim to Experts-Exchange's questions and "Accepted Solutions;"

From this Experts Exchange is accusing allfaq.org of Copyright infringement against Experts Exchange owned Copyright.

At first glance, this might seem fully justified - but look at what they are claiming copyright on.  Experts Exchange are assuming copyright ownership of content that you, and I, and all their users create by asking and answering questions on their web site.

I looked at Experts Exchange's Terms of Use and could not find any agreement that users were assigning their rights and copyrights to Experts Exchange. The relevant paragraph is:

"5. Content License

EXPERTS EXCHANGE enables Members to post problems or questions, proposed solutions or answers, information, comments and other content ("Your Content") to its Site. When you post Your Content to the Site, you understand and agree that Your Content can be viewed and used by other Members who visit the Site with or without attribution.

You represent and warrant that you own or otherwise control all of the rights to Your Content and that use of Your Content by EXPERTS EXCHANGE and its affiliates will not infringe upon or violate the rights of any third party. Before you use EXPERTS EXCHANGE Services to post any information or content that is protected by intellectual property laws, you shall have acquired the legal right to do so from the owner or authorized licensee of such information or content.

By registering with EXPERTS EXCHANGE and posting Your Content on the Site, you hereby: (i) grant EXPERTS EXCHANGE a non-exclusive, perpetual, irrevocable, unrestricted, transferable, fully sub-licensable, worldwide, royalty-free license to use, distribute, display, reproduce, perform, modify, adapt, publish, translate and create derivative works from Your Content in any form, media or technology, whether now-known or hereafter developed; (ii) grant EXPERTS EXCHANGE and its affiliates and sub-licensees the right to use the Member Name that you submit with Your Content for purposes of attribution; (iii) authorize EXPERTS EXCHANGE to assert and prosecute claims against any third-party making any unauthorized use of Your Content, including any use that violates this User Agreement ("Third-Party Claims"); and (iv) appoint EXPERTS EXCHANGE as your attorney-in-fact for the purpose of asserting and prosecuting Third-Party Claims. If you do not wish to have Your Content attributed to you, then you must notify EXPERTS EXCHANGE at customer_service@experts-exchange.com.


Experts Exchange acknowledges that the copyright belongs to the author as "Your Content" and that by posting you are granting them extensive licenses to use that content. You are not assigning your copyright to Experts Exchange.

Now I am glad that their ToU does not attempt to wrest copyright ownership from its rightful owner, that is right and proper.

allfaq.org is demonstrably guilty of screen-scraping the Experts Exchange web site and I do not condone those actions at all. However, looking at what they copied - it was the Title, Question and Accepted Solution text - the copyright of 100% of that is with the original authors, and not Experts Exchange.

Thus, in my opinion, this complaint against allfaq.org is without merit and should be dismissed.

It would also appear that Experts Exchange has also abused the provisions of the DMCA in forcing Google to remove the content. Google should restore the links.

And finally, Experts Exchange should implement some technical measures to prevent automated scraping. Find better ways to improve your search ranking, and if your competition beats you don't ask your own members how to do better SEO; be told by them that you have no Copyright Claims on the content; and then proceed to file DMCA take down notices when you know you have no (copy)right.




by Paul Gregg at January 20, 2011 02:50 PM

January 17, 2011

Simon McCartney

Apple Mac Toolbox

Following up on my recent post on the engineers toobox, I’ve just rebuilt my Apple MacBook (newer, bigger hard disk was the perfect opportunity for a fresh Snow Leopard install and to fix some annoying iPhoto index & thumbnail corruption), so here’s my list of essentials for my MacBook, in no particular order:

  • Evernote
  • SpanningSync
  • Dropbox
  • Last.fm
  • Xmarks for Safari
  • Xmarks for Firefox
  • Panic Coda
  • Thunderbird 3.x
  • Adium
  • VMWare Fusion
  • iPhoto
  • iMovie
  • QuickSilver
  • Microsoft Office
  • Google Chrome
  • Flickr Uploader
  • Skype
  • Google Picasa
  • Get iPlayer Automator
  • Cyberduck
  • MacVim
  • Spotify
  • iSquint
  • AudioHub
  • VisualHub
  • SuperSync
  • TweetDeck
  • ClickToFlash
  • Growl

by simonm at January 17, 2011 01:09 PM

January 03, 2011

Philip Herron

Frustration

Happy new year everyone I hope your all well and having a nice fresh start. I am going through a bit of a rough patch this last few months its been fairly difficult to deal with things, and I’ve found myself going though some depression because of it all. Mainly because of University this is my final year i just wanted to finish it so i can go out and work properly again but the sheer frustration i have  with my university is nearly destroying me. Its nothing to do with the cliché of Tuition fee’s or anything like that its with the Lectures the modules and content being taught and how its being taught.

So for example i thought i would go and take the Compiler Module there last  semester, found out the lecturer has absolutely no clue. I mean i now have redbrain@gcc.gnu.org i post _loads_ of help to   bison-help gcc-help comp.compilers am a project lead on the python front-end for gcc and am working in my own ideas for front and middle end interaction for gcc. I’d like to think i know how to build   compiler since i have write an  interpreter for a dynamic language I’ve designed i’ve write a compiler from scratch for a basic language called Mod that outputs i386 code has  code ready to handle  optimisations a well formed IR called mod-dot. Then i start this module we get given an absolutely terrible compiler for this Mod language written in Java that outputs some insane weird   instruction set  that cant be assembled or linked… And the laxer and parser code is unbelievably disgusting and is written clearly by someone who doesn’t know how to build a compiler along with the  fact our lecturer thinks you _need_ EBNF to handle this very basic dialect of modular we call mod. So i tough yeah i will write my own from scratch and i did its over at code.redbrain.co.uk. Its 10x  clearer cleaner and easier to understand, and remember this is a lecturer trying to teach compiler development not only was the parser code hard and very ugly they never go into anything like DFA or  LR or LALR or decent regular expressions for the lexer. Its this hugely protracted view of how a compiler could work and in the end teaches nothing but scares students. And then the backend to this  compiler was truly awful it has pretty much Zero IR structure in it using nothing but statics to in a hackish way get the job done. We had 3 assignments to extend this compiler i pretty much ignored  them and just worked at my own since it did the job 10x better and more clearly and easier and it output code you could run! Anyone onto my Mathematics module, all i can say is thank flip this is my  last mathematics module i will _ever_ do i my life i mean when i started my Degree in Mathematics and Computer Science i liked Math in high school it was the only subject i was good at i mean i  enjoyed solving the problems. But in University all i have done is work at pretty much utterly random topic after topic with little or no coherence between anything so you literal would learn off module  for the exam forget everything move onto the next one. And i will _never_ use anything have learned from it again, i was hoping with mathematics i would learn decent logic and problem solving skills but i have learnt nothing. all i want to do is erase the name Chebsev the Russian mathematician out of my brain for the utterly random crap of his i have had to learn. I mean i try going to lectures but i usually don’t bother any-more it depresses me so much i don’t sleep at all these days the its bothered me so much to the fact i struggle to get motivated to work on my personal gcc stuff.

I mean what do people want degree’s for. I mean i am not stupid far from it i just want a life and at the moment i don’t have one. I mean i have been contacted by Google and Cisco for interviews for which i didn’t even apply for!!! And all of that has been down to working in open source with Gcc and absolutely _nothing_ to do with my degree i seriously doubt i will _ever_ use anything of my degree ever again.

Then my 3rd module at the moment is concurrent programming it was ok but seriously the lecturers at my uni need to grow up absolutely everything in my uni in the computer science dept is 20% practical at max then 80% theory. So i mean wtf people come out not able to program or know how anything works.

I know people in my computer science classes don’t know what ram is what hard drives look like and how to even build a simple desktop computer… Then even worse everything is windows the word Unix doesn’t get edge way unless its MacOS then programming languages Jezz don’t get me started. Everyone has this knee jerk reaction to the word C and start arguing like a gaggle of geese. I mean C is my fav language its simple it forces people to understand their computer, but in uni is Java or nothing and to be honest Java is absolutly killing university graduates creating drones who have absolutly no idea how a computer works or how to build software.

If universities were to teach C along side a decent i386 assembler to learn an instruction set then into a project each year of university students would get experience and get a portfolio of work and abilities and could do a project in anything that would interest them and if they learn C they are _not_ limited into what they could do since if you learn Java you will find moving to something else a complete struggle for a long time since you learn so many bad habits.

Right now i have exams coming up which is what i hate we do out winter semester then have exams after Christmas it makes you not able to enjoy the holiday what so ever but the thing that kills me the most i know i am better at anyone in my compiler module there only are like 15 of us and not one of them barley handed in their assignment but i know some ass kisser will get like 90% in the module and i will come out with like %50 making me look like an ass since i am redbrain@gcc.gnu.org but the problem is if you look at the exam is nothing but these utterly random questions directly related to this Java compiler they produced that is just a mess. I mean the worst part is those people will be able to focus and revise for it but i cant i have always have to do 90% revision on my math modules and like 1 nights revision for computer science Math has just been so incredibly difficult simply because is incredibly random and pointless. Plus the lecture i had for my math module had his head so far up his ass its been insane he has not even once been remotly helpful to me putting assignments online or anything i have had so many assignments to do this semester i was stuggling to keep my head above water and because i do 2 subjects unlike most people i am the only person in my situation and i get absolutely no help and there is absolutely no standard across the board.

I really don’t understand why people put so much faith in degrees when i graduate i will come out with a plethora of open source experience and actual code people can look at an peruse which many people already do use my work as a reference in the real world.

And thing is i just want to be free of this degree its really killing me karma at the moment i just want to be able to rest properly. I am so on edge and i really don’t mix well with people in my class most really don’t care about a computers more into parting and just revising crap for exams and really have zero understanding of real world applications.

Yeah so that leads me into my concurrent programming module i mean it started off ok but i mean it was sooo java centric it was silly in how you can program monitors etc but i mean still it was so Java centric that to reuse what he was doing outside of it would be difficult to say the least so basically i was crap then the last part of the module which makes up one third of it was to do with some dudes PHD project this super niche idea of modelling concurrent processes which in the end was just finite state machines but just retarded let me find it http://www.doc.ic.ac.uk/~jnm/book/ i mean this book was just a heap of crap academics are ruining software i mean they absolutely have no clue outside of their super niche world absolutely nothing in there is helpful to anyone outside of Java land.

I mean at university you should be learning more general skills and abilities to be able to adapt and not be sand-boxed into these real niches where you cant escape.

I always said to myself i don’t want to blame university for everything that’s why i have done so much of my own work and projects and open source because then i actually have work people already use and can see and judge me based on that i just hope when i get out of here people will judge me based on that not my degree because at this stage i could have got a 1st but my marks are at 2:1 2:2 ish since the maths modules kill me so much since i do half a maths degree and half a computer science degree its not meshed into one thing. Right now all i want is to get a 3rd do min work on my degree to keep my self happy because right now i am just so depressed i cant sleep properly and it keeps making me sick.

I am just happy i have my friends and keeping things into perspective the odd time is nice since i have been out of routine not on identi.ca that much not keeping up with Linux outlaws which i really miss and i really miss my Linux outlaws friends. One of the happiest times of my life was in Liverpool with everyone i hope your all doing well sorry for this super rant i just really needed to get this down on paper to let it all out so i can go for a walk I’m feeling a lot better now.

PS: sorry for grammar and spelling mistakes i just needed to get this all off my chest i have some cool things to show in the next while after this few weeks are over me.

by redbrain at January 03, 2011 03:32 PM

December 30, 2010

Jonathan McDowell

Why Linux? (Part 5: Flexibility)

(This is part of a series of posts on Why Linux?)

I find Linux more flexible. Maybe that's the familiarity showing, maybe it's about the package management, but it's a powerful reason for me to use it.

For example, a couple of years ago I wanted to try out some iSCSI stuff against a SAN. Of course I have test boxes available I can do this on, but this was just to try out a few bits and pieces rather than anything more concrete. So I installed open-iscsi on my desktop and was able to merrily do the tests I wanted with very little additional work.

Or I wanted to try out some BitKeeper to git conversion work recently. I wasn't sure how much resource it would take on a build server, and didn't want to tie things up there. So I ran it on my desktop overnight, where I could easily setup the appropriate environment and wouldn't impact on anyone else's resources.

Problems talking to dodgy hardware? Linux is much better about giving you some idea what's going on, without needing to install extra software. I had a workmate grappling with an old USB music player recently; hooking it up to her Windows laptop wasn't providing a lot of joy so I attached it to my Linux box and was able to see that it did identify ok, but was disconnecting randomly at times too.

Want to script querying an AD server for the current employee list and displaying who's joined and who's left since the last time you did so? I found that easy enough with the common Linux LDAP tools. I'm sure it's doable under Windows too, but I'm not sure it would be quite so simple. For bonus points add graphviz into the mix for automatic organisation charts (modulo accuracy of the AD data).

This flexibility is something that helps me do my job. Sure, as I mentioned above I do have access to test boxes that I can use for this, but being able to do it on my desktop can be useful - for example if I'm offline, or on a slow network connection, or just geographically distant from my test machines so network latency is higher than I'd like.

(Also, it's something that makes a Linux box a really great test box. I'm lucky in that I have a mix of OSes available to me for testing, but the one that I use most often is the Debian box. Much easier to get and install decent diagnosis tools for it that can give me packet level dumps, or do really odd stuff that turns out to be really useful.)

by Jonathan McDowell at December 30, 2010 11:20 AM

December 22, 2010

Jonathan McDowell

Why Linux? (Part 4: Package Management)

(This is part of a series of posts on Why Linux?)

I've run a number of distros in my time. I ended up on Debian near the end of 1999, and part of the drive for that was the number of packages available in one centralised location. Decent package management is a definite strength of Linux (or FreeBSD) over proprietary operating systems. It derives from the freedom aspect, but means you can end up with one source for all (or most) of your software, that's compiled against the same set of libraries, with one way to track what owns what.

This may not seem like a big thing, especially if you're a hobbyist or are coming from a Windows background. Reinstalling is often seen as a necessary regular requirement. Personally I've got better things to do with my time. If I want to try out a piece of software I want to be able to install it safe in the knowledge I know exactly what files it owns and where there are. And I want it to be able to tell me what other common components it needs that I might not already have. Then if I decide it's not for me I can cleanly remove it and anything else it pulled in that I no longer need.

Don't underestimate this. This is useful on all of my machines. I can query the version number of everything installed. I can check for updates with one command (no need for every piece of installed software to have its own updater implementation). Software can share libraries correctly rather than stashing their own private copies, meaning I get bug fixes and security updates. (Yes, sometimes authors bundle even in the Linux world. Stop it.)

I'm a developer. I tend to interact with a lot of different systems, of different types. It's really handy to have access to a wide range of tools to help me with that, know that there's legally no problem with me installing them, be able to do so with a single command and, should they turn out to be unsuitable, know I can cleanly remove them with another single command. This is a definite win in the work context.

Equally I've been a sysadmin for multiple machines at once. Being able to login to each of them and check that everything is up to date is damn handy. Being able to easily install software for customers tends to make you popular too. And being able to rebuild boxes (or build additional boxes to share load) with the same setup is a lot easier with a decent package manager too.

And, to pre-empt any responses about how a lot of this is possible under, say, Windows, yes, it is. I've spent some time in the past building packages for commercial deployment using Novadigm's Radia tool. I'm aware that Windows integral package management has also got better over time. I still think dpkg/apt (or rpm/yum) is far more powerful. And, for the end user, mostly easier as well - distros are building pre-prepared packages for you, rather than you having to do it yourself like with Radia.

by Jonathan McDowell at December 22, 2010 02:20 AM

December 20, 2010

Jonathan McDowell

Contract free phones are the way forward

Russell complains about locked down phones and horrible telcos, in particular about not getting a discount on your monthly contract if you don't get a phone with it.

This hasn't been my experience, either in the UK or since I moved to the US. In the UK I ended up on an O2 Simplicity (month-by-month) plan which provided more minutes, SMSes and data allowance that I needed for £20/month (note that I only use the data for the phone, I didn't tether it to my laptop). Originally I chose this because I wasn't sure about coverage where I lived (that's why I was changing provider), but it turned out to be a pretty good deal, saving me at least £10/month over a contract that I'd have been tied into. When the G1 was launched I wasn't interested in moving to T-Mobile, who I knew had no 3G coverage outside of Belfast, so I ended up with one off eBay (received as a gift) and kept my O2 contract.

When I moved to the US I signed up to Simple Mobile mainly because I could get a SIM from eBay before I left the UK, and it was PAYG (so the fact I'd no credit record didn't matter) but still included unlimited voice/SMS/data. Significantly more expensive at $60/month than I was used to paying in the UK, but seemed to be the going rate even for a contract.

Then the G2 launched back in October. I resisted for 2 or 3 weeks, then decided it had to be mine. The G1's battery was even worse than it had been (to be fair it had lasted 2 years), and although Cyanogen provided Android 2.2 the hardware isn't really up to it. I decided to go with T-Mobile; Simple Mobile use their network, so I knew the coverage would be fine, and I figured a contract was probably a good way to help get a credit record here.

Except, the pricing was a bit weird. $200 for the phone with a 2 year $80/month contract or $500 for the phone with an identical contract but no tie in and $60/month. Er, what? I pay up front and I save $180 and I can walk away whenever I want? Ok.

As it turned out this was the smart choice. Firstly $60/month means $60/month plus taxes[0], so I was paying more than I paid Simple Mobile. I figured I could bear that for a few months to get the credit history, plus the free network unlock after 3 months. Except then it became clear that international SMS wasn't included in the unlimited SMS (it is with Simple). Most of my SMS is international. Now, T-Mobile have a $5/month bolt on to cover that, but not if you're on their flexpay scheme because they found themselves unable to verify your SSN. So I cancelled the contract after the first month and moved back to Simple. I didn't even need to unlock the phone due to the fact it's the same network (though I have now in preparation for my trip back to the UK over Christmas). Surprisingly T-Mobile didn't try and keep me by sorting out the international SMS bolt on. I guess US mobile customers are used to being screwed over (certainly the pricing suggests that).

Er, sorry, that turned into a bit of a T-Mobile rant. My original point was that all of my recent mobile contracts have been month by month, not involved a subsidised phone, and saved me money over being tied in. And even if they hadn't my experiences with the flexibility offered by not being tied in (worries about coverage, discovering the deal isn't as good as you thought) mean that I'm pretty much convinced that contract-free is the way to go anyway.

[0] Dear America, for all your complaints about VAT it's not really a lot different from sales tax and at least the prices in shops/online actually include it. Also it's the same everywhere in the country.

by Jonathan McDowell at December 20, 2010 02:09 AM

December 18, 2010

Jonathan McDowell

Why Linux? (Part 3: It's cheap)

(This is part of a series of posts on Why Linux?)

Linux, to me as an end user, is cheap. Even taking into account the fact most PCs come with a Windows licence included it's still cheaper for me to run Linux. I paid Steve minimal amounts for my first set of Debian install CDs. These days I can burn my own netinst CDs and pull the rest over the internet. I legally have access to a tremendous range of excellent software, for nothing. All the apps I need are available without having to shell out more. How is that not awesome? I get free updates, both for bugs and also for major features. I'm not left with the option of paying lots of money for the latest and greatest, or dealing with an unsupported old release with known bugs.

The counter argument from my Windows using friends is often about how they didn't pay for their Windows updates nor their copy of Office. I'm unimpressed with anyone who tells me Windows is a better option, but is unprepared to pay for it. If you have to illegally obtain it in order for it to compete with Linux then you're not really comparing on equal terms, are you? Also don't tell me that Free software takes away jobs from software engineers and then pirate software, eh?

Cost isn't just about the money though. I've put many hours into being involved in Debian. I've provided project resources when I was in a position to do so. I've contributed to the Linux kernel. Not quite the same as paying for it, but I think does indicate that I'm trying to give back a little too. I also accept that at an organisational level the basic cost of the software licences is often negligible compared to things like hardware, training and support.

I still think cost is a compelling argument for the home user, and for decisions at an organisational level. As mentioned I realise there are issues with training and support, but I don't believe these costs are any higher than for alternative OSes. Linux also makes it remarkably easy to remotely administer machines, and perform common actions across an entire installed estate, without needing extra bolt ons from 3rd parties.

Cost doesn't provide sufficient justification for an individual desktop in an organisation that has site licences for an alternative however (and in fact running Linux requires extra work on my part to do the install and maintenance compared to allowing central IT to manage my machine). So that's not a good enough reason.

by Jonathan McDowell at December 18, 2010 09:12 PM

December 17, 2010

Colin Turner

The Academic Descent to Me

How interesting, today I learned that Derek Burgess, the PhD supervisor of my PhD supervisor (Brian McMaster) was himself supervised by Frank Smithies. With a little help from the Mathematical Genealogy Project this has helped me work out my academic "parentage".
  1. Colin Turner, Queen's University of Belfast, 1997
  2. Brian McMaster, Queen's University of Belfast, 1972
  3. Derek Burgess, University of Cambridge, 1951
  4. Frank Smithies, University of Cambridge, 1937
  5. G. H. Hardy, University of Cambridge
  6. Edmund Whittaker, University of Cambridge, 1895
  7. Andrew Forsyth, University of Cambridge, 1881
  8. Arthur Cayley, University of Oxford / University College Dublin / Universiteit Leiden, 1864,1865,1875
  9. William Hopkins, University of Cambridge, 1830 (Note his many famous students)
  10. Adam Sedgwick, University of Cambridge, 1811
  11. Thomas Jones, University of Cambridge, 1782
  12. Thomas Postlethwaite, University of Cambridge, 1756
  13. Stephen Whisson, University of Cambridge, 1742
  14. Walter Taylor, University of Cambridge, 1723
  15. Robert Smith, University of Cambridge, 1715
  16. Roger Cotes, University of Cambridge, 1706
  17. Isaac Newton, University of Cambridge, 1668
  18. Isaac Barrow, University of Cambridge, 1652
  19. Vincenzio Viviani
  20. Galileo Galilei, University of Pisa
I think I'll stop there. I found this absolutely fascinating, many notable figures, and Hopkins supervised many famous figures. It's a shame I could never hope to live up to such a line!

by Colin Turner (nospam@example.com) at December 17, 2010 04:29 PM

December 15, 2010

Colin Turner

Heaven gets an Audit

This is a whimsical storyline I knocked out this morning. If you don't know much about HE (Higher Education) or the QAA it may not mean anything to you. Indeed, you might need to know a little bit about the Metatron. and some other Judeo/Christian theology to follow this. Absolutely no offence is intended to anyone!


There was a polite knock on the door. The Metatron looked up from his desk and bade the guest to enter. And so Michael, Field Marshal of the Heavenly Host entered the room, a troubled look on his normally serene face.

“Peter says we have an unusual guest at the gates. He claims to be from something called the … QAA”, he said.
“The QAA?”
“Yes, some sort of Quality Assurance Agency.”
“And why are they here?”
“Apparently”, and here Michael paused for a moment, “they want to audit just how heavenly Heaven is...”
“What?”
“They say that there are some metrics which cast some doubt on the issue apparently.”
“But Heaven is the definition of perfection. How could anything be found wanting?”

Michael looked wretched for a moment.

“He's asking if this is so, how was it that we had... the Incident...?”
“What?”
“Well,... he's saying that if everything here is so great and perfect how come we have a … what were the words he used again? Oh yes.... a retention problem.”
“Retention?”
“Apparently yes, this is one of the metrics they use. They are apparently concerned that our “First Output” showed an “attrition rate” of a third”.
“Did you tell him about Free Will? That it's up to sentient creatures to choose their own path?”
“Yes”
“And?”
“He says everyone uses that excuse.”

The Metatron paused while he considered this.
“OK, so what next?”
“Apparently they want to see the figures to see if this is a one time “blip”, they are asking for our “Academic Plan” for the next output.”
“Oh dear...”
“Is that a problem?”

The Metatron thumbed through some documents on his desk.

“Apparently we only intend to “retain” 144,000 of our second output”.
“Out of how many?”
“Well, sort of, um, 100 billion and counting so far”.
“Isn't that an attrition rate of over 99.999%.”
“Yes,... do you think that will present a problem?”

The two angels considered for a moment, after a while, the Metatron cleared his throat again.

“Do you think we could classify purgatory as an exit award?”

by Colin Turner (nospam@example.com) at December 15, 2010 11:27 AM

December 02, 2010

Paul Gregg

Stage 2: http:BL with Apache2 mod_perl

After my earlier post Referrer and Comment spammers are a PITA I came up with two mod_perl plugins to Apache and an "apache level" firewall.

The reason for the apache-level firewall is two-fold.  There is no direct way for the Apache user to manipulate an iptables chain (as it doesn't run as root), and second; I was not happy with suid root access or other forms of message passing to a daemon which would manipulate the firewall for me.

Architecture is thus, in httpd.conf place the following two lines:
PerlPreConnectionHandler PGREGG::httpBLBlock
PerlLogHandler PGREGG::httpBLLog
The first tells apache to run the handler in my httpBLBlock.pm module when a connection is received (before the request has been sent by the client).  In this handler, I am simply looking for a filename matching that IP in a directory that is writable by the apache user.  The contents of the file are a SCORE:httpBL_answer:[LIST].  Based on this, the module checks the mtime of the filename is in the last SCORE days, then the firewall is in effect. If so, we simply tell apache to drop the connection.  If the file has expired, we delete the file.

The second line is more interesting, and what creates the firewall filenames. In order to not impede the general speed of request handling, processing is performed in the Logging section of the Apache process. Our module is called by apache after the response has been sent, but before the access_log entry has been written.  In our module we perform the http:BL API call and compute the above SCORE based upon the Threat* level and Age* of the API response. (* both Threat and Age are octets in the DNS lookup).  We merely discount the Threat down to zero based on the Age (0-255) where an entry 255 days old reduces the SCORE to zero.
If the SCORE is larger than our trigger level (3) then we create the firewall filename, log the entry in our own httpbl.log and return Apache2::Const::FORBIDDEN.  This causes Apache to not log the entry in the normal access_log.  Otherwise, if all is ok, we return Apache2::Const::OK and Apache logs the hit as normal.

I have a bit of code tidy up, restructure the config/firewall directory and pull some common code out to a shared module before I can release to the world.

An interesting side effect to publishing the last story out through Planet PHP and other news sources along with the Project Honey Pot image is that when browsers viewed those sources, they all asked for the image off my server. In several cases, these were known spammer, Comment spammer, and other abusers. My server then created the firewall entry blocking them before they were able to follow the links back to my server.
 
I have been reading up more on Apache Bucket Brigades in an attempt to allow the firewall filter to be placed immediately after the request has been received and allow a custom response to the browser. This may help an otherwise unsuspecting user if their machine had been trojaned. I don't mind admitting I'm thoroughly confused right now :)

by Paul Gregg at December 02, 2010 12:31 PM

November 28, 2010

Paul Gregg

Referrer and Comment spammers are a PITA.

This shouldn't be news to anyone - but Referrer and Comment spammers are a real pain in the a*se.  Polluting my web logs and making any meaningful log analysis problematic.

So, I now have an itch to scratch and I'm going to do something about it. I would encourage you, the reader, to do something about it too.

Firstly, get yourself over to Project Honey Pot and read up on the project.  If you can, set up a Honey Pot or two yourself. Also be sure to read about the http:BL - this works along similar lines to the DNS blacklists used for Email spammers.

Next, I'm going to write a general Apache mod_perl module which will provide integration (lookup) to the http:BL and allow the user to "action"* the abusers.  Minimally, it will prevent the normal apache log files from being polluted by diverting the log entries to a httpbl logfile.

* "action" - To provide flexibility, I'm thinking of running an external script with the IP of the abuser.  The script can then perform any action you wish. The one I'm going for is an iptables firewall block.

Comments and suggestions welcome.

Project Honey Pot has implementations for several languages, including PHP and Perl (the languages that mean most to me).  There may be an implementation for your Web application so you might not be interested in what I'm doing at all :)

projhoneypot_banner.jpg



by Paul Gregg at November 28, 2010 11:45 PM

November 05, 2010

Colin Turner

HTC Desire versus Apple iPhone 4

I have both these phones. The HTC Desire is my personal phone, and runs Android (in this case Froyo, Android 2.2). I've been using Android for some time now, and regular readers will know I haven't been shy about commenting on its problems in the early releases. I also have, and have had for about the last month, an Apple iPhone 4, running iOS 4, for work. I've been promising some people a comparison.

Disclosure: I'm not really an Apple fan. From the moment I started to play with some in QUB, I disliked the single button, the cotton wool interface that kept you from "harming yourself", or doing anything deep. But I know that has changed somewhat, the latest Apple computers, while still having that fluffy exterior now have a decent operating system underneath. So I'm going to try to be as fair as I can be.

First a comment about the build quality. Both phones feel very similar both in the hand and in the pocket, the iPhone feels like it has a better build quality, but then you do expect solid hardware from Apple. Both phones have a button on the top to "wake" the device. Both have volume controls on the side. The iPhone has a nice feature of a slider button that mutes the device at one go; the Desire requires you to put the volume slider to zero (there are other ways, I know). The iPhone has one big button at the bottom, reminiscent of the one button mouse, and this is an area where the Desire wins hands down, with more physical buttons including the search, back button, the menu button, the home button and the optical trackball.

A note on the intuitiveness of the interface. Apple claims that their interface is so intuitive you don't need any instructions. I must say I find the Android (Desire) interface more intuitive, and when you start that phone for the first time, it walks you through the basics. Very helpful for beginners.

Anyway, time is short and some people are waiting on this review, so here's a potted comparison.

FeatureiPhoneDesire
Basic Interface Uncluttered, but uninformative, no widgets, no live wall paper, no active folders. Dull, one size fits all. Switching between tasks and back again is inelegant. Notification of outstanding items is cleaner than standard Android. Very rich, combinations of apps on the desktop, widgets and all the things mentioned by their absence for the iPhone. Much more personalised. Task switching, particularly the back button, is much more elegant. HTC Sense is nicer.
Phone Disastrous. Frequently won't connect calls when my Desire will. There seems to be something else at play here and I've reported it. Both phones are on the same network BTW. It's more awkward to change numbers on the fly and many other things. But it's very pretty. Much improved in Android over the last few versions, the ease of dialling, changing numbers is much better. Finding contacts to dial is much easier and faster. Oh, did I mention it works?
Voicemail Fancy. Asks me to set it up every single time I turn on the phone. Recently while travelling, I couldn't pick up a voicemail because of this for about an hour, by which time I was sitting with the caller. Not Fancy. Works all the time.
Workplace The stock mail client is very pretty, and for example, links to appointments easily (but makes it hard to see if you are free). It has limited threading support which is really nice. The Android exchange support is, in my opinion, superior. It lacks threading, but does have follow up support, which I take to be vastly more important.
Apps Legendary, but there are relatively few free quality apps. For example, I struggled (still haven't) found a decent calculator (not the built in one) that is free. I find the market app rather clunky. Can't find any decent external exchange apps that work. Many problems with the Market were fixed in Froyo, the apps available seem to be broader in nature, and many more are free (my perception). Choice of several exchange apps, more fully featured than iOS.
Software Keyboard Simple, elegant, but frustratingly difficult to type complex content, having to change layouts all the time. More cluttered, but actually as easy to use, better word prediction, less switching between layouts.
Battery Life Initially winning hands down, but now hogging battery like no tomorrow, can't make it through an average day. I don't know what's causing the problem and so I'm just deleting apps all over the show. Vastly improved over other phones, still an issue, but actually appreciating it more after the iPhone
Music Very pretty. iTunes integration. This is also the problem. A cheap player I bought for my Daughter allows me to just dump music on it and it works. What I had to go through to get Music onto the iPhone because of my unusual setup, well, it wasn't easy. Oh, and by the way. iTunes sucks. I mean really... disastrous, but with no alternative. Bulk device, you can just copy the music on and it works. Plays music just as well as the iPhone, in fact better because the former occaisionally and inexplicably stops. Wide variety of music players.
Video Flash.
Web Browser is probably prettier than Android's and allows more Tabs, seems to be slower though. Native Flash is an advantage here too.
Notifications Really dreadful, and a well known problem in the Apple community. Poorly handled, and when they pop up, and you go to use the phone the notification is just gone. Elegant system that allows multiple notifications each of which take you straight to the issue. Persist, unobtrusively, until dismissed.
Calendaring / Time Automatically setting the time to the wrong time since the clocks changed. Manually fixing this makes calender entries wrong. Setting it back to automatic makes the time wrong again. Google Calendar back end more open than Exchange. Exchange functionality built in too. Minor quibble, cannot change the colour of the Exchange calendar. Date / Time works. Minor quibble, on a non rooted device you can't use ntp for ultra correct times. Can't on the iPhone either as far as I know.
Oddities My laptop supplies power out of USB while it's off. I use this to charge my Desire if need be. The iPhone requires the whole machine to be on for it to charge the phone. The power connector on my Desire seems to be a bit stretched, so if I'm not careful, it's not being charged. The Desire asks, when plugged in, whether it should charge, act as a disk, do internet tethering etc..


I'm honestly struggling to find an area where the iPhone wins hands down against its competitor. I can't think of one. I imagine if the iPhone is the only smart phone you are used to, it seems miraculous. It probably seemed that way against Android 1.1. But Android has grown up now, and it makes the iPhone look just stupid by comparison. I couldn't recommend an iPhone to anyone. Sorry.

By the way, I fully accept that perhaps when I get used to the iPhone I might come to love it more, but I'll be surprised.

by Colin Turner (nospam@example.com) at November 05, 2010 08:29 AM

October 11, 2010

Stuart Hacking

Wii Cheat Code to fix HD TV

One of the things I love about the Wii is the Virtual Console. It lets me play a lot of the games I grew up with without the need to sacrifice several power sockets, or swap out all the RF connectors when I want to switch console. So over the weekend I played a bit of Mario World and Zelda: Link to the Past. Awesome!

But then I downloaded Super Castlevania IV and tried to play it… “Mode not supported.”

“Uh, oh!” I guess it doesn’t like my TV, or perhaps the connector – even though I’m already using the Nintendo Composite cable. Surely the console should do the necessary work to send the correct signal?

I looked online and found a fix – but here’s the strange thing: The fix isn’t something like “Try using an old Co-ax cable,” or, “Change the Wii’s ratio to 4:3.” The actual fix is much better:

Start the game and wait for the ‘Mode not supported’ message.
Press the Wii’s home button.
Open the game’s Operation Manual.
Press the following keys together: “Z-A-2″
A chime will sound if you entered it correctly.
The game will now display on your HDTV.

Really?… I mean, that’s awesome! It worked, but this felt more like putting in a cheat code than solving a hardware issue. If you decide in the end that you don’t really like ‘being able to see the game’ you can go back in and disable the fix with the combo ‘Z-A-1′.

by smh at October 11, 2010 09:19 AM

September 29, 2010

Stuart Hacking

Update

Today I read some really crufty code. The whole application is a mess of String conversions. This is because every class in the model only contains String members. Regardless of whether the data is a number, a boolean, a currency value or a date. *Everything* is a String. This makes it very hard to visually (or programmatically) parse what is happening in a piece of logical code because:

1) A lot of methods take Strings as Arguments.
2) The compiler can’t do any useful type checking. Everything is a String.
3) Things like dates and currencies can have multiple representations. Strings provide no abstraction.
4) Logic is shrouded in conversion and other housekeeping.

I don’t which moron had the bright idea of storing everything as a String. They’ve probably been promoted to principle engineer or technologist now and don’t have to deal with the stink they created a decade ago.

Of course, bad code exists. Sometimes it’s a kludge to get round a language limitation, or maybe it’s a speed hack.

This is just depressingly bad design. There was never a time when Java only supported Strings. I won’t even accept serialisation as an excuse because a) Java has been doing that for years and b) If it’s done manually then it should be done once, not peppered thoughout the business logic.

It feels as though someone read a bunch of Design Pattern books, rushed through an example implementation as quickly as possible, and released it as a polished framework.

And people just accept it like it’s no big deal. Worse, some people seem to consider it flexible design.

by smh at September 29, 2010 10:45 AM

September 07, 2010

Stuart Hacking

Ideal Outlook Features

At a certain point on the Bureaucratic scale, you may start using Outlook for more than simply the exchange of messages: Tasks/Todo lists, Appointments/Calendar, Notes.

Too bad Outlook isn’t very good at anything it does.

Here are a couple of things I’d like to say Outlook provides to make life easier (I use Outlook 2003, not by choice):

  • I flag messages and categorize them quite often. One would imagine that when a message  is flagged that it becomes a ToDo item and is added to the task list. If a flagged email has a follow up date, shouldn’t it appear in the calendar? I guess integration of different services was never a primary goal.
  • I’d like folders to be able to tell me the number of flagged emails. Currently they only show total or unread (but not both). I often use folders to store actionable bulk mail. It would be nice to see how many tasks I’ve woken up to.
  • When you flag email in a personal folder it does not show up un the ‘Follow Up’ search folder. I guess this is just a bug?

by smh at September 07, 2010 10:59 AM

September 03, 2010

Stuart Hacking

Rest in peace, ClickWheel

Apple have unveiled the shiny new iPod Nano range and they are sexy! Half the size of the previous model and sporting the same screen technology as the touch devices. Wonderful!

New iPod Nano

What I find surprising, though, is how many of my technically adept colleagues seem to be disgusted (or at least perturbed) at the disappearance of the ClickWheel.

Don’t get me wrong: The ClickWheel was a marvellous idea and worked really well… five years ago. It was a solution to the problem of providing a sleek touch based scrolling interface in the days before cheap multi-touch screens. This was also the time when the big iPods needed to fit a mechanical hard disk in the back – so there was this area on the face that needed to be filled with something eye-catching. Yes, the ClickWheel was great- I’ll continue to use one until my 30GB iPod Video decides to die.

But it’s 2010 now. We have solid state drives that can cram tons of information into a really tiny space. We have multi-touch interfaces that are just really beautiful and slick to use. Let’s enjoy the memories we shared with the ClickWheel as we lay it to rest and look forward to new innovations to come. Live in the now.

by smh at September 03, 2010 02:24 PM

August 16, 2010

Stuart Hacking

Outlook not so good.

An important person in the company (all praise the company!) has just attempted to send me an updated security certificate by email.

Oh, no, no, no, my friend! Surely you know that I’m running Micros~1 Outlook as my office mail client?

You see: Outlook knows what’s good for you, and apparently, security certificates are not. Indeed, Outlook will not allow me to access this file, or even give me the option of “Don’t worry, I know what I’m doing.”

[Here's a fun fact: The certificate was *sent* *using* *Outlook*. So, Outlook will happily send files that it deems to be unsafe, but the poor sap on the other end won't get to use it.]

Now, I tend to place a degree of value on others’ time. So it pains me to have to reply to someone saying “Hi, Outlook won’t let me open your attachment. Can you jump through hoops X, Y, Z to get it to me?”

Outlook used to simply be a poor email client. Now it has become actively counterproductive.

by smh at August 16, 2010 12:25 PM