Juju Quickstart and the power of bundles

The Juju UI team has been hard at work making it even easier for you to get started with Juju. We’ve got a new tool for everyone that is appropriately named Juju Quickstart and when you combine it with the power of Juju bundles you’re in for something special.

Quickstart is a Juju plugin that aims to help you get up and running with Juju faster than any set of commands you can copy and paste. First, to use Quickstart you need to install it. If you’re on the upcoming Ubuntu Trusty release it’s already there for you. If you’re on an older version of Ubuntu you need to get the Juju stable ppa

sudo add-apt-repository ppa:juju/stable
sudo apt-get update

Installing Quickstart is then just:

sudo apt-get install juju-quickstart

Once you’ve got Quickstart installed you are ready to use it to deploy Juju environments. Just run it with `juju-quickstart`. Quickstart will then open a window to help walk you through setting up your first cloud environment using Juju.

Quickstart can help you configure and setup clouds using LXC (for local environments), OpenStack (which is used for HP Cloud), Windows Azure, and Amazon EC2. It knows what configuration data is required for each cloud provider and provides hints on where to find the information you’ll need.

Once you’ve configured  your cloud provider, Quickstart will bootstrap a Juju environment on it for you. This takes a while on live clouds as this is bringing up instances.

Quickstart does a couple of things to make the environment nicer than your typical bootstrap. First, it will automatically install the Juju GUI for you. It does this on the first machine brought up in the environment so that it’s co-located, which means it comes up much faster and does not incur the cost of a separate machine.  Once the GUI is up and running, Quickstart will automatically launch your browser and log you into the GUI. This saves you from having to copy and paste your admin secret to log in.

If you would like to setup additional environments you can re-launch Quickstart at any time. Use juju-quickstart -i to get back to the guided setup.

Once the environment is up Quickstart still helps you out by providing a shortcut to get back to the Juju GUI running. It will auto launch your browser, find the right IP address of the GUI, and auto log you in. Come back the next day and Quickstart is still the fastest way to get back into your environment.

Finally, Quickstart works great with the new Juju charm bundles feature. A bundle is a set of services with a specific configuration and their corresponding relations that can be deployed together via a single step. Instead of deploying a single service, they can be used to deploy an entire workload, with working relations and configuration. The use of bundles allows for easy repeatability and for sharing of complex, multi-service deployments. Quickstart can accept a bundle and will deploy that bundle for you. If the environment is not bootstrapped it will bring up the environment, install the GUI, and then deploy the bundle.

For instance, here is the one command needed to deploy a bundle that we’ve created and shared:

juju-quickstart bundle:~jorge/mongodb-cluster/1/mongodb-cluster

If the environment is already bootstrapped and running then Quickstart will just deploy the bundle. The two features together work great for testing repeatable deployments. What’s great is that the power of Juju means you can test this deployment on multiple clouds effortlessly.  For instance you can design and configure your bundle locally via LXC and, when satisfied, deploy it to a real environment, simply by changing the environment command-line option when launching Quickstart.

Try out Quickstart and bundles and let us know what you think. Feel free to hop into our irc channel #juju on Freenode if you’ve got any questions. We’re happy to help.

Make sure to check out Mat’s great YouTube video walk through as well over on the Juju GUI blog.

Bookie Sprint – Aug 31st

It’s time for another Bookie sprint!

When – Saturday August 31st

What time – Starts at 11am

Where – my house! Ping me for address/map info if you’re coming along. Map out to Clarkston, MI.

What will we be working on?

The goal is to work on test coverage and breadability article parsing. Are you new to application testing? Come out and learn while helping out an open source project.

If you want to participate online please join our irc channel #bookie on freenode.net. If there’s something else you’d rather work on then please let me know and I’ll be happy to do whatever I can to aid in participation.

Pebble: first impressions

pebble_image

Some time back in April of 2012 someone on Twitter linked to this Kickstarter campaign to raise funds to build a very geeky watch. The idea was interesting to me. I love my android phone, but it’s in my pocket all day. The idea of getting texts on my wrist while driving, working, and woodworking was intriguing. Not all messages require me to pull out my phone, unlock it, and view what was up. So I supported it.

