CeBIT 2013 – Trends and Impressions

Introduction:
For those unaware of the event, CeBIT is held annually on the Hanover fairground. For an idea of scale, the exhibition area roughly covers 450.000m2 and the five day event attracted over 300.000 visitors this year. For those of you who know the IP EXPO in London, imagine 15+ halls like it and multiply the visitor numbers by ten.
In regards to exhibitors, if it’s a known IT brand they will have a stall (Intel occasionally had a whole hall, bigger brands like IBM or Microsoft tend to occupy sub-sections of a hall) and there are also separate halls for an incredible amount of far east suppliers (Shenzhen hall) and HR as well as general IT service providers.
I have been attending this event on a regular basis for many years and have always found it incredibly stimulating as well as an excellent barometer for trends. The later is mainly due to the fact that all major manufacturers use the event to display the products and services they are planning to release over the next 6-9 months.
This year was particularly interesting given the global move towards “the cloud” and what I can only describe as a move towards service oriented marketing from all major vendors.

I have tried to sum up my notes from this year’s CeBIT, hoping that others might find them interesting and useful. For 3D pictures please head over to my Phereo profile.

 

1. Server/converged infrastructure (e.g. IBM, Dell, Fujitsu, Huawei):

  • All major offerings heavily geared towards services/package solutions.
  • First year where nobody seemed to care much about “how many ram slots the blades have”.
  • Sales strategy: 30% on-site because it’s faster (use cases like BI and in-memory databases) – 70% we now connect to all those cloud providers.
  • Major selling point is the knowledge they sell with their packages in form of VM/system templates.
  • My personal favourite this year: IBM FlexPod/PureSystems.

ibmibm2

 

 

2. Storage (e.g. Fujitsu, Dell):

  • No major excitements, if you want it on-site, spec it and they can do it, solutions last 5-10 years.
  • The more you pay the more SSDs you get.
  • For fast access there’s no cloud alternative just yet (cloud is getting better for high volume/low access though).

ssd1ssd2

 

 

3. Cloud providers (too many to list):

  • For commodity resources this seems the way to go now (price, availability).
  • Wide variety of service and pricing models to cover the various use cases, somewhat reminded me of electricity suppliers (e.g. green options as premium service).

 

4. “Big Data” (e.g. SAP Hana):

  • Online businesses target highly distributed data/big data e.g. data harvesting of web server log files.
  • Ask ten vendors what “big data” is and thou shalt get ten answers :) IMHO it’s big data if you can pay big money to have it in big amounts of RAM.

 

5. Microsoft:

  • They are still pushing HyperV, personally I don’t think it’s on the same level as VMware yet but it’s getting there.
  • Dynamics, Dynamics, Dynamics… and in-between a bit of Sharepoint and “in case you have a windows phone”.
  • Hard to get past the fact that their stuff works, has a solid and reasonably priced licensing model and it’s easy to find developers for it.

 

6. Data centre/Racks (e.g. Rittal):

  • Orders to kit out new data centres are dropping so new focus on solutions (e.g. provision of whole Data Centres).
  • Very popular was their “data centre in a portacabin”, up to eighteen 19″ racks delivered fully assembled and ready to run including water cooled racks and aircon.
  • Rittal now go as far as putting a data centre into a truck.
  • High on the “requested feature” list to retrofit are sensor networks to lower cooling cost and ensure kit stays alive with falling staff count/remote monitoring.

rittalbus0bus1bus2

 

7. Client side hardware:

  • Old schools PCs are dead, only two big main board manufacturers bothered to come, Intel have officially decided to stop producing desktop PC main boards!
  • Good proportion of new main boards are ITX/mini-ITX rather than ATX, only extension cards available are graphics cards.
  • All in one clients everywhere, all sealed units, warranty = swap-out.
  • Hard push to put a touchscreen on every device and integrate wireless charging.
  • Mobile phones are getting bigger (“phablets”), upside is that they are also getting bigger batteries.

x2 x1 x11 x5x12

 

8. ITIL:

  • Various consultancy providers, offering services from “Business Analysts and Project Managers to restructure your processes to ITIL compliance” up to full near/off shore outsourcing.
  • Poland is CeBIT partner country this year and there was a surprisingly high number of very well defined services on offer. Often defined with ITIL as well as ISO compliant process connectors.

IMG_0492

 

9. Drones/Military:

  • Various areas, all seemed to be recruiting as well and had areas focused on Drones (fun bit was that the gimmick producers in another hall also had drones as their main focus this year and they DID bring working models :)
  • DIY type sets (quad/octo, Arduino core), very sophisticated and stable. Where gimmick type products only offer to steer from mobile and view camera these allow to use the device as a delivery mechanism. On a desktop PC open a browser, pick where you want to go in Google Maps and click “Go”. Monitoring flight on map or with onboard camera included, just a matter of time I guess until we hear the phrase “fleet control” and the whole area moves in with the Van/Truck monitoring area?

 

10. One more product worth mentioning:
Samsung’s transparent LCDs for fridges, window shopping etc. Price like a regular LCD, currently 20 and 40” commercially available but much larger sizes for shop windows about to be released, hard glass front and touch screen optional but not expensive.

 

11. Things I expected to see but couldn’t find:
Micro servers, ARM based servers etc, rumoured for Computex.

 

12. Last but not least some non-techy pictures :)

IMG_0489 IMG_0490 sea

FacebookGoogle GmailEvernoteDeliciousShare

First Steps with Free Pascal – The currency converter

Introduction:
I was lately blessed with an array of coursework assignments for a module called “Paradigms of Programming”. The language I picked to get into imperative programming was Pascal and I had a few fun weekend with it programming a currency converter.
I’m hoping others might find the resulting code helpful or interesting :)
Preparations:

 

The Code – Stage 1: Source Currency
Step 1: Constants and variables
We need to initialising a few constants for the currency symbols
const
euro = ‘€’;
pound = ‘£’;
dollar = ‘$’;

And now we initialise some variables to hold temporary results of each step
var
step_one : integer;
step_one_cur : string;
step_two : real;
step_three : integer;
step_three_cur : string;

