An Eventful Update

Kloudless developers can now manage their events even more efficiently using the new Events Endpoint updates. Check out what our engineers have been tinkering with below!

Kloudless Enterprise Events

Connect your Admin account and get access to organization-wide events. Enterprise Events can obtained through the normal events endpoint. The user responsible for the event is specified where applicable. 

Events Endpoint Pagination

The Events endpoint now supports requests of a specific page size and also returns the number of remaining events. It also supports only the retrieval events created after the cloud account has been connected to the Kloudless application. Additionally, a more granular list of event types is also now available, instead of + and -.

S3 Event Notifications

Event data and webhook notifications are now available for changes to data in S3 accounts. Any S3 accounts requiring this feature must be reconnected.

Whether you’re using the cloud, private installs, or Enterprise version of Kloudless, this new update enables your application to respond to activity in cloud storage more effectively.

Not a Kloudless developer yet? Click here to get started. Questions or feedback? Feel free to drop a line at hello@kloudless.com

Sharing files with Citrix ShareFile: a Look at the API

Disclaimer: This is coming from my personal experience with the Citrix ShareFile API and other cloud storage APIs. It is meant as a summary of the good aspects as well as the “gotchas” that I have encountered. Hopefully it will provide some insight into decisions that were made when designing the Kloudless API.
Developing for Enterprise Cloud Storage

Google and Dropbox are household names while Box is in the headlines for its ongoing IPO. However, the enterprise cloud storage space is a completely different landscape, with various companies like SugarSync, Egnyte, Bitcasa, and Citrix ShareFile all competing for companies’ cloud storage needs. What should you, as a developer, consider when addressing enterprise customers’ concerns?

Citrix ShareFile Features

ShareFile recently revamped their API, transitioning from an HTTPS endpoint to an ODATA specific HTTP Rest API. As a developer, the new API looks like many others, offering a familiarity and ease to integrate functionality. However, a few unique features separate ShareFile from the rest.

Control Planes (with Subdomains)
Like many other API providers, Citrix ShareFile implements the OAuth 2.0 protocol for authorization. ShareFile’s endpoints are:

  • Request Token
  • Access Token
  • Refresh Token
  • API requests

The authentication endpoint is separate from API requests based on Control Planes. The Control Plane separates user authentication, access control, reporting, and brokering from where any corporate data is stored. Enterprises can now feel safe about their data as Citrix’s service offers an API to interact with that data.  In addition, the subdomains allow for user creation, which is extremely important for CIOs, enterprises, and other groups. As a developer, I notice that the <appcp> corresponds to a specific control plane (sharefile.com, securevdr.com, etc.), which must be tracked.

On Premise Storage Zones
connectors

In this diagram, you’ll notice the second feature of Citrix ShareFile’s architecture: Storage Zones. Citrix ShareFile gives you the flexibility to choose where corporate data is stored with Citrix-managed Storage Zones or Customer-managed Storage Zones in two flavors: Amazon S3 or Microsoft Azure. Plainly, some companies want their corporate data on premise or on their own servers. This is a great feature for an Enterprise cloud storage provider. Now, as a developer, how does all of this affect me?

ShareFile API

The underlying product architecture of Citrix ShareFile gives insight into how the API is structured. Most endpoints look familiar, but I will highlight the key similarities and differences.

Items endpoint
The Items endpoint is the typical interface to a user’s files and folders. ShareFile has specifically exposed the following entities: File, Folder, Note, Link, and Symbolic Links. Each item entity has its own OData representation with the corresponding functions to create folders, retrieve folder contents, update an item, and even create links to specific items.

Storage Centers and Zones endpoint
The Zones and Storage Centers allow for interaction through the API. This is extremely important if companies want to deploy private storage centers or zones. Other cloud storage providers do not have or expose this functionality because of the architecture. One thing to keep in mind as a developer is that a user’s data may be spread across different storage centers and zones, but to a user, it appears as a single account.

Kloudless and ShareFile

At Sharefile’s Synergy Conference in early May 2014, interesting new features were announced. ShareFile can now connect not only to Sharepoint but a few other enterprise content platforms like Alfresco, Documentum, and Filenet. The connection theme continues, with the Kloudless API allowing developers to connect to enterprise and consumer cloud storage services through a standard API interface. Kloudless gives the developer flexibility in choosing what cloud storage features to integrate into their product including native functionality and user interface components. If you want to develop for users with both personal and company cloud storage accounts, you can get started quickly and easily with Kloudless — we’ll help!

Take a look at developers.kloudless.com as we continue to improve our developer friendly resources (SDKs, API mashups, and example apps)! Have any ideas or questions about the Kloudless API? Leave your questions and comments below, or drop a note to hello@kloudless.com.

