Among rendering die-hards, the name “Maxwell” has long been synonymous with jaw-dropping realism. Maxwell Render’s makers have offered a SketchUp-to-Maxwell solution for a few years, but it required modelers to have access to Maxwell Render Suite—the full, standalone version. For SketchUppers on a budget (or who only need to make the occasional rendering), this wasn’t an ideal arrangement.
A delicious Maxwell render by Rune Skjøldberg.
To accommodate more people, the folks behind Maxwell have just released something they’re calling Maxwell for Google SketchUp. It’s a dedicated photo-renderer, based on the venerable Maxwell rendering engine, that operates entirely inside of SketchUp. Best of all, it has the Big Three qualities going for it:
- Cross-platform. It works on both Windows and Mac systems.
- For both free and Pro. It works on both SketchUp and SketchUp Pro.
- Two entry points. There are free and licensed versions available.
As you can see in this straightforward feature matrix, the free version allows you to render in Draft mode and limits your resulting image to a resolution of 800 pixels. The Licensed version adds Production mode (faster rendering of complex lighting) and increases your maximum output resolution to 1920 pixels. At only $95/75€, the paid version is a bit of a bargain.
Another render by Rune Skjøldberg showcasing multiple light sources.
If you’re looking for all the bells and whistles and extra pixels that Render Suite offers, the “bridge” plugin for sending your SketchUp model to R.S is still available. So really, SketchUp modelers who want Maxwell’s delicious, unbiased results have three options.
All developers agree that saving bandwidth is a critical factor for the success of a mobile application. Less data usage means faster response times and also lower costs for the users as the vast majority of mobile data plans are limited or billed on a per-usage basis.
When using any of the Google Data APIs in your application, you can reduce the amount of data to be transferred by requesting gzip-encoded responses. On average, the size of a page of users returned by the Provisioning API (100 accounts) is about 100 Kb, while the same data, gzip-encoded, is about 5 Kb — 20 times smaller! When you can reduce data sizes at this dramatic scale, the benefits of compression will often outweigh any costs in client-side processing for decompression.
Enabling gzip-encoding in your application requires two steps. You have to edit the
string to contain the value
and you must also include an
header with the same value. For example:
User-Agent: my application - gzip
Client libraries for the various supported programming languages make enabling gzip-encoded responses even easier. For instance, in the .NET client library it is as easy as setting the boolean UseGZip flag of the RequestFactory object:
service.RequestFactory.UseGZip = true;
For any questions, please get in touch with us in the respective forum for the API you’re using.
The OAuth Playground is a great tool to learn how the OAuth flow works. But at the same time it can be used to generate a “long-lived” access token that can be stored, and used later by applications to access data through calls to APIs. These tokens can be used to make command line tools or to run batch jobs.
In this example, I will be using this token and making calls to the Google Provisioning API using the Python client library for Google Data APIs. But the following method can be used for any of the Google Data APIs. This method requires the token is pushed on the
token_store, which is list of all the tokens that get generated in the process of using Python client libraries. In general, the library takes care of it. But in cases where it’s easier to request a token out of band, it can be a useful technique.
Step 1: Generate an Access token using the OAuth Playground.
Go through the following process on the OAuth Playground interface:
- Choose scope(s) of every API you want to use in your application (https://apps-apis.google.com/a/feeds/user/ for the Provisioning API) . Here you can also add scopes which are not visible in the list.
- Choose an encryption method that is the signature method to encode your consumer credentials. (“HMAC-SHA1” is the most common)
- Enter your
consumer_secret in the respective text fields. The consumer_key identifies your domain and is unique to each domain.
After entering all the required details you need to press these buttons on the OAuth Playground in sequence:
- Request token: This will call Google’s OAuth server to issue you a request token.
- Authorize: This will then redirect you to the authorization URL where you can authorize or deny access. At this point if you deny the access you will not be able to generate the Access token. Accepting this will convert the Request token generated in the last step into an Authorized Request token.
- Access token: Finally, this step will exchange the authorized Request token for an Access token.
After the last step the text field captioned auth_token in the OAuth Playground has the required Access token and that captioned access_token_secret has the corresponding token secret to be used later.
Step 2: Use the above token when making calls to the API using a Python Client Library.
Here is an example in Python which uses the OAuth access token that was generated from OAuth Playground to retrieve data for a user.
CONSUMER_KEY = “CONSUMER_KEY”
CONSUMER_SECRET = “CONSUMER_SECRET”
SIG_METHOD = gdata.auth.OAuthSignatureMethod.HMAC_SHA1
TOKEN = “GENERATED_TOKEN_FROM_PLAYGROUND”
TOKEN_SECRET = “GENERATED_TOKEN_SECRET_FROM_PLAYGROUND”
DOMAIN = “your_domain”
client = gdata.apps.service.AppsService(source=”app”, domain=DOMAIN)
client.SetOAuthInputParameters(SIG_METHOD, CONSUMER_KEY, consumer_secret=CONSUMER_SECRET)
temp_token = gdata.auth.OAuthToken(key=TOKEN, secret=TOKEN_SECRET);
temp_token.oauth_input_params = client.GetOAuthInputParameters()
#Make the API calls
user_info = client.RetrieveUser(“username”)
It is important to explicitly set the input parameters as shown above. Whenever you call
SetOuthToken it creates a new token and pushes it into the
token_store. That becomes the current token. Even if you call
SetOAuthInputParameters back to back, it won’t set the input params for the token you set.