Step 2: Let’s get the user to enter the source currency
writeln (‘Welcome to the exciting world of Pascal currency conversion!’);
writeln (‘This program will convert between the following currencies for you:’);
writeln (euro, ‘,’, pound, ‘,’, dollar);
writeln (‘——————————————————-’);
writeln (‘Step 1 – Please pick the currency of which you have notes/coins from the following list by entering 1,2 or 3 and hitting enter:’);
writeln (’1: ‘, euro);
writeln (’2: ‘, pound);
writeln (’3: ‘, dollar);
readln (step_one);

Step 3: To reassure our user we tell him what we think he just entered for step one but end the program if the user picks anything apart from 1-3
case step_one of
1:
begin
step_one_cur := euro;
writeln (‘You have selected ‘, step_one_cur, ‘ as your source currency.’)
end;
2:
begin
step_one_cur := pound;
writeln (‘You have selected ‘, step_one_cur, ‘ as your source currency.’)
end;
3:
begin
step_one_cur := dollar;
writeln (‘You have selected ‘, step_one_cur, ‘ as your source currency.’)
end;
otherwise writeln (‘Only options 1-3 are available for Step 1, please try again.’);
exit;
end;

 

The Code – Stage 2: Source amount
Step 1: Let’s get the user to enter the source amount but end the program if the user enters a negative amount
writeln (‘——————————————————-’);
writeln (‘Step 2 – Please enter the amount of ‘, step_one_cur, ‘s you have and press enter:’);
readln (step_two);
{end program if the user enters a negative source amount}
if step_two < 0 then
begin
writeln (‘You have entered a negative amount of ‘, step_two:3:2, step_one_cur, ‘, please try again’);
exit;
end;

Step 2: To reassure our user we tell him what we think he just entered for step two
writeln (‘You have entered: ‘, step_two:3:2, step_one_cur);

 

The Code – Stage 3: Target currency

Step 1: Let’s get the user to enter the target currency but end the program if the user enters the same currency we have from Stage 1 as source currency or picks outside the 1-3 range
writeln (‘——————————————————-’);
writeln (‘Step 3 – Please pick the currency you want your ‘, step_two:3:2, step_one_cur, ‘ converted to by entering 1,2 or 3 and hitting enter:’);
writeln (’1: ‘, euro);
writeln (’2: ‘, pound);
writeln (’3: ‘, dollar);
readln (step_three);

if step_one = step_three then
begin
writeln (‘You have picked the same currency for step 1 and 3, please try again’);
halt;
end;

Step 2: To reassure our user we tell him what we think he just entered for step three}
case step_three of
1:
begin
step_three_cur := euro;
writeln (‘You have selected ‘, step_three_cur, ‘ as your target currency.’)
end;
2:
begin
step_three_cur := pound;
writeln (‘You have selected ‘, step_three_cur, ‘ as your target currency.’)
end;
3:
begin
step_three_cur := dollar;
writeln (‘You have selected ‘, step_three_cur, ‘ as your target currency.’)
end;
otherwise writeln (‘Only options 1-3 are available for Step 1, please try again.’);
exit;
end;

 

The Code – Stage 4: Let’s do some converting and feed source amount, source currency and target currency from the previous steps into the step four procedure
writeln (‘——————————————————-’);
Step 1: To reassure our user we tell him what we think he entered for step 1-3
writeln (‘Step 4 – If everything went well you want ‘, step_two:3:2, step_one_cur, ‘ converted to ‘, step_three_cur);

Step 2: Feed step_four procedure
step_four (step_one_cur, step_two, step_three_cur)
end.

 

The Code – Stage 5: Calculate the result

Step 1: Definition, constants and variables
First we define what our step_four procedure get’s fed with
procedure step_four (source_cur : string; source_amount : real; target_cur : string);
Then we initialise the variables for the currency symbols
var euro : string;
var pound : string;
var dollar : string;
Initialise variables for the conversion rates
var euro2pound : real;
var euro2dollar : real;
var pound2euro : real;
var pound2dollar : real;
var dollar2euro : real;
var dollar2pound : real;
Initialise the temp variable which will hold the final result for step five
var step5 : real;

Step 2: Fill variables
We fill the variables we initialised above with currency symbols, conversion rates and set step five temp variable to zero
euro := ‘€’;
pound := ‘£’;
dollar := ‘$’;
euro2pound := 0.8;
euro2dollar := 1.3;
pound2euro := 1.2;
pound2dollar := 1.6;
dollar2euro := 0.8;
dollar2pound := 0.6;
step5 := 0;

Step 3: Picking the right conversion rate
Depending on source and target currency we tell the user the conversion rate and assign the result to our step five variable
if (source_cur = euro) and (target_cur = pound) then
begin
writeln (‘The exchange rate for euro to pound is: ‘, euro2pound:3:2);
step5 := source_amount*euro2pound
end;

if (source_cur = euro) and (target_cur = dollar) then
begin
writeln (‘The exchange rate for euro to dollar is: ‘, euro2dollar:3:2);
step5 := source_amount*euro2dollar
end;

if (source_cur = pound) and (target_cur = euro) then
begin
writeln (‘The exchange rate for pound to euro is: ‘, pound2euro:3:2);
step5 := source_amount*pound2euro
end;

if (source_cur = pound) and (target_cur = dollar) then
begin
writeln (‘The exchange rate for pound to dollar is: ‘, pound2dollar:3:2);
step5 := source_amount*pound2dollar
end;

if (source_cur = dollar) and (target_cur = euro) then
begin
writeln (‘The exchange rate for dollar to euro is: ‘, dollar2euro:3:2);
step5 := source_amount*dollar2euro
end;

if (source_cur = dollar) and (target_cur = pound) then
begin
writeln (‘The exchange rate for dollar to pound is: ‘, dollar2pound:3:2);
step5 := source_amount*dollar2pound
end;

 

The Code – Stage 6: Spit out the whole lot

Let’s tell our user how much X of Y he would get for his A of B at the current conversion rate of C}
writeln (‘——————————————————-’);
writeln (‘Step 5 – Results:’);
writeln (‘At the current exchange rate you would get ‘, step5:3:2, target_cur, ‘ for your ‘, source_amount:3:2, source_cur);

Pascal Currency Converter

 

 

Conclusion:
Yes, I admit growing up with Pascal and C so this brings back fond memories of sitting in a dark cellar computer lab in a school in Munich :) I can recommend Pascal to anyone who wants to get into imperative programming, it’s easy enough to pick up and once one hit’s it’s limitations it’s easy to move on to mighty old C.

 

 

 

 

 

