My reading list - Part 1: Mathematic explorations

Back on the saddle after a long silence, this time bringing a list of books that have kept me busy... is this a good excuse for not writing blog entries???

With a deadline for this afternoon I cannot spend a lot of time describing each book... yet I want to push myself to communicate some of the mind-opening good reads I came across recently. Most are not new books, and probably you will recognise them.

Without further introduction, here's a list of books about maths, with a twist:

Godel, Escher, Bach: and eternal golden braid by D. Hofstadter

The_Emperor's New Mind by Roger Penrose

In Pursuit of the Unknown: 17 Equations That Changed the World by Ian Stewart

Introducing Chaos, a graphic guide

Art and Physics by Leonard Shlain

Things to Make and Do in the Fourth Dimension by Matt Parker

So, these are some of my current and past reads. Have you read them? Any recommendations down these lines?

In future entries I will explore books about design and programming, creative code, artificial intelligence and some of the books that are relevant to my current role as consultant, dealing with business models, process mapping, implementation patterns and Change Management.

If you have followed this blog from a while back you may be asking: Did I abandon BIM altogether? Well no, I just turned my interest to the reasons behind the use of technology (rather than my hands-on "previous life") and I am now helping major Architectural and Engineering companies navigate the tides of BIM, through maturity assessments, implementation programs and corporate initiatives.

Talk soon,


First steps in RevitPythonShell

A couple of months ago, and a couple of weeks ago I have presented  a quick primer of Python scripting on the Revit Platform at the Manchester and London Revit User Groups. Both have been fantastic experiences, summarized the evening I was having a beer (or #BIMbeer) and heard someone say "I've been told that the other day there was an interesting presentation on Python at the Manchester Revit User Group", to what I replied "That was me, thanks!".

My main objective is to trigger curiosity and push at least some people to discover that the programming edge is not that hard to climb, and things appear much nicer from those heights. I have to clarify that among non-programmers I can pretend to be one, but in all ernesty I am a wannabe noob of a programmer, despite a few lines of code I cannot understand does not stop me from trying to understand it!!

Following a recent request on Twitter to share the presentation and thinking that they are probably available somewhere, here comes a brief summary of that presentation with the most important part of it: a list of resources to start learning Python and implement it on the Revit platform (that means that whenever I say "Revit" in the following lines I mean any flavour of Revit including Architecture, Structure, MEP and even Vasari)

First of all, Computational Design could be a logical evolution of using computer power to draw (CAD), then to Model (BIM), and finally to simulate/manipulate design in more complex scenarios. Not necessarily a knowledge you need (yet) but something that could come particularly handy.

To be able to have computers "actively help" in the design process a few aspects need to be covered:

1. Know what to ask

Computers are good at following orders ("Computers do what we asked them to do, which is not always what we want them to do"). If we break the "path from A to Z" into a series of steps, we have suddenly become programmers and the sequence becomes our Script or Algorithm. This is not an over-simplification of Scripting (nobody said those steps would be easy or that the sequence could be extremely contorted), but a demystification aiming at tempting you, the reader, to dare become a programmer. (mind you, since I started programming I am growing a beard and I am talking about Linux... so it might be a one way road!)

As a designer/programmer, you are still in control of the direction of your computer program, regardless of the complex or far-fetched result you may achieve or the number of steps in between. Don't trust the magic "create project" button or the black-box process spitting out magical results. Behind them someone has made the concious decision of following very specific steps, and the output is driven by them.

Some ideas that come to my mind in terms of how to use scripts are:

  • Minimize Repetitive Task Injuries
  • Reuse common task definitions
  • Deliver faster
  • Open up to hundreds of options
  • Explore new approaches to design

2. Talk to the machine

Obviously this is where language comes in, because we are giving the computer directions. And it needs to understand them. I see three levels of communication here: first, a way of giving a bunch of directions directly to your software (think AutoLISP or RhinoSCRIPT or even MACROS in Office). Second, a program running inside your application. A great advantage of this communication is that it enables a different interface, like a graphic environment (think Dynamo or Grasshopper). The third one is enabled through a communication channel talking directly to the software (via the Application Programming Interface, the infamous API!) that enables an external program. So you can create a "shortcut" on Revit that will trigger your script to run.

3. Speak the language

Revit API is based on .NET Framework. What that means I don't understand completely... because to some extent I am not a programmer.  The biggest turn-down I found in the .NET languages is that you have to 'compile' them before running, and the compiler will check it for integrity before accepting it. But as Python does not need the compilation step (it's basically a text file that the computer reads step by step) it will run until it does not know what to do, and I found a great satisfaction in the fact that SOMETHING happened when I run my scripts. I found Python fairly easy to learn and being able to see changes is probably why I got a bit further than all I could do on VB or C++. So the implementation of RevitPythonShell, that enables Revit to follow Python scripts was the entry point to test it on a model, yet I feel I am only scratching the surface!