Here we are, not that far from a year later, and I’ve gotten a copy of the watch. I’ve been using it for the past few days and wanted to put out there my feedback. There’s a bit out there already, but hey, my turn!

The Good

Does it work like it’s supposed to? Definitely! I’ve been getting texts and calendar notifications on the watch and it’s been really nice. Simple texts like the one from my wife “on my way home” have been nice to just press a button and dismiss. Calendar notifications as well. I’m up getting a drink and a meeting notice buzzes my wrist with a note what’s coming up. It’s much nicer than pulling out the phone. The one downside is that when you do pull your phone out there’s a bunch of notifications to dismiss and you want to make sure you got them all.

As for fit, I need to get a replacement wrist band, but it’s not that bad. I was worried about the size of the face, but I’ve not found that it’s actually not that large. There are much larger watches out there by far. I do find that it rotates around and ends up on the bone every once in a while, but I’m hoping a better watch band will help with that. I’d rather they put the $$ into the device and less into meeting everyone’s private feelings about what makes a great watch band, so no complaints.

Battery life isn’t really tested yet. I charged it when I first got it and I’m on day 3. This includes leaving it overnight hooked up to my phone which I should probably stop I guess. My phone battery seems ok as well. It’s hard to judge as I’ve got a nearly 1yr old Galaxy Nexus with a battery that needs replacement currently.

The Potential

I’m not going to go down the ‘bad’ road here. This is a new product, just released, and it’s getting updates so let’s just concentrate on what could be better.

The first thing is the navigation. It came out during the initial demos. The nav menu is setup in a way that needs love. If I have to have watch faces on there as full app status, then I should be able to remove ones I don’t use so that navigation is less painful. Honestly, watchfaces need a sub nav. Settings already has this, so the concept should be easy to implement.

Along those lines, back from the home menu should activate the watch face. I once changed watch faces because I was in the settings and waiting for the home nav to timeout back to the watch face. In that time I moved in my wrist in a way that activated a new watch face on accident. Doh!

Next up, we really really need the sdk. Currently, there’s just a limited set of uses. It’s great for texts/calender notifications, but there’s so much more that could be possible. Imagine a pomodoro app for the time management geeks, or hooking up the Field Trip app into notifications as you walk around. There’s a lot of potential and the sdk needs to come out to enable a lot of it.

It really needs a battery indicator somehow. I’d really settle for a number value in the settings/about area. If I’m going to trust this as my watch I need to have an idea when I leave the house if it’s going to make it or not. If it’s meant to charge once a week, I’m not going to have a full recollection of the last time I put it on the charger. Was that Sunday? or maybe it was Saturday? I don’t think it needs to be too prominent though.

The final thing is more a nitpick. I listen to Audible a lot on my phone. While doing the dishes, cleaning the house, making dinner, all the time. So I really love the idea of using my watch to start/stop vs using my phone itself as it sits in my pocket. However, the integration there isn’t perfect. If I’m playing a book and use the music app to pause, it will pause my book, but starts the Google Music application. Then another pause will stop that music as well. However, I can’t then start back up again. Somehow, my bluetooth speaker and headphones talk to Android in a way that it can start/stop any audio application. It just starts the last thing playing, podcasts in DogCatcher, books in Audible, or music in Google Music. I really want the pebble music app to work like that as well.

Conclusion

I really like the Pebble, but a big part of my like is seeing the potential. I think they made a great decision to not try to make the watch the computer and use the phone for that. I hope they don’t ever stray from that decision. I also really like how Android has made things much nicer/easier for them. I can’t wait to see what other apps can do with a Pebble intent that would allow exposing some UX away from the device itself. If you’re a dev I’ll finish up with a few wishlist items for people to work on:

  • Google Authenticator app on the watch to show the number generated
  • Google now card info: weather, flight upcoming, upcoming meeting
  • Syncing alarms from device to watch
  • Twitter replies/DM notifications
  • Field Trip app info when you pass by a specific place
  • Guidebook integration with next talk/room information