FacebookGoogle GmailEvernoteDeliciousShare

First steps with Haskell – The word counter

Introduction:
I was lately blessed with an array of coursework assignments for a module called “Paradigms of Programming”. The language I picked to get into functional programming was Haskell and I had a few fun afternoons with it programming a word counter which counts both the total number of words as well as the frequency of words in a given text file.
I’m hoping others might find the resulting code helpful or interesting :)

Preparations:

  • Get Haskell
  • Get MissingH from here
  • For an overview of Haskell have a look at Wikipedia
  • If you are trying Haskell for the first time you might want to spend a few minutes with this interactive tutorial
  • This is my source code and count.txt file for the example below: Haskell word counter – source/count.txt
  • If you want to know more about the commands I used click on the commands in the code below and they’ll send you to the Haskell code reference for the command

 

The Code – Stage 1: Word count
Step 1: Let’s be nice and talk to the human:
putStrLn “Welcome to the exciting world of Haskell word counting!”
putStrLn “Please enter the full name of the file which contains the words you want counted:”

Step 2: Then we get the file name from our user and store it in “name”
name <- getLine
putStrLn $ “The file name you have entered is: ” ++ name

Step 3: let’s read the file specified in “name” into “contents”
contents <- readFile name

Step 4: let’s get rid of punctuation (e.g. . or !) which are currently attached to the end of words (thishadafullstop. -> thishadafullstop)
let contents2 = replace “.” “” contents
let contents3 = replace “!” “” contents2

Step 5: let’s make the words all lower case to ensure .Later = later
let lower = map toLower contents3

Step 6: let’s feed the files content to “words” which will chop it down and return us a nice clean array of the contained words
let chop = words (lower)

Step 7: let’s take the result of step 4 and feed it to “length” which will return the number of words in the array and add a “/n” at the end to make it pretty…
let count = show (length chop) ++ “\n”

Step 8: let’s throw a pretty result at the human crouched in front of the screen
putStrLn $ “This wonderful Haskell program has found ” ++ count ++ “words in count.txt”

 

The Code – Stage 2: Word frequency

Step 1: let’s “sort” that lot and get all the identical words together (Example: ["a","a","a","a","a","about","also","an","and","and","and","and","and","api"])
let chop2 = sort chop

Step 2: now we “group” all instances of each word into a separate list (Example: [["a","a","a","a","a"],["about"],["also"],["an"],["and","and","and","and","and"],["api"]])
let chop3 = group chop2

Step 3: for each list x we use “length” to see how many instances we’ve got in the list and “head” to get one example of content (Example: ["a","a","a","a","a"],["about?"] -> [5,"a"], [1,"about"])
let chop4 = map (\x -> (length x, head x)) chop3

Step 4: “reverse $ sort” will sort our list with the most frequent words at the beginning and descending order
let chop5 = reverse (sort chop4)

 

Stage 3: Let’s filter out the Top20 words in our document

Step 1: Exclusions, not much point in building a top20 list without this step unless we want to prove that this will be very similar across most longer texts… (http://en.wikipedia.org/wiki/Most_common_words_in_English)
let exclusion_1 = “the”
let exclusion_2 = “be”
let exclusion_3 = “to”
let exclusion_4 = “of”
let exclusion_5 = “and”
let exclusion_6 = “a”
let exclusion_7 = “in”
let exclusion_8 = “that”
let exclusion_9 = “have”
let exclusion_10 = “I”
let exclusion_11 = “it”
let exclusion_12 = “for”
let exclusion_13 = “not”
let exclusion_14 = “on”
let exclusion_15 = “with”
let exclusion_16 = “he”
let exclusion_17 = “as”
let exclusion_18 = “you”
let exclusion_19 = “do”
let exclusion_20 = “at”

Step 2: with “filter” we can take out all the lists where the second tuple matches one of our exclusions
let chop6 = filter (\(x,y)-> y /= exclusion_1 && y /= exclusion_2 && y /= exclusion_3 && y /= exclusion_4 && y /= exclusion_5 && y /= exclusion_6 && y /= exclusion_7 && y /= exclusion_8 && y /= exclusion_9 && y /= exclusion_10 && y /= exclusion_11 && y /= exclusion_12 && y /= exclusion_13 && y /= exclusion_14 && y /= exclusion_15 && y /= exclusion_16 && y /= exclusion_17 && y /= exclusion_18 && y /= exclusion_19 && y /= exclusion_20) chop5

Step 3: let’s take the top20 words so we don’t throw an endless amount of stuff at our user
let chop7 = take 20 chop6

Step 4: let’s throw another pretty result at the human crouched in front of the screen
putStrLn $ “This wonderful Haskell program has also had a look at the ” ++ count ++ “words in ” ++ name ++ ” and after excluding the 20 most frequently used words as defined by wikipedia these are the most frequently used words in ” ++ name ++ “:”
let top20 = show chop7
putStrLn top20

Haskell word counter v2.1

Haskell word counter v2.1

 

Stage 4 will usually be commented out, I’ve merely fed it in to prove that the endless line generates the same output as the chopped up version above…
Stage 4: and just because we can, now all together in one messy line with tons a ()s and $s:

let alltogether = show $ take 20 $ filter (\(x,y)-> y /= exclusion_1 && y /= exclusion_2 && y /= exclusion_3 && y /= exclusion_4 && y /= exclusion_5 && y /= exclusion_6 && y /= exclusion_7 && y /= exclusion_8 && y /= exclusion_9 && y /= exclusion_10 && y /= exclusion_11 && y /= exclusion_12 && y /= exclusion_13 && y /= exclusion_14 && y /= exclusion_15 && y /= exclusion_16 && y /= exclusion_17 && y /= exclusion_18 && y /= exclusion_19 && y /= exclusion_20) (reverse $ sort $ map (\x -> (length x, head x)) (group $ sort $ words $ map toLower (replace “.” “” (replace “!” “” contents))))
putStrLn alltogether

 

Conclusion:

Yes, I admit growing up with Pascal and C :) Having said that, I’ve spent a lot of time with SQL over the last couple of years and parts of Haskell like “sort” and “group” felt very intuitive. Just like SQL or OCaml it took a little while to get into the flow of how things are done but the amount of testing required is much lower than with any imperative language I know which is a big plus on my lazy programmer list ;)

FacebookGoogle GmailEvernoteDeliciousShare