4. Enough talk. Now get started!

You need to set up your computer to be able to run Python, and know a bit of the language. I found the following book a great source of knowledge and a great step-by-step starter:

It mentions there are several variations of Python (you can have more than one installation). Revit will work if IronPython is installed:

You need to download the RevitPythonShell:
And set it up to work with Revit. The following guide from Zach's BuildZ is specific to Vasari 2.1 but it sets the principles:


Once that is in place you are ready to go!
Take a look at the datasets I used for the MRUG and the LRUG meetings below:

If you have not been to the User Group meetings, I recommend to look at the London one, as it happened a few months later I prepared a "module" for a more advanced implementation. Otherwise compare the two. Also notice that some file addresses are absolute (that is, Python will look for them at a specific path, I encourage you to change the code as needed)

To learn more, and have a lot more fun, here's more learning resources:


I'd like to acknowledge their contribution to my understanding of this topic and publicly thank Daren Thomas, Zed. A. Shaw, Zach Kron, Mark Pilgrim, Jeremy Tammick, Nathan Miller and Matt Jezyk. Their generosity in sharing knowledge is a great step towards making better design!

Next up, I'll be sharing some more Python stuff, including an IFC interpreter I'd like to make work on the RaspberryPi!


Leap forward... to the old school?

Shame on me, I have not written in months, literally!

I am not writing an apology as I did last time. This time I am jumping directly to the latest of my research projects (and skipping a few that I will have to revisit, like Arduino!). I have to admit that I am trying to steal some attention and try not to think too much about all the excitement I am missing at Autodesk University. I am craving for those classes, and the chance to end up in a random advanced technology seminar, not to mention the networking and the chance to talk to my industry heroes.

My latest enterprise is to some extent a jump back in time. It does not include touch-screens, fast computers or mobile phones. So, in times of mobile technology, powerful computing and funky interfaces, why would someone buy a 700 Mhz, 512 Mb RAM, desktop (=powered from a socket on the wall and plugged to a monitor) computer? May suffice that it's only £22. This is not entirely true, it's £22 + local taxes to make up to some £27, and another £20 in a plastic case, a heat sink, a USB hub, an SD card, some cables and adaptors to get some action started... Still a new computer under £50 is not bad!
In case you have not guessed it, or have not heard about it, or have not read my tweets, I just bought a Raspberry Pi.

What is it? An experiment on the minimum modern computer. According to the description on raspberrypi.org :

Our main function is a charitable one – we’re trying to build the cheapest possible computer that provides a certain basic level of functionality, and keeping the price low means we’ve had to make hard decisions about what hardware and interfaces to include.
So the computer is fully operational, with the following technical specs for the core processing:

The SoC is a Broadcom BCM2835. This contains an ARM1176JZFS, with floating point, running at 700Mhz, and a Videocore 4 GPU. The GPU is capable of BluRay quality playback, using H.264 at 40MBits/s. It has a fast 3D core accessed using the supplied OpenGL ES2.0 and OpenVG libraries.
Honestly, I have no clue about what most of that means, but BluRay quality and a fast 3D core got my attention, and there lies my challenge to make something beautiful out of it. The recommended beginner Operating System is Debian (or more precisely Raspbian), and they support Python as educational programming language, and I cannot agree more the latter! I found Python easy to understand and fast to learn. But Debian... that's a different animal!!! I learned that Debian is a variation of Unix, and according to  Tollef Fog Heen (quoted in the Debian Reference preface) : "Unix IS user friendly… It's just selective about who its friends are.". Will I manage to be friends with Debian?

After some weeks waiting for the board to be delivered, trial-and-error, plugging the right cables in the right places, I turned my RaspberryPi on. Suddenly I found myself back in the 80's, in front of a black screen scrolling text faster than I could read it, informing of all the background operations happening before I could start interacting with the machine. Then... the cursor staring at me, expecting an input. What's next?

Well, it all starts somewhere, so here I am starting my steep learning curve of Unix, making sense of a small computer and hoping to pull out some interesting project, and deciding to go back to my old blog, dust off the spiderwebs and reporting any small progress I make in my Old School shell command line, my Python programming and a new form of computing.

Let the fun begin!!!


WoodStEx datasets