Migrating Google Docs to Google Drive

Google’s Data Standardization

Google has been known as the king of (big) data, and Kloudless integrates with Gmail to move data from email to cloud storage. Google’s push for organizing the world’s information and making it universally accessible and useful was ahead of its time. This clearly shows in Google’s design of a data protocol for developers to develop products on Google’s platform. When Kloudless integrated Google Docs, it was part of a larger list of “GData” APIs.

The Documents List API was part of a greater set of APIs following the Google Data Protocol. Besides docs, there were:

  • analytics
  • apps
  • blogger
  • books
  • calendar
  • contacts
  • exif
  • finance
  • geo
  • health
  • marketplace
  • photos
  • sites
  • youtube

When Google Drive was introduced in 2012, Kloudless had an opportunity to retool its functionality. Recently, the rise of JSON has led to APIs moving to a different data standard.

Migrating from Documents List to Drive SDK

The Google Drive SDK uses the same infrastructure as the Documents List API; however, there are a few key differences beyond the inherent syntactical changes.

Authorization Mechanisms and Scopes

At Kloudless, we wanted to facilitate users’ account creation and management. Part of this process was to help users keep track of their identity with OpenID, OAuth 1.0 and OAuth 2.0. Switching from Docs to Drive meant that beyond just switching scopes, we would be moving to a pure OAuth 2.0 implementation to authorize users. Google overhauled their entire authentication system beyond just Google Docs to promote Google+ sign in. The OAuth protocol is an open standard for authorization and many services moved away from the OAuth 1.0 RFC specification to the OAuth 2.0 RFC. OAuth 2.0 focuses on client developer simplicity while providing specific authorization flows for web applications, desktop applications, mobile phones, and living room devices.

Design and Data types and Atom Pub XML to JSON

While Kloudless predominantly uses JSON in most of its API, Google’s Data protocol allows for differentiating data types more succinctly and creating resources with both JSON and Atom Pub XML.  The underlying file store of GDrive allows for more robust querying based on the numerous metadata attributes in the XML (now also in JSON).  Furthermore, Google Drive allows you to have multiple files with the same name and to have multiple parent folders.  The structure of Google Drive is extremely flexible although Collections are now deprecated.

File uploads and secure file storage!

Google Drive allows for 10GB uploads to their service.  While other services allow for unlimited file size like Dropbox (through chunked uploads / desktop client) and Bitcasa, Google Drive’s free tier has a 15GB limit with the cheapest options to upgrade for storage.

You also have the most comprehensive access controls for a consumer application of files with Google Drive.

ss1

ss2

Advantage: Kloudless

Kloudless works hard to have the most current API, so developers can work on user focused applications without worrying about features that no longer exist.  With every major revision to an underlying cloud storage API, Kloudless will update its back-end infrastructure to account for changes with seamless integration.  So for example, any user of the Kloudless product would not have noticed any change when moving from Google Docs to Google Drive.  We aim to provide the same seamless upgrade for all of our cloud storage services in our API.

Let us know if you’ve migrated from Google Docs to Google Drive and what you think!

A primer on debugging Native Client code in Chrome

This isn’t your father’s your average client-side app.

Chromium NaCl

Native what?

Yesterday, I was faced with an unfamiliar 10k line C program that did custom image manipulation. It takes in two arguments: an input image file and a destination for the resulting output file.

This is straightforward to run on the server-side, but I don’t want to maintain varying compute capacity just for an infrequently run, on-demand image conversion script! Before you mention it, no, I am not about to rewrite the entire program in JavaScript, no matter how fun that sounds.

Enter Chromium Native Client, an “open-source technology for running native compiled code in the browser”. Combined with Pepper.JS, I can run binaries in a browser window! Before you bring out the pitchforks, consider that the C program is almost a perfect fit for this! As long as I write a little code to manage that pesky file I/O, it should be smooth sailing from here, right? Not exactly. Turns out the Pepper.JS docs weren’t kidding about getting your hands dirty.

Continue reading

Automating Development Environments with Vagrant and Puppet

Vagrant and Puppet!

Your Situation

This could be quite varied, you could be:

  1. A solo developer looking for a fast/easy way to have a local dev environment that resembles your production environment (say you develop on OS X, but are deploying to an infrastructure running some distribution of Linux. As a bonus, there is also an easy way to deploy to Amazon’s EC2 if you have a solid setup locally.
  2. A member of a team, where everyone has their own development style and want to avoid the headaches of cross-platform support.
  3. Someone who normally sets up servers in a third-party hosting environment, but you want to test your deployment without paying a bunch of money in wasted servers (this is where I am!)

Continue reading