How to build a Smoothwall Gateway the hard way (Dual Core/Dual Gigabit/Mini-ITX)

1. Introduction:
Since I’ve just upgraded the NAS I’ve ended up with a spare Mini-ITX Atom board. Perfect timing to replace the old Smoothwall gateway and finally eradicate the last 32bit machine I’ve got running :)
I’ve been using Smoothwall since 2007 now, my first box was based on a P3 1Ghz but quickly replaced by a VIA 800 Mini-ITX board, and I can’t recommend it enough. Apart from the fact that I don’t really trust the security of a consumer grade DSL router browsing also feels a lot faster even compared to letting the Linksys X3000 do the routing. Not surprising if one considers the jump in processing power between the pathetic little SoC in the X3000 and a fully blown Atom 330 board ;)

 

2. Let’s put it together:
I think the only part that I could mount without modifications was the main board, everything else involved modifications. In other words, lot’s of fun :)

Parts involved:

  • Intel Desktop Board D945GCLF2, 1.6GHz Atom 330 (533Mhz, 64bit, Dual Core), 8W TDP, 945GC + ICH7, GMA950, RTL111C Gigabit NIC
  • Kingston 2GB DDR2 667MHZ-PC5300 240PIN (KVR667D2N5/2G)
  • USRobotics PCI Gigabit NIC (Model: USR7902A, Chipset: RTL8169S-32)
  • picoPSU 120W
  • 4pin P4 power connector
  • Seagate Momentus 80GB 5400 RPM 2.5″ SATA HDD
  • Mini-ITX case of unknown origin (ancient… hell knows which Chinese factory spat that one out…)
  • 12V case fan with adjustable speed (compuman, PL 80B 12HH, DC 12V 0.23A )
  • CPU fan (AVC Model: C4010T12H DC 12V 0.1A)
  • Smoothwall Express 3.0 SP2 64bit (+update9 through web interface)
  • Green: LAN feed
  • Reg: Linksys X3000 Annex A in Bridged only mode (ADSL2 line, www.zen.co.uk)

 

2.1 The Case Fan:
The old case once came with a non standard PSU which blow up years ago. Once removed I found ample space for a nice 12V case fan. I’ve used one that comes with a little nob to adjust the fan speed and I’ve turned it all the way down so it’s pretty much noise-less. The board won’t be working too hard so this will provide more than enough airflow for this setup

2.2 The CPU fan:
The original CPU fan on this board was a royal pain and I think that was documented well all over the web. It was noisy and hardly ever lasted through the warranty period. I think my original fan ran for about 10min until I ripped it off the CPU cooler and threw it into the bin so I could not be tempted to use this instrument of ear torture ever again. I’ve fitted a nice little fan, think it came from Maplin for a few £, which I can’t even hear through the case.

2.3 The HDD:
Back in the days when this case was made it wasn’t common practise to fit 2.5″ HDDs or portable type optical drives into a desktop case so the mounting frames are meant for a 3.5″ HDD and a desktop size optical drive. I’ve connected the Seagate laptop HDD I’m using to one of the metal side rails that would normally hold the 3’5″ hdd and squeezed a bit of soft rubber underneath which works very well.

2.3 The picoPSU:
This is a very nice little thing and has been running all my Mini-ITX Smoothwalls for years. It’s the older 120W 20pin model and get’s fed from a 90W charger, if the board ever swallows more than that it’s ready for the bin I guess ;)
Only downside is that the picoPSU comes from an era where neither 24pin power sockets, 4pin P4 sockets or indeed SATA power adapters were being sold. The 20pin ATX power plug works just as well as a 24pin one on this board but I had to cheat for the 4pin P4 plug and SATA power connector. I’ve simply harvested a 4pin Molex -> 2xSATA adapter and cut off the black and yellow cable off the second SATA power plug (I only need one anyway). I then connected the two cables to a P4 4pin plug I’ve harvested from an old ATX power supply and this finally got the system to boot :)

 

Smoothwall psu_p4

The picoPSU should be powerful enough to fire up a laptop size optical drive for the initial install but I didn’t want to leave an optical drive inside the system as it would only be used once every few years when this machine get’s reinstalled/upgraded. So I used a desktop size optical drive and fed power to it from a separate desktop ATX PSU (ATX green+black still works, old tricks are always the best ones ;) .

2.4 The power connector:
Since the picoPSU is fed from a laptop charger it obviously has a little socket that allows for charger to be plugged in. Again not something that the old case would have been prepared for so me and the case took a trip out to the garage to meet Mr bench drill and his friend the size 10 HSS drill. I fitted the socket to the rear left hand side of the case.

Smoothwall inside_back

Smoothwall psu_plug
2.5 The network card:
The old VIA 800Mhz board was quite happy with a PCI riser and a PCI NIC fitted to that but the moody D945GCLF2 obviously didn’t want any of that. I remember trying to fit and additional PCI->2xSATA controller to this in my old NAS case through a riser and it was intermittent at best. Same here, the NIC initially worked but the system froze up every few minutes. Tried about a dozen cards and three PCI risers including a very nice one with buffer caps, no change. Once I got angry enough to throw the ****ing board out the window I unscrewed it and decided to try it without the riser card, just for fun. Suddenly every card worked, even the RTL gigabit ones that previously weren’t even detected by smoothwalls setup routine. Not like I care much how I get stuff to work these days so me and the case took another trip out to the garage to meet Mr angle grinder. The resulting hole next to the opening at the back for the board to stick out it’s ports is just a bit bigger than the second NIC port. I’ve bent the surplus metal inside and it now sits exactly behind the NIC ports metal casing.

Smoothwall nic

 

Physical setup – done :)