Dear regular follower, please excuse my abuse of your patience. I am presenting a class and would like the attendees to download the class material.
All this info has been published in a similar flavour under the Autodesk University "Real Projects, Real Maths" class (http://au.autodesk.com/?nd=class&session_id=9373) so don't feel really left out!

I will post about WoodStEx as soon as I get a chance... watch this space!!

Dear StEx attendee,
Just a quick link for the WoodStEx maths class datasets...


Enjoy the class!!


Farewell to 2011, and looking forward to 2012...

I started typing a "back from Autodesk University" post... that never got to publish.
On the last day of the year I am resolving to publish (even) shorter notes, to keep you all in the loop of what I am researching.
My reason for silence during 2011 was that I've been working on some top secret projects and some ongoing projects that can now be mentioned. This year I prepared 4 AU classes, which took also a lot of time. An I did my first lecture as co-speaker and with an invaluable help from Zach Kron (if you don't know his blog, it's a must: http://buildz.blogspot.com/). As I said in the opening statement of the class, I really wanted to attend HIS class, so I figured out that my best bet was to be standing at the front! The class is available online, if you want to find out more about it.
Another highlight of AU was a design challenge, to build "something" with a modular kit of 150 cardboard cutouts, the 123D Fab Challenge. I'll try to get back to this too, it was great fun! My attempt was to build a programmable clockwork puppet, to tell "The sad story of Mr James McFluffy"...

Back on the blogging front, despite not posting since May, according to the Stats for the blog I have received at least a visit a day, of which I am surprised and honoured! I will probably come back to the stats for the blog, I find it surprisingly detailed (in other words, I KNOW WHO YOU ARE - more or less!)

When it comes to projects, the main one was Gatwick. And still is. Here's a video explaining what we've been doing:

It was a presentation for an internal HOK award, and despite a soft tongue-in-cheek format the content sums up a lot of the BIM, Delivery and Collaboration development Ive been working on during the year.

So, as I posted in a tweet (as @UnderNDA) my New Year's Resolution for 2012 is to blog more, and describe what I'm investigating in the field of Architectural Design, with the toys (I meant tools) I've been buying and downloading this year, that include: Arduino, Kinect, Processing, Python, Vasari, Dynamo...
I'm looking forward to a year that will probably see BIM mature to Whole Life Cycle (I'm starting to see extremely interesting integration of data in this sense). Maybe we are about to redefine what an Intelligent Building is... more like the headquarters in the I Robot movie.

So, that's my promise to 2012, a few lines of what I'm up to and sharing the excitement about developing these little projects. See you all next year. If any reader wants me to focus on any specific area, feel free to leave a comment, I promise to pay attention to them!!!

CHAU 2011 y FELIZ 2012, SALUD!!


BIM 360 enabler - a primer

This post is a primer, all the info is UnderNDA, so excuse my lack of citations and images. I am sure we all will be using this procedures more and more in the near future, so there will be plenty of examples to illustrate this. For now, I am slowly unveiling a big "what if"... so big that I cannot wait to see it fully working...

Imagine for a second a world where the Design and Construction team hands over  a model (just like Phil said they would) to the Operations and Management team, that in turn share vital information with the Facility Management team and they all inform the need for a major update of the building, giving specific information of their requirements to the next go of the Design and Construction lads. Nice, isn't it? Are you doing it? Are you aware of someone doing it?... This 360 turn of the Information model is BIM 360.

So, BIM 360 is all about using data from different sources, and managing all sorts of information. The problem is that many times the people accessing that information is not fully Revit-enabled (and to be honest... who is?). Many times the data comes in all sorts of formats and shapes. So we don't want people accessing that information through Revit, or storing data in the Revit model.

In this project I was presented with a Revit model, an Excel spreadsheet with some 20-30 fields for each room (so far, nothing I had not seen before). The additional complication is that the info in the Excel spreadsheet is updated every month, and reviewed quarterly and annually. Automatically I decided that I was not going to push (even if I theoretically could) around 250 fields of data into each room, to then create 250 views and 250 filters to visualize that data...
Besides, the rooms are not visible in 3D!

The answer? Keeping the data in Excel, exporting the Revit model to Navisworks (worth another looong discussion) and hoping that the data will be pushed through. My thinking here is that it's better to get the graphical information "read only" in a (little bit) more user-friendly environment, and keeping the "juicy" data in its original format, one that can also be manipulated by the people that are interested in analyzing it.
The advantage? Spatial awareness of the information, permitting a deeper analysis of what-if scenarios.
Trust me, we are giving "flatland" people a 3rd dimension and they love it!