Bookie 0.4: one week retrospective

Phew, that was a whirlwind of a week. Just over one week ago I finally released Bookie 0.4 and published the blog post to reddit as an announcement. This introduced signups and I was eager to see if there was real interest in the project now that users could sign up and try things out.

By the numbers

Traffic definitely came.

  • The blog post picked up 800 visits over the two days in the weekend.
  • https://bmark.us grabbed 360 unique new visitors.
  • We went from 58 to 126 activated user accounts.
  • Those users brought us to over 26,000 bookmarks stored in the site.

Complications

Of course, any swarm of new users finds the holes in the system and Bookie was no different. There were a few issues. First, the celery task that sends out emails on signup wasn’t running because the email config wasn’t setup right. This was a pretty quick fix. Next, the import system wasn’t filling out the path for uploaded files correctly. This one was another pretty easy fix, but I managed imports manually until I got the fix deployed.

The big thing was that, for probably the first time, all three moving parts to the system were trying to store bookmarks at once. The celery backend, the web UI, and a cron script that looks for new bookmarks without readable content and fetches it for storing. All of these hit the Whoosh fulltext index and caused locking issues that broke both imports and saving new bookmarks from the webui until I figured out the issue and just reset the fulltext index.

It was pretty bad timing as I could see users trying to add test bookmarks via the web interface. Google realtime analytics is pretty entrancing to watch. In the end I had to run to the Whoosh docs and change things up to use the async writer instead of the default locking mechanism. This got things running again, but the problem now is that I had to remove all the existing fulltext index. I’ve still got to finish a background job that will walk through all bookmarks and index them.

At some point I might need to remove the fulltext indexing from the current SqlAlchemy event hooks, but as purely background celery jobs that I can control from one place easier. This would remove the lock at all from the cron job and the web ui.

Disappointments

While I could see the charts showing traffic, it was tough because it was pretty invisible traffic. There were only three new users into the #bookie irc channel, and only a few people left comments in the reddit thread. No one left a comment on the blog post. Both my Twitter account and the Bookie accountgained fewer than 5 new followers. While the repository was starred many times, only two forks were created.

Going forward

There are a few new users active over the last week, and I’ve gotten a pair of pull requests. While the saving of new bookmarks was broken for a lot longer than I’d have liked, the site never went down. Imports were done in a semi-reasonable time frame. All of this felt pretty great and is encouraging for future work. I still need to finish fixing up the readable parsing. It’s the big selling point of Bookie, and the fact that fulltext search and readable parsed content for all bookmarks isn’t there is frustrating.

Here’s looking forward to great work and a more popular release announcement for Bookie 0.5.

Bookie 0.4 released into the wild!

Bookie is a Python based open source bookmark managing web application that includes content archiving, a Chrome extension, and much more.

Phew, that took a lot longer than expected. I’ve tagged Bookie 0.4 and the live site is updated to run it.

This brings a ton of work on getting an updated webui with some client side MVC, an API, Celery job running backend, some stats, and spin off projects such as breadability and a cli client.

The big thing is that signups are now there as well as a landing page. So hopefully this will spike up interest in new users checking out Bookie.

There are still a ton of long term ideas to work on with Bookie. I’d like to get a ‘reading’ view setup so that you can easily run through the bookmarks you’ve marked `toread`, especially in a mobile view. <3 my N7. I also want to work on getting suggestions for related bookmarks, suggested tags based on content, and other interesting machine learning type problems.

If you're the type that takes your bookmarks seriously give it a try. If you don't want to run your own instance, sign up to https://bmark.us and try it out there.

You can get an idea of the roadmap we're working off of on the Trello board.

Bookie weekly status report: May 6th 2012

This week was spent on a big side project. I’ve been trying like mad to update the python-readability library and take it over to help use it in the Bookie project space. After spending a ton of time trying to do just this I gave up.