Smoothwall whole_box
3. Let’s install Smoothwall Express 3.0:
I though this would be pain free, oh boy was I wrong… Since part of my goal was to get rid of my last 32bit machine (the last Smoothwall ran off a 32bit Sony laptop as a temporary replacement for the old VIA 800MHz board which only worked with Smoothwall 2.0) I downloaded the latest Smoothwall 64bit version aka SP3 which includes all updates to update8. Since I’m careful and knew I would loose the interweb once I unplugged the old machine I also got the 32bit version and a random collection of Linux live CDs for troubleshooting. Discs burned I pulled the plugs and started to install…
The initial SP3 install worked well and I was pleasantly surprised by the new installer which formats ones drive in minutes rather than hours. Unfortunately all I got after the mandatory reboot which follows the initial setup routine was a “no operating system found” type error. Hmmm, tried the 32bit CD, tried two more laptop SATA HDDs, tried an IDE laptop HDD, tried a desktop SATA HDD, tried a WD 15000 RPM Raptor: no change – no boot – uncontrolled swearing.
So I setup the iPhone as a wifi hotspot and started to investigate. Didn’t take long to find out that the changes in update8 were major and included a move to grub as well as a new Kernel. So I got the previous Smoothwall Express 3.0 SP2 64bit setup iso, burned that and finally got a booting system! The missing updates then came through the web interface and including update8 installed ok.
Once I got the interweb back I had a closer look at what could be causing the SP3 incompatibility and quickly found the culprit to be the mainboard’s BIOS which has a bug which in reality means that booting from GUID partition tables is broken for these boards. How that sort of thing get’s through Intel’s testing regime is beyond me…
More on the GPT debacle can be found in my previous rant post on the topic :)

Smoothwall all_done

4. Final thoughts:
All in all I’m very happy with the new Smoothwall box. I can’t hear it, it doesn’t swallow a lot of power and it’s fast hence should last for a few more years. Now all I need is a bit more time to upgrade to fibre broadband and remove the need for an ADSL modem (<- what I actually want is 20meg+ downstream but power savings are soooo much better for justifying investments ;) and patience until the price of a 32GB SSD drops below £30 so I can swap out the old Seagate 2.5″ HDD.

 

FacebookGoogle GmailEvernoteDeliciousShare

Intel D945GCLF2 vs GPT and Smoothwall 3.0 SP3

Here was me thinking that it would be a good idea to finally replace my old laptop based Smoothwall setup with a nice mini-itx one…

The mini-itx board in question is a Intel D945GCLF2 and has been working hard over the past few years as my home NAS. Since I just swapped it for a Gigabyte GA-D525TUD to add another RAID1 and finally fill the remaining slots in the NAS box I decided to throw out the old moody Smoothwall laptop and let the D945GCLF2 do the Smoothwall-ing. Got a box, got a 120W picoPSU and my nice home soldered molex->P4 adapter, got a beefy laptop charger, got the tools and setup discs, all seemed good. Until I tried to install Smoothwall 3.0 SP3.

The install routine went through ok but after the reboot I only got “no bootable device”. So I tried all the usual BIOS tricks, AHCI off and even tried it with a 2.5″ IDE drive which I had to dig out from the furthest corner of the room (<- keeping stuff is good, I still had an adapter lying next to it to connect this to a 3.5″ IDE port ;) . Still no joy. So I got desperate, got out a trustworthy desktop PC, installed the latest smoothwall onto a drive. All boots ok in the desktop but same error when connected to the D945GCLF2. Grrrrrrr! Oddly enough the D945GCLF2 had no problems installing and booting both 32bit and 64bit Ubuntu 12.04. I slowly started to suspect partition layout-ish problems and set off to investigate further…

So I went out into the big cold world of error googling to gather more information. Luckily I also had a look at the last Smoothwall updates and update8 was quite a big one so I thought why not try Smoothwall 3.0 SP2. And tadaaaa, suddenly the D945GCLF2 boots fine :)

Any sane person would probably have been happy at this point, I wasn’t and spent the rest of the afternoon trying to figure out what was going on. Long story short, with SP3 (update8 I think to be exact) the setup routine started to work differently. Apart from support for multi-core CPUs it now also formats a lot quicker and uses GPT. Nice idea in general but the D945GCLF2s BIOS has a bug which effectively means it doesn’t boot from GPT partitions. And that’s where I got angry and decided to write a blog post to hopefully help others who are stuck with similar problems on the D945GCLF2. How a company the size of Intel get’s away with bugs like this is a mystery to me…

FacebookGoogle GmailEvernoteDeliciousShare

How to install OS X Mountain Lion from an external drive

Introduction:
OS X Mountain Lion just popped up in the App Store so I could not resist to download it at work where it takes 30 minutes compared to several hours back home. As with Lion the setup is handled through an installer which one get’s (after appropriate payment obviously) through the App Store. The process to backup the installer or create a external hard drive to install Mountain Lion onto several machines is straight forward and saves valuable time and bandwidth for multiple “Apple Thingy” owners :)

 

How to backup the installer:

1. Download from the App Store. Current price is under £13.99 which I think is more than fair

2. Once the download finishes don’t go through with the update (<- this would run the upgrade routine and then delete the installer) but cancel the update. The installer will stay on your machine and we can now “process it further” ;)

3. Open Finder and go to your Applications folder

4. Right click on Install OS X Mountain Lion and click on Show package contents

5. Navigate through the folders: Contents, SharedSupport, and find InstallESD.dmg :)

6. Just like with Lion InstallESD.dmg is what you are after and with Disk Utility you can use this image to create a bootable external hard drive or simply transfer it to another machine to install Mountain Lion. There are various tools around which do the above in one click for Lion so if you don’t feel confident to do the above yourself just give it a few hours and the ones for Mountain Lion should start to appear.
No need to try and burn a DVD from the image, I can confirm that it is too large…

I shall now get on and upgrade some of my machines :)

FacebookGoogle GmailEvernoteDeliciousShare

The Arduino Mega Protoshield Kit – Build Instructions

1. Introduction:
For my new Arduino controlled greenhouse project I lately required a new Arduino Mega Protoshield. I’ve had the nice red Sparkfun one for quite some time now but since I’m using an Arduino Mega 2560 for this project I wanted something that brought up the additional new pins and the ICSP header. The latest original Arduino Mega Protoshield (A000039) was an exact match for my requirements and as a kit available from proto-pic for under £14. How was I meant to resist :)

 

2. Where’s me instructable:
I’m lazy these days so every new kit I get I open google to look for an instructable. Usually I don’t need the instructions but I have on so many occasions found welcome additional tweaks and project ideas mentioned in said instructables and met so many great people from comments and forum posts that I seems time well spent. Oddly enough, I found nothing for this kit. Worse, I found forum posts asking specifically for this instructable but no valid answers/links.
I get it, this kit isn’t complex so I assume nobody could so far be asked to write this guide, especially since the Arduino Mega isn’t exactly geared towards entry level projects. Still, I’ve decided to take a few pictures while I build and write this post. Even if it’s just to get a few friendly comments or helps to reassure sombody that they are building it as intended it’ll be worth a little bit of my time I think.

 

