Today’s changes: More Salesforce goodness

 

Again we released a small update yesterday.

This release features several bug fixes that result in a more stable Memonic.

But we also worked extensively again on the Memonic for Salesforce product.

Improved Sharing on Chatter

With the latest release Salesforce has released new functionality for Chatter. And we have followed suit. After clipping you can simply press the “Share” button to add additional comments for your co-workers to a Memonic note.

Aloha Professional & Group Editions

Finally we are a fully compatible Aloha application. That means that Memonic for Salesforce now works well in the two smaller Salesforce editions: Group and Professional. We’re still waiting for final approval of our new app version in AppExchange. While that is pending we have a small howto on how you can enable our product in your Professional or Group edition Salesforce instance.

 
 

Testing and Building at Memonic

 

As I documented before we develop with Python. Python is an interpreted programming language that doesn’t need compilation. And yet, the Jenkins build server plays a crucial role in our development process with a full 95 builds configured at the moment. How come?

In our case the build server’s main job is testing. For each component we have an extensive suite of automated tests that are run after every commit. If all tests are successful, there are additional tasks that get executed, namely:

  • Create code coverage reports.
  • Create Dojo bundles for JavaScript and CSS files. I documented that extensively in the previous blog post Why we love Dojo at Memonic.
  • Minify the JavaScript and CSS files.
  • Upload all static files (JavaScript, CSS, images) to Amazon S3. In the live system we serve those images using Amazon CloudFront.
  • Create a Python egg (Python’s equivalent to Java’s jar files or Ruby’s gem files).
  • Deploy that egg to our development system.

In the next few sections I’ll explain three of those areas in a bit more detail.

Automated Testing

Most of our frontend and backend services have extensive tests. Those are very important for us to ensure a quality level without having to invest a lot of resources into manual testing.

The motivator to maintain those tests is a simple mechanism: automatic deployment is done only after all tests have passed. That means that for a developer it’s actually the easier route to fix the tests than to manually package and deploy the project.

This simple mechanism ensures that all our test suites are always green (or blue if we hadn’t installed the essential greenballs plugin).

The individual test runs are very quick because we split up our whole platform into many small components. There are 95 different projects at the moment.

One test that we added just a short time ago is for translations. In our translation system there are place holders. For example we’d write “Good morning {first_name}” in the source code. The German translator will then translate that to “Guten Morgen {first_name}”. But sometimes it happens that the translator also translates the variable name so the result is “Guten Morgen {vorname}”. That of course wreaks havoc in production and has happened several time. So eventually we ended up checking for those to make sure that all placeholders are copied untouched into the target string.

Continuous Deployment

As mentioned above we do continuous deployment to the development system. On every commit the build for the corresponding project is triggered. The deployment then consists of a few simple steps.

First we build an egg. Eggs are the Python package format. Then those packages are pushed to a web server. From that web server these packages can then be installed using easy_install or pip. And that’s the final step: a script logs into the development server, updates the package and restarts the corresponding process.

This is a process that would take a bit of time if done manually. Thanks to the automation we make sure that it happens every time somebody commits a change.

In fact this has been so successful at Memonic that my claim is this: if you currently suffer from too many red builds in your project then integrate deployment into your build system. And of course only trigger the deployment process after successful builds!

Static files on Amazon CloudFront

An important build step is uploading all static resources to Amazon S3. We then reference all of those files using a CloudFront endpoint.

The host name we use for that is s.memonic.ch. We chose a different top-level domain on purpose to avoid any pollution with cookies which can especially affect caching by proxy servers.

Because we don’t serve the JavaScript files from the same domain as the HTML files, the initial setup was a bit complicated. In the case of Dojo we had to use their cross-domain builds. But after the initial setup cost we never had
any issues with that.

Conclusion

The build process we have in place is relatively complex. Of course those steps outlined above evolved over several years and didn’t all fall into place overnight.

We have achieved the main purpose which is to maximize developer performance. Every time a developer doesn’t have to worry about how to package a service or upload files to S3 is a win.

 
 

We want you! (If you are a senior software engineer – or a UI designer)

 

Working in a start up is different. It will change your life and the way you used to work. It’s awesome, vibrant, exhausting, character building and anything but boring. Now, for the next phase of Memonic’s development we look for one or two experienced software engineers and an user interaction designer on a rather short notice (starting January). The phase? Yes we are expanding the Memonic platform to become a real-time knowledge gathering tool. Call it the next level of note-taking.

Thus we’re looking for some new awesome people to join our team:

Senior Software Engineer
You are good in Python or comparable programing languages and have a knack for Web technologies. Your strong track record underscores your expert skills. You excel at cutting your teeth in exciting challenges and like to work under the pressure and excitement of a growing startup. Our development methodology Scrum is no hubbub expression to you. More & contact.

User Interaction Designer
You are a true whiz in online user interaction design. Breaking down complex online interaction patterns into easy and usable design is what you excel in and you have a strong track record. Your online design stroke of brush is confident knowing that your design is both practical and exciting. Simply put, people love your designs and like interacting with websites you created. You’ll be responsible for the interaction, usability and design of Memonic. Next to above described skills you are proficient enough in Web technology to know of the complexities of implementing a given interaction pattern. More & contact.

For a product push in the first quarter of 2012 we seek you either for a fix or freelance position. You will be part of the core platform team building this real-time knowledge gathering platform. Within days you will be taking over the responsibility for sizable portions of the platform to be built. All in all: A pretty exciting job.

Become part of a sound, fervent, and vibrant team: We are a team of passionate Internet geeks and entrepreneurs. Together we face the challenge of simplifying the everyday need for information gathering and refining: Discover, follow, collect, and share any interest. We call it Knowledge Curation.

 
 

Made our Monday – Search Memonic from Google Chrome

 

This morning we came across this comment from Sasha Kovaliov:

“Guys, awesome work! Keep it up – stable and simple. Screw evernote and alike ;) Is there any way to search your notes via a custom google search or incorporate it into chrome like diigo has done? Ty!”

Thanks Sasha for the compliment. And yes, Sasha  - and all other Memonic users – their is: Check out this small video for a how to:

 

In text:

  1. Go the the Google Chrome preferences menu
  2. Go to the menu Basics / Manage Search engines
  3. Add a new search engine in the last row – in the last field enter this string: https://www.memonic.com/user/me?search=%s

That’s it & have all a great Monday!

 
 

Comeback of the clip button – WordPress plugin update

 

Happy Friday everyone! Just in time for the weekend we released a new version of the Memonic plugin for WordPress. Not only have we fixed a few bugs, but version 1.1 also brings back the ‘Clip Button’, allowing readers of your blog to save an article to their Memonic collection with just one click.

The squirrel button appears on top of each article, be it on your front page or in the detail view of any article. And this even independently of your design or template! No messing around in the backend or your code, activating is a snap – and just one click away in your WordPress admin interface! The plugin itself will make sure the whole text is being copied to the readers collection.

 
 

Twitter

Twitter Updates

Pressclippings

Memonic Set by press

RSS Feed

memonic Photos

More memonic photos