I now present the breadability package. It’s a fresh port from the arc90 readability.js using the knowledge I’ve gained from all the other work and trying to stick to the JS file that’s the original inspiration.

I’ve got a bunch more work to do to add tests, get it in the build server, etc.

If you’ve been using one of the other dozen ports out there give this a shot. There’s work to be done, but I’d love to get some real work use in there, let me know what sites don’t work well, etc.

Weekly Status Report: April 29th

More hacking! Spent a big part of the week working on my Penguicon presentation so few commits.

Bookie Parser

  • Tweaked the readable view with some nice CSS, dark background, favicon support, etc. Much nicer to read article with it now.
  • Got the tests running on the TravisCI service.
  • Updated the API to fill out and support all the bits of data I need for this to replace my readable parsing on the main Bookie project.
  • Some refactoring and cleaning up duplicate code.

Bookie

The big thing here was to start up some JS to use the Bookie Parser api in order to load the readable content of a website as you’re bookmarking it from the edit page. In this way, users of the bookmarklet will have a better experience as they can now see their article, but it’s shown in cleaned up readable form. I need to clean it up and catch some edge/error cases, but it’s a start. Once it’s solid we can then use that content to store the page content and have immediate readable results instead of waiting for the next cron job to run in the background.

Bookie Weekly Update: April 22nd 2012

Another week, another few lines of code, and yay for two weeks in a row!

Bookie

Not a ton here, just some CSS updates and updating the backup script for pulling the INI correctly.

Bookie Parser

I spent some time cleaning up the CSS. I did some research on the most readable fonts for screens and surprisingly, it seems that sans serif wins on digital displays. So I updated the CSS and combined with some work on the Bookie main CSS files to make the readable pages a bit nicer. I’ve still got some more cleanup to do, but it reads a bit nicer now.

I also fixed the html generated to not have the empty body tag. It was due to the way the readable parsing library was giving me a full html document of content. See the updates over there for some bigger updates.

Finally, I added a form on the main page so you can try it out on a url just by entering it. So if you’re just curious what it does, go try it out!

Bookie Api

Just added a ping command. It should help make sure that the configuration is correct for new users. It’s also a nice start to a non-admin specific api command. A little bit of cleanup aside from that, but nothing major.

readability_lxml

Currently, Bookie uses a library called decruft for parsing html pages for the actual important article content. The bookie_parser project is using a different fork of that called readability_lxml. The author is a bit open to merging changes in and actually says she’s in ‘maintenance mode’. Since I kind of want a really decent library for this, it’s an important feature, I started hacking on it. In the process, this is where my week of hacking went.

First I updated it to allow me to get back only a partial html document vs an entire <html> doc. I then fixed some bugs, started cleaning up the code (adding tests, making the command line client all nice and argepare’y) etc. In the process I noticed that there’s a big branch in Github that adds a ton of things like multiple page document support and such. I’ve started to try to pull his branch into my work and the origin author’s code. It’s a LOT of git cherry-pick and really a pain since I want to clean up the code as I go. Unfortunately, this just means that Git gets confused on future merges since the code’s changed between commits. Ugh!

I’m about half way done though and I hope this will leave us with one solid library to do this parsing. I’m hoping to kind of take over stewardship of the library as I complete this work. It should hopefully make Bookie and bookie_parser all the more awesome.

The coming week

I’m giving a talk on the YUI JavaScript library at Penguicon. This means my
hacking time will be a bit less since I’ve got a presentation to prepare for. Next week’s status report might be a bit light and boring, but hey, maybe I’ll scrounge up some more beta users of Bookie while at the conference.

Bookie Weekly Status Report Returns! – April 15 2012

Ok, I’m overdue for a ‘weekly’ status report. I’m going to try to kick this back into gear as it helps you out there track things and me feel like I’m moving forward by writing down all the little things I’ve done over the last bit.

Trello board to keep up to date: https://trello.com/board/bookie/4f18c1ac96c79ec27105f228

New Projects

In an effort to add some features to Bookie I’ve ended up starting two new repos of code meant to interact with Bookie.

  1. Bookie Parser