3. What’s in the box:
This is what I got with my kit:

  • One Arduino Mega Protoshield Kit
  • Two little push buttons
  • One single row strip of 40 long headers
  • One 18×2 header block
  • Three LEDs (one each of Red, Green and Yellow)
  • Three 220 Ohm Resistors
  • Three 1K Ohm Resistors
  • Three 10K Ohm Resistors
Arduino Mega Protoshield Kit

 

4. Let’s build:
There is no need to solder the parts in this particular order but this worked for me.

4.1 LEDs and resistors:
Have a look for the corner which is meant to get the two LEDs (look at the top of the shield, if you can read the Arduino logo it’s the top left corner). Fit the two 220Ohm resistors (orientation doesn’t matter with those) and get one red and one green LED. If you look at the bottom side of the shield it’s easy to determine which way round to mount the LEDs. The shorter lead gets connected to ground and it’s easy to see which solder run comes from ground. In other words, the holes closest to the little “1″ are the ones connecting to ground aka the ones for the shorter lead. Solder in place and trim off the surplus leads.

Arduino Mega Protoshield Kit - LEDs 1

Arduino Mega Protoshield Kit - LEDs 2

Arduino Mega Protoshield Kit - LEDs 3

 

4.2 ICSP header and push button:
If you look at the top of the shield and if you can read the Arduino logo the little push botton goes right next to the logo on the right hand side. The ICSP header then again goes to the right hand side of the push button.

Arduino Mega Protoshield Kit - icsp/button

 

4.3 Headers:
There is the long row of 18×2 pins for the large pin block on the right hand side of the shield. Once you are done with soldering that one into place snap the long single row of headers into smaller parts to provide the segments required for the groups of pins at the top and bottom edge of the shield. In my case the 18×2 pins were quite a bit shorter than the other header pins so I decided to shorten the pins at the top/bottom.

Arduino Mega Protoshield Kit - headers

 

5. Conclusion:
It does what I want and I think it does it well. The shield is of very good quality and the design is well thought through, everything seems to be in the right place. The Mega shields tend to be a bit hard to fit onto the actual Arduino Mega literally because of the 1001 pins and especially the giant 18×2 header section. This one isn’t any better or worse than all the other ones I’ve tried. The kit leaves a few spare parts in form of one yellow LED, one push button and a couple of resistors but I’m not entirely sure what they are meant to be good for. I’m open to suggestions :)
The only thing I would critisice, and that’s pure criticism of the kit not the shield itself, it the fact that my kit came with long top/bottom headers but the 18×2 header section consists of pins which are 2/3 of the length at best. Only chance I saw to get all pins inserted was to shorten the top/bottom header pins which works fine but, once mounted onto the Arduino Mega, means there is very little distance between the Arduino Mega and the protoshield which I don’t really like.

FacebookGoogle GmailEvernoteDeliciousShare

Arduino Project 12.1 – My second Arduino controlled greenhouse

Introduction:

This is the first of a series of posts to describe my second Arduino automated greenhouse. It’s simply too big a project to cover everything in one post so I’ve decided to split it into a few smaller posts. In this first part I’m going to quickly describe my water, power and network setup.

 

1. Power

I’ve built this greenhouse myself and since I knew I wanted to automate it I fed 240V (armoured 4mm cable) and mains water (blue plastic pipe) in from underneath through the base. The 240V connection feeds two IP54 sockets which I rarely use apart from powering tools during maintenance tasks and a fused spur to supply the IP66 flourescent light fitting and associated IP66 light switch.

 

2. Water

The blue polypipe connects to a copper adapter which then phases out into two lever taps. One of them is usually connected to a hose reel and the other one is now feeding the automated watering pipeline :) This pipeline runs round the inside bottom of the whole greenhouse with so far five 12V solenoid valves T-ing off of it. I used 13mm irrigation pipe for the water run up to the valves and behind them I’ve gone down to smaller 5mm irrigation pipeline which then feeds several adjustable 30l/h irrigation bubblers. For the bigger plants I use one bubbler per pot while they are still young but once they grow up and develop long enough roots one of them should be enough to water the tray underneath the pots. The trays up on the staging only house smaller pots anyway so they all get flooded by one bubbler each.

 

 

 

 

3. Network

I’ve pulled over two CAT6 lines from the shed next doors. One currently supplies gigabit ethernet and the other one 9V DC to feed the Arduino and 12V for the solenoid valves. The Arduino is going to upload statistics to my MySQL storage back-end through a network shield and I’m planning to display samples of this data with a LCD in the greenhouse as well as a second LCD in my hallway. While I’m at it I’m also planning to get the same Arduino to collect weather data (outside temperature, humidity, wind speed etc) and upload it into my database for displaying on the hallway LCD. If I ever find the time I’d also like to make this data available through a web service so I can tap into it with a little Android/iOS app.

My latest addition is a chunky IP54 ABS box to house all the circuitry and I’ve already fitted the first three plugs which are going to connect the fan out lines to connect the solenoid valves and soil humidity/temperature combo sensors.

 

Next Steps:

I’ve got most of the circuitry for the distribution box built up and tested and the two fan cans (soda can with a little fan, humidity, light and temperature sensors)  are ready to go in as well. Biggest task left on my list is probably somewhere between wiring it all up and building all the soil humidity/temperature combo sensors. I shall report back with another post in the near future :)

FacebookGoogle GmailEvernoteDeliciousShare

The prospective effects of 3D printing on society or “Mummy, when I grow up I want to be a maker!”

Introduction:

3D printers have taken off over the last couple of years and especially the last half year with more and more models pushing onto the market and competing in particular for the lower budget end of the scale.
High quality 3D printing, dual colour printing and sizes beyond 10cm are still reserved for the price range beyond the £1000 price tag. Still, the available models have usually already been through several revisions, are available as pretty enclosed ready-built units as well as build-your-own packages and (after a bit of tinkering/adjusting) stable enough even for small scale industrial production.
Given the pace at which these systems are developing and the serious amount of highly skilled individuals involved I’d expect 3D printers to be commercially available and affordable for the wider public (<£100) within the next 24-36 months. This will come with benefits to the wider public as well as new challenges which I would like to elaborate on.

 