Now here's where my challenge begun. I exported the Revit data to Excel (including the element ID, that I used to tie data from different sources).
Navisworks Manage 2011 has this DataTools button, that has an "Excel" option to link a Spreadsheet through ODBC. I don't really know what "ODBC" stands for... but as far as I am concern it's an acronym interchangeable with "WTF"... considering how much I got out of it. It turns out 32-bit and 64-bit applications don't talk to each other, so I ended up needing IT to point to a specific workstation to have this working.
First hurdle out of the way, it needs quite a bit of juggling to get the Excel info into Navisworks. Thank God for this post on "Revit Today", that helped me understand the logic of the setup:

Last step was to juggle the Excel file, using some clever conditional formatting and IF statements, trying to dynamically change the colours of the objects in Navisworks. So far it's a bit clunky, but I am being able to choose one field from a drop-down menu in Excel, by selecting an object in Navisworks it will refresh the imported properties, and by running a "material to property" match I can change the colours in my view. I have high hopes on automating some of this, but it seems to be dong what I am asking it to do... which is a lot to say.

I look forward to get some feedback from the end user, hoping that they will like the 3D environment to work on their endless numbers.

Special thanks to Don, who is exploring the Navisworks API to get this working behind the scenes of a proper application, and David, who is supporting the effort and giving me endless advice. If you look for @UnderNDA on twitter you'll see the traffic on this very subject as it develops. Everything else is Under NDA...


On Energy

It's been some time since I started to think on this post.
Basically, every time I hear people talk about forms of energy, or saving energy, or Green Energy or the like, I wonder if those people have the same understanding of Energy I have. Also, when I read how many calories a chocolate bar has, again I think about a proper definition of Energy and its implications.

Without further introduction, here is my question: What is Energy?

From a pure physics definition, Energy is the ability of a physical system to perform work. Work in turn is intended as a force acting along a distance. All this was described by Sir Newton 324 years ago, in his Principia.

An object is capable of storing Energy because its particles are taken to a position (requiring Energy to do so) and will be able to release that Energy later. Imagine you raise an object, then let it go. That's your Force x Distance on the way up stored in the "Potential Energy" and transformed to kinematic Energy when the object gets in motion. Electricity  in particular (maybe what most people think of when talking about Energy) is a more complicated form of energy, because it's about electrons (particles floating around each atom) moving along conductors. The Voltage relates to the force of the electrons, and the Current is somehow related to the Distance. Heat as a form of energy is associated to the vibration of particles, and other forms of energy can be described in similar simplistic way.

The energy is embedded and associated to the mass of the system (as expressed 106 years ago in the famous E= m * c^2, where c is constant - of course).

Only making changes to the atomic composition of the matter (ie atomic fission or fusion) the consequent loss of mass is transformed in energy. In all other transformations the mass remains constant, therefore the energy cannot be created or destroyed, but transferred from a system to another. We are shifting energy from here to there all the time or from one form to another, but we never create or destroy energy.

Potentially all forms of energy can be transformed into one another, although some of them are more difficult to obtain - being heat a common form of "leaking" as a low-entropy form of energy. This means (and all physicist out there are laughing at my simplistic explanation by now) that when transforming electricity into light we loose some energy in the form of heat - so using electricity to produce heat purposely is actually very efficient but it means wasting a lot of energy that was lost when transforming something else in electricity.

Also, heat is also always "positive", so cooling down means actually extracting energy (remember it cannot be destroyed, so you have to find another way of pushing it out!). As this is not as easy as it sounds, we end up using even more energy to dissipate heat (in other words, Air Conditioning is probably the biggest waste of energy). The key to green architecture is to lower the heat production, by reducing the amount of transformations of energy that will create heat as a by-product, and find ways to assimilate heat and convert it to some other useful form of energy.

The implications of this are quite important, because if our facade is "greener" because it bounces off the solar radiation, you are just adding solar gainance to the building next door or contributing to the heat island around your building... but if you are adding a tree before your building or a green wall, you are transforming that energy into wood/mass instead, and getting rid of CO2 in the process. Even more, in winter that tree will let the heat through!

Lastly, about a month ago I went to a ski trip, and recorded my tracks using a GPS (showing off my android phone, of course). It gave me an interesting calorie count, and I started to think how was I spending my energy on the slopes. My conclusion is that when I was sliding down it was gravity and not breakfast calories that was pushing me, so all I was doing was dissipating the potential energy my body had stored getting higher up in the mountain on the chair-lift. My body heat, my muscles aching, were moving my body up and down as the instructor kept repeating, and my energy was moving the snow to turn or stop. At least in theory, the faster you go the less energy you use, but I doubt that's what Cardio Trainer was recording...
In any case, here's a link to one of the tracks... which is really cool!

Cardio Trainer Ski Track