This is meant to start taking over the work of reading the page content and readable parsing the important content out. It was a chance to play with Tornado and Heroku. This also means that in the future I’ll be able to scale out the readable processing serperatly from the main Bookie website and host. It’s pretty bare bones right now and doesn’t directly talk to Bookie, but I’ll look at adding that integration soon as the API stabilizes and I get more tests going in it.

So far the Heroku bit has been pretty awesome. I have to deal with the fact that the app gets shut down and has to restart on first request, but hopefully that gets better as traffic and use picks up. You can tinker with it at http://readable.bmark.us

  1. Bookie Api

I’ve been wanting to start up a command line client for some of the Bookie work. The big thing is that I need tools to help manage invites and such. So it’s currently very admin centric, but eventually I’d like to get this into a ncurses cool command line interface to pull up recent bookmarks and even do some quick searches via the API. Aren’t API’s cool. This will also contain the reference Python API implementations so we’ll have two implementations soon. One in JS and one in Python.

I’ve got a beta version (which is really an alpha) up on PyPi so you can

$ pip install bookie_api
$ bookie ping

Build baby build

I spent some quality time with http://build.bmark.us to get the JS tests running via grover and phantomjs and that’s awesome. I also added the new projects into the builder as well. So, while I don’t have all the tests I need, at least now the ones I do have run consistantly.

Other little tweaks

  • Prettied up the new user invite email and landing page
  • Fixed a bug with dupe tags in the tagcontroller
  • Added more icons from the fontawesome set to pretty up the ui, especially the account page.
  • Lots of changes to the make/build steps for JS and CSS including actually doing the pyscss transition.
  • Everything is now on the final stable release of YUI 3.5. It’s been a good ride through the development releases.

Upcoming events

I’ll be giving a talk at Penguicon on using YUI for JS app development. If you’re in the area stop by. This is Friday April 27th, at 6pm. Then on Saturday I’ve got a Bookie mini-sprint going on. I’ll probably be hacking most of the weekend. Feel free to stop by and check things out.

A few ideas, quick ways to get on the Bookie contrib list

Quick ideas for improving Bookie

Ideas!

Well, with all the great stuff going on with Bookie, I’ve gotten a bit buried in some big changes. The background processing and importing updates are going to take a bit to get right.

This means, there’s a great chance for others to hack up the little tweaks that we need to really add some polish to Bookie. So below I’ve listed a few ideas that should be pretty simple things to add, but with a really good positive and visible effect on the site.

  • Add notification that user has invites

    Now that invites are there, we should highlight a user’s account navigation link to let them know they have invites available. I’ll periodically add them to the system, and we don’t want users to have to go to their account page each time to see they’ve got invites. I think a simple adding of one of the envelope/message type icons from our font-icon set would be perfect, with some sort of hover message to start. We might also want to highlight the block in their account page so it stands out that the invites are available.

  • Flash message system.

    We want to be able to let users know things have happened successfully after doing something that redirected them. Imports are going to be doing this, saving/updating bookmarks, etc. It’d be nice to have a consistent type of ui to drop flash messages in and them to show after a redirect.

  • Show new user message if self bookmarks page has no results

    When a new users starts up and logs in, they default to their own page of bookmarks…which is going to be empty. So we should detect this in our JS code that fetches the results and displays a set of default content with links to things like importing instructions, where to get the chrome extensions, and other handy new user tips.

    Some of this might also be nice to use for the email that a new user gets when they’ve been invited to Bookie.

  • Add firefox bookmark importer

    Ok, so this one is a bit more involved, but really, it’s a single class and a couple of Python methods. The hard part is reading in and figuring out how to match bookmarks to tags in Firefox’s JSON dump of bookmarks. Once we get the Firefox extension rolling, it’ll be great to have a good import system for the browser as well.

Well, here are four things I’d love to see happen in the near future to help make the experience a level nicer for everyone. If you’re interested in all or have any questions, ping me in #bookie in irc or shoot me a comment below. I’d be happy to help walk anyone through these or any other ideas you might have.