Where do we go from here:

3D printers are commonly seen as the big competition for current big scale industrial production. At the moment a new product get’s designed, a production process based on the design put in place and the resulting XYZs then get shipped to the requesting end users. Products are changed at such a rapid pace these days that the machines which make certain products are usually turned off or repurposed for the next/redesigned product iteration before the warranty on the last generation runs out. This leads to what we see all around us in form of a “throw away” society fuelled by firstly the fact that spare parts are not available anymore after a very short time due to non existence of prepared stock and non existence of the machines that once made the units and secondly that labour in the first world is expensive to a degree which, even if parts are available, renders repairs economically unviable. The result is that once something comes out of warranty it will not be fixed but rather replaced with a new equivalent product and if it’s still under warranty the manufacturer is very likely going to provide a new product of the same/next generation to fulfil their warranty requirements. The broken item then often get’s shipped to a country which has low enough labor costs to make the refurbishment a viable option or the broken item is sold off for it’s scrap value. Put a 3D printer into every home and this whole system collapses from two side. Firstly a new economy for the fixing of stuff would spring up as parts would be easily available but manufacturers would also loose their current strong position to enforce fast product cycles. The biggest fear for the big manufacturers comes obviously in the form of copyright theft as we all know it from pirate bay and similar platforms for music/video content and software. At the moment their product designs are protect by physical means as they are the only ones in possession of a machine that can make XYZ but this will soon change and I predict it to change in a incredibly rapid fashion. Once a critical mass of consumers are in possession of a 3D printer the first companies will provide content for them in form of design files to print new “stuff” and parts to fix/improve existing “stuff”. Those companies will quickly grow through provision of day to day items (cutlery, screws etc) and spare parts for the most common things around us (mobile phone cases to name just one example). Existing companies will so be forced to provide files to print their existing “stuff” simply because if they don’t said files will be provided by other means (pirate bay+thingyverse=piratethingies). Once we arrive at this point, and I’d expect that we get there within five years after the first thing on thingyverse has been printed 1Mio times aka the first big hit with enough 3D printers in circulation, current manufacturers have lost their position. Parts to fix their current designs are available at little to no cost and everyone can pick the version of XYZ they want to print hence they will not be able to force new product versions anymore. We have seen all this before with other forms of copyright theft. The means, with exclusion of satisfactory distribution of 3D printers, are in place and the legal threats have proven to be a rather toothless tiger. It’s still hard to see which sub-category is going to spring to live first, printing whole products, printing spare parts or printing add-ons and I think in the end it will depend on where somebody has the first ingenious idea. Finally it won’t matter though which snowball starts the avalanche, the result will be the same.

 

Other supporting factors:

One other critical aspect of how quickly this whole thing is going to happen could also be 3D scanning. This field is making rapid progress as proven through products like Kinect or the upcoming Google Glass so I would not expect it to be the major holdup. There’s also the fact that 3D-CAD design is very much established, free applications are available and use of the technology to manually create digital blueprints of existing things should, although time consuming, be very much feasible given the amount of qualified designers. Add the fact of novelty and potential revenue from a newly emerging market and the first undergrad is going to create files for everything in their room as a coursework… In reality the process of creating 3D printer friendly files of the most essential everyday items, repair parts and interesting “stuff” which was sold within the last 5 years is achievable, after all everything only has to be documented once. Just have a look at the amount of instructables available. Most of them are already “strip and rebuild” projects which are documented with a video camera. Make that a different camera and exploit the additional documentation/drawings and we’ve got quite some collection of data to start printing. I still remember vividly the initial discussions I had when I started to rip my CD collection, nobody believed me that soon everybody would have their music available in digital form and the biggest veto argument was that nobody would spend the same amount of time as me especially since the whole process only really got useful once one also scanned in the covers and typed up the song titles. Reality is that today I can insert a CD into the iMac which will then automatically identify it, suck down the titles and artwork from a couple of online databases and then dump the whole lot onto my drive. And, although nobody believed me back then, all this did not take 30 odd years because although it seems a mamuth task for the first person to digitise their collection further users found that they could build on this work and suddenly found themselves in a position where they could simply download the whole lot without spending any time of their own at all. Making files to copy the things around you will be exactly the same scenario with the same result, most people just can’t look beyond their own door step.

Once the process is in full swing we’ll obviously have individuals printing for their own requirements but also small scale industrial 3D printing simply because the little commercial printers won’t be able to print at the volume some people are going to require (e.g. small local businesses). Where the line needs to be drawn between 3D printing and industrial printing is probably going to be a hard decision and quite blurry, my best guess is that it’s going to be done based on volume. Obviously it’s important to distinguish between residential and commercial/industrial production to avoid illegal mass production, illegal workers and to ensure that employers follow all employment laws.

 

Dangers or new possibilities?
Initially there will be the unavoidable uproar of “we’re all going to loose our jobs” but actually this is only partially true if at all. It will more likely result in a shift in type of roles or even an increase of local lower pay roles.
These days the main earners from industrial production are very few individuals. Due to process automation fewer and fewer actual people are needed and the ones needed beyond a management pay grade are very highly payed and trained individuals to keep the automated systems alive and the designers of the “new stuff”. We’re still going to need some of those for larger scale objects (it’s unlikely that you can print a car anywhere soon unless you have another house to store the required printer).
Delivery drivers won’t see much of a decrease either. The huge chunk of deliveries I expect to be pushed out to people’s doors in 2-3 years will be food and, thanks to 3D printing, raw materials for people to print their own “stuff”. The bigger threat I see for delivery drivers are drones but that’s a post for another day.
In addition to this there is a whole array of new local job profiles which I expect to emerge including training for them and surrounding industry to produce tools etc. The most obvious one I think is the maker. He/she’s the one which people contact to solve problems. A bit like a new type of advanced techy handy man this person will have knowledge in electronics as well as engineering and know where to get the necessary raw materials and further specialists if required. This person will be able to handle smaller repairs/improvements with locally printed parts as well as automation/improvement to local processes/infrastructure with established rapid-prototyping platforms and their successors (Arduino/RasPi) but also have a good eye for design and colours as the results will be in direct contact with the end customer. Further specialists will be drawn in on demand for more labor intensive tasks (dig the 20m pond for the new automated pump) or special trade skills governed by additional laws (gas/electricity etc). This will put said new trade of a maker into a extremely powerful position. Other trades will depend on this one and a huge amount of knowledge, materials and services will flow past/through this profile. I can envisage local maker shops just as well as out-of-the transit makers. Many people will be able to operate their new 3D printers but they will require assistance for projects beyond a certain scope which means they are likely to require the maker’s help for this. Where home automation today boils down to buying another generic product which can only ever fit partially people will get exposed to the ecosystem around their 3D printers which was born in the rapid development and maker world hence soon start to request the presence of their local maker on a regular basis. In fact these new maker roles already exist, admittedly on a very small scale, and are currently present as the people behind the web shops which supply the maker ecosystem and to some degree also members of local hackerspaces which already influence teaching of the next generation.
On a bigger scale larger companies or even towns could start to see it necessary or at least as advantageous to have their own permanently employed maker/makers. This could also be fuelled by new legislate to decrease the amount of “old stuff” we throw away. It might simply be cheaper to employ someone to fix if the penalties are high enough and I expect those to raise sharply in the future given the size of rubbish mountains and pollutants around us. Also natural resources are not going to last forever so there will be a point in time where it will simply not be possible to constantly recreate everything rather than fix which will again be reflected in rising prices for said materials which is going to justify even first world salaries for repair work.
Another thing I foresee very much from the start when residential 3D printing takes off which makes me happy is the fact that designs are going to improve. The big brands will simply not be able to push for new product iterations anymore so their only hope for competition against “the maker round the corner” is provision of high quality designs and associated spare parts but also the fact that their designs need to be highly functional, easy to maintain and also reasonably pretty. We have the pretty bit now but I think we’ve lost the first two aspects over the last 10-15 years. As another positive result I would expect a lively link between local makers and manufacturers which will allow for feedback to flow back to manufacturers on a scale which we currently don’t have which will again improve the products and make them more suitable for the end users.

There are unfortunately clear dangers attached to 3D printing as well which can not be ignored and they will need dealing with. First example I’d like to mention are low quality/illegal materials. 3D printers will be operated at home so the raw materials need to meet certain health standards. Todays filaments get heated to melt them down and build up the new “stuff” and it’s just a matter of time until the first illegal filaments hit the market which might fill the room with “god knows what” when melting. Unhealthy filaments/materials will also be problematic as some of the newly printed “stuff” will get in direct contact with the customer and their food (new knife, new blade for food processor) which raises the bar for healthy materials even higher. In the long run I’d expect lawful punishments for circumvention of new laws which govern those new 3D printing materials just like we’ve got them in other areas these days. To avoid other issues there could easily be different “grades” of material. There is no need for all material to be expensive to a degree where is can be allowed to get in contact with food. This will probably be a cost vs safety exercise and depend on designs/security on the printer facilities as well as the future social situation (<- I’ll never give up on hoping society improves and monkey starts to “think” before monkey “does” ;) .
Second example, and that’s the one I personally dislike, is weapons. It will unfortunately be possible to abuse this technology like any other technology. Printing of weapons like plastic knifes will be hard to prevent as many people will have legitimate reasons to print them so a cap on quantities for certain “new things” is probably needed but might be hard to implement and enforce in reality.

 

Final thoughts:

I’m all for 3D printing but as outlined above there are some dangers which will need addressing. This woud obviously be easier if they were to be taken into account now rather than retrospectively once the first million printers have sold but, looking back in time, it is likely that nothing will get done until it’s an ever so slightly tiny bit too late or in other words until we can really no longer delay spending some of the scarce resources of government funded time and money. The thing I’m most excited about looking at the whole subject is the fact that I expect the advent of “3D printing for the masses” to have a very positive impact on society and not only improve local communities but also have beneficial long term effects on the quality and maintainability of the “stuff” we own as well as the long term ecological sustainability of our society on planet earth.

FacebookGoogle GmailEvernoteDeliciousShare

Arduino Project 11 (2D/3D pictures) – Measuring a water tank level v2 (HC-SR04 Ultrasonic Rangefinder/Arduino Uno/1.0)

1. Introduction:
I made a water level sensor a little while a go to measure the water level in my underground rainwater harvesting tank. Thanks to the Jubilee I found time to finally setup the first part of my Arduino/Xbee wireless sensor network and the first sensor node was also meant to read from this water level sensor. I was somewhat surprised when it only returned 0s so I went and had a closer look. How the slug got into the enclosure is still a mystery to me… but looking at the bright side (after the uncontrolled swearing) I now had a reason to build a much better water level sensor :)

water level sensor vs slug

 

2. Add a few new bits…:
I’ve based the new sensor on the little perf-board from my sensor in Arduino project 6 but swapped the SRF05 for a HC-SR04 and mounted the result into a little square IP65 enclosure from Maplin.
Last shopping spree on ebay has resulted in me now being in possession of five HC-SR04 ultrasonic range finders which are very much a cheap “alternative to the SRF04. These work with the same code I used for the old sensor and have the same pins.

HC-SR04 top

HC-SR04 bottom

Since Vishay provided me with a whole bunch of free 10KΩ thermistor samples (I’m planning to use these for my soil humidity/temperature sensors for the upcoming Arduino controlled greenhouse v2 project) I added one of those to the perf-board together with the matching 10KΩ resistor.

 

3. Stir…:
- Remove the angled pin headers from the HC-SR04 and solder wires directly to the sensors control board
- drill two eyes into the top of the enclosure for the sensor eyes
- drill two more tiny wholes into the bottom of the enclosure for the LEDs
- mount sensor and perf-board into enclosure
- pass wire into the enclosure and connect everything up
- seal the holes with hot glue
- mount new sensor into collar of water tank

tank_sensor_v2_top

tank_sensor_v2_bottom

tank_sensor_v2_inside

HC-SR04 Fritzing

tank sensor v2 Fritzing files

 

4. Serve:

After connecting it to the Arduino Uno everything woked well with the same code as before. So I added a bit more code to read out the additional thermistor which also went well.
The result is now my first wireless sensor node which collects temperature, light level and water level which are then uploaded in 3min intervals by the XBee-to-Ethernet concentrator into my MySQL database :)

FacebookGoogle GmailEvernoteDeliciousShare

Copyright © All Rights Reserved · Green Hope Theme by Sivan & schiy · Proudly powered by WordPress


Hit Counter provided by seo company