Some small improvements to J6.

•March 17, 2010 • Leave a Comment
I have made a couple of small enhancements to JacobSix.  Please watch this video (thanks to ScreenFlow) on what those changes are.

These changes simply make it easier to post a new message to a project, making the Recent Messages tab a little bit more convenient.  Remember, posting a message to a project will notify all team members of that message in an email.  This is one way JacobSix tries to improve communication in a project.  Let me know your thoughts or suggestions on how to make this even better.

Barry

Posted via email from JacobSix Blog

Finally Some Time for JacobSix

•March 14, 2010 • Leave a Comment
I finally had a little bit of time this weekend to work on JacobSix.  You can read about the changes at my latest post on the JacobSix blog.

JacobSix is a simple project management tool I created for myself and anyone else who wants to use it.  It's purposely simple and easy to use.  This weekend, I improved the performance of the Action lists a bit as well as cleaned up some of the page refresh.  Check out JacobSix at http://www.jacobsix.com.  Let me know what you think.

Now for the technical talk.  If you aren't technical or do not care about development, no need to continue…

The page refresh was not clean and would show the raw HTML an instant before it displayed the jQuery UI tab control in the project page.  Apparently, it's best to set the DIV element for the tab to "display:hidden" before you render the tabs using jQuery UI.  Once the tab is created, you can then set $('#tab').show().

Performance improvement was a bit trickier.  Google App Engine's ReferenceProperty is very useful.  However, when you use it to get the value of the referenced property value, GAE executes a query for that property.  If you query and get 25 results, then if you refer to the property in each of those 25 results you query the data store 25 times for each property.  Things slow down pretty quick the more ReferenceProperty types you have.  So, to solve it, I need to store the value I want from each of the referenced properties with the parent Model itself.  I then need to update the local copy whenever the actual data changes.  So much for data normalization, but this shows that you need to do what it takes to make things perform.

Latest Changes to JacobSix

•March 14, 2010 • Leave a Comment
I finally got back to working on JacobSix.  My first job was to improve the performance of the Action lists.  They definitely are a bit faster to load.  Not tremendously, but certainly noticeable.  Especially after the first load.  I will keep working on ways to make the experience even better and continue to make JacobSix a productive tool for your project needs.

Next up.  Contacts.  I'm working on adding a contact feature to JacobSix so you can manage all of your project connections, such as team members and customers.  You will be able to add contacts as needed and invite them to projects.  Permissions will allow you to define what they can and cannot do in a project.  For example, you can allow customers to view progress and post messages or comments, but not close Actions.  Below is a rough design of the contact page.  Still a work in progress.

All of the contacts will be listed for you and you can easily see what projects they are involved in.  I'm still working on the design and the features that will be added.  If you have any suggestions or requests, let me know.

Barry

Posted via email from JacobSix Blog

JacobSix now supports OpenID, Facebook, Twitter logins

•November 15, 2009 • Leave a Comment

JacobSix now supports OpenID, Facebook, and Twitter users. Using RPX from JanRain (https://rpxnow.com/), I was able to incorporate the new login methods in a short time. Besides making account creation very easy for new users of JacobSix, existing users can link their OpenID, Facebook, or Twitter accounts to their existing JacobSix login. This will make it easier to login in the future using the quick RPX sign in widget.

For new users, look for the “Sign In with OpenID” link in either the Sign In page or the Sign Up page. For existing users, check out the changes in the “My Profile” page. There is now an OpenID Provider section for you to link your account. It’s very simple and once you do this, sign in becomes a breeze.

In the profile page, you will also notice a link to verify your email address. Soon, all email addresses will need to be verified in order to receive JacobSix notifications of project updates and invites. You can click the “send verification email” link to resend the email, which will have instructions on how to verify your email address. You can also change your email address.

Lastly, you can now link your Google account to your JacobSix account. This doesn’t do much now, but I will be working on adding Google Apps integration into JacobSix, as well as many other Google features (Wave, IM, Voice). For example, I want to give you access to project information and status through a Google IM contact. You can ask the bot to let you know what’s on the top of your workbook and it will provide the list. More on Google app integration later.

Now, back to work. I’m adding an Action page, which gives you all the 411 on a single action in one page. I want to make it so it’s shareable and linkable so that it can easily be emailed or communicated in different ways. Also, designs are coming along for a possible iPhone application for JacobSix. Exciting!

Posted via email from JacobSix Blog

Moved the JacobSix Blog

•November 5, 2009 • Leave a Comment

We moved the JacobSix blog to it’s own Posterous.  You can now follow it at <a href="http://jacobsix.posterous.com/.

http://jacobsix.posterous.com/.</p>

All of the updates, news, and more will be posted there from now on.  Enjoy!

Latest Version of JacobSix

•November 4, 2009 • Leave a Comment

The latest release of JacobSix is out.  We’ve added a few useful features and hope that you enjoy them.  Here’s the rundown of what is new:

Color Setting for Groups: This allows you to set a color on an Action Group.  The color is then displayed next to any action that is assigned to that group.  This allows you to quickly see each type of action in the action lists.  For example, you can make all “Bugs” the color red, making those actions stand out.

Added Color Coding to the Project Status Feed: The Project Status Feed (which is also a recent new feature) provides a listing of all of the updates being made to a project. You can subscribe to this feed via RSS to keep tabs on what is happening in the project.  We have now added color coding and the users Avatar image next to updates so it’s easy to identify what has changed and by who.  We also added an automatic refresh of the feed so that it updates periodically.  Lastly, the feed now shows bullets of each change that was made so you can not only see that an action was updated, but exactly what was updated.

Some Fixes:  We also corrected some layout issues in the IE browser.  It should work better now.  There are still some layout issues we are working out with IE, but we will get there.

Some of What is Coming: Here are some of the things that will be in the next release of JacobSix.
  • Address Book: We will allow you to collect and create an address book so that you can more easily invite others to a project and communicate with project stakeholders.
  • An Action Page: A single page with all of the details of an action, with the ability to edit and comment on the action.  This page will have a unique URL, so you can more easily share an action with others.
  • Google User Authentication: The ability to authenticate with a Google Account.  This will open the way to integrating Google Docs and other services into JacobSix.
  • OpenID Authentication: We will integrate OpenID into the application, allowing you to login this way if you like.
  • Bulk Changes to Actions: The ability to change the properties of multiple actions at the same time.
  • Imports and More Exports: We will allow importing actions to a project from CSV or XML.
Documentation:  We are also working on our documentation and adding video tutorials and help.  We will be publishing our API also, allowing anyone with some programming knowledge to integrate JacobSix into their applications.

As always, let us hear from you.

Posted via email from JacobSix Blog

Latest Release of JacobSix

•November 4, 2009 • Leave a Comment

The latest release of JacobSix is out.  We’ve added a few useful features and hope that you enjoy them.  Here’s the rundown of what is new:

Color Setting for Groups: This allows you to set a color on an Action Group.  The color is then displayed next to any action that is assigned to that group.  This allows you to quickly see each type of action in the action lists.  For example, you can make all “Bugs” the color red, making those actions stand out.

Download now or preview on posterous

PastedGraphic-2.pdf (34 KB)

Download now or preview on posterous

PastedGraphic-3.pdf (43 KB)

Added Color Coding to the Project Status Feed: The Project Status Feed (which is also a recent new feature) provides a listing of all of the updates being made to a project. You can subscribe to this feed via RSS to keep tabs on what is happening in the project.  We have now added color coding and the users Avatar image next to updates so it’s easy to identify what has changed and by who.  We also added an automatic refresh of the feed so that it updates periodically.  Lastly, the feed now shows bullets of each change that was made so you can not only see that an action was updated, but exactly what was updated.

Download now or preview on posterous

PastedGraphic-4.pdf (63 KB)

Some Fixes:  We also corrected some layout issues in the IE browser.  It should work better now.  There are still some layout issues we are working out with IE, but we will get there.

Some of What is Coming: Here are some of the things that will be in the next release of JacobSix.
  • Address Book: We will allow you to collect and create an address book so that you can more easily invite others to a project and communicate with project stakeholders.
  • An Action Page: A single page with all of the details of an action, with the ability to edit and comment on the action.  This page will have a unique URL, so you can more easily share an action with others.
  • Google User Authentication: The ability to authenticate with a Google Account.  This will open the way to integrating Google Docs and other services into JacobSix.
  • OpenID Authentication: We will integrate OpenID into the application, allowing you to login this way if you like.
  • Bulk Changes to Actions: The ability to change the properties of multiple actions at the same time.
  • Imports and More Exports: We will allow importing actions to a project from CSV or XML.
Documentation:  We are also working on our documentation and adding video tutorials and help.  We will be publishing our API also, allowing anyone with some programming knowledge to integrate JacobSix into their applications.

As always, let us hear from you.

Posted via email from JacobSix Blog

New Landing Page Look

•October 21, 2009 • Leave a Comment

We have spent some time redesigning the front page of JacobSix. We hope you like it and below is a small selection.

The design is to allow us to expand and provide more information to potential users of JacobSix. Some good suggestions came that asked us to provide this information prior to a sign-up. After all, why sign up to something that seems a mystery. We will be adding some screencasts of the application as well as more screen shots for those that want to see what it’s all about before they enter any information.

We will also be working on screencasts demonstrating the functionality of JacobSix as well as working on much needed documentation and help. We will post these videos and links to the help here when we have a good start.

Posted via email from JacobSix Blog

More features in JacobSix. Rolling through the sprint.

•September 8, 2009 • Leave a Comment

I have spent a large amount of time optimizing the site as much as possible given the GAE limitations and recent slowdown.  What I mean by recent slowdown is the exceedingly long response times that happen.  This is not all the time, but enough to become annoying.  A request that typically takes 300ms to complete is taking 20 seconds in some cases.  Using Google App Engine is both a blessing and a curse.  You get many benefits but also are at the mercy of the Google Infrastructure.  Could be anything between point A and B.  So, I cannot pin the blame entirely on Google.  Maybe something in the network.  Who knows.

Besides performance improvements, I have also added Action Filtering to the “All Actions” page and “All Closed Actions” page.  I’ll be creating screencasts soon to demo some of these features and guide people through the site.  It is not a complex application (that was the point), but some of the features are not completely obvious (let me know if this is not the case, I’ll be happy to hear this).  From the All Actions page, there is a little arrow button next to the refresh button at the top right of the listing.  Clicking this will expand the filter options.  You can filter by assigned, group, and priority.  This is a combined filter.  So, choosing assigned and priority will filter on both, not either.

Have fun with the feature and let me know other filters you want to see.  I will add due date filtering (between this date and that date).  That one is in the list.

Where is the slowdown in my GAE App?

•September 5, 2009 • Leave a Comment
Click here to download:

profile_helper.py (1 KB)

Recently I noticed JacobSix not performing very well.  Requests would take a long time sometimes, not always.  Well, I think that's the nature of GAE and you cannot expect consistent response times even from the same exact request doing the same amount of work.  Sometimes it takes 300ms, sometimes 3000ms for the same request.  Well, I wanted to make sure it was not something I injected into the code to cause the slowdown so I wanted to time each section of of the request to find out how long it is taking to complete that section.

I created a Profiler class in Python to do just this.  You simply create an instance of the Profiler class.

self.profiler = Profiler(name="Project Controller", enabled=True)

To start profiling a section of code, you call the start() method:

self.profiler.start()

This marks the start time at UTC Now.

To mark a section, you call the mark() method.

self.profiler.mark('BEFORE FETCH') ... some code here self.profiler.mark('AFTER FETCH')

When you are done timing, you can call the stop() method:

self.profiler.stop() self.profiler.report()

The report() method outputs the results of the timing to logging.info() so you can check it in your logs.  Here is an example output:

======PROFILE REPORT Project Controller====== 09-03 05:00PM 12.837 Mark - Name - Between - Accumulatve 09-03 05:00PM 12.837 0 - BEFORE FETCH - 0ms - 0ms 09-03 05:00PM 12.837 1 - AFTER FETCH - 10ms - 10ms 09-03 05:00PM 12.837 2 - BEFORE JSON - 0ms - 10ms 09-03 05:00PM 12.838 3 - AFTER JSON - 0ms - 10ms 09-03 05:00PM 12.838 4 - BEFORE RENDER - 0ms - 10ms 09-03 05:00PM 12.838 5 - AFTER RENDER - 0ms - 10ms 09-03 05:00PM 12.838 ============================== 09-03 05:00PM 12.838 TOTAL TIME: 0:00:00.010875 (10ms) 09-03 05:00PM 12.838 ======END PROFILE REPORT======

The report shows you each mark with the description given when you called the mark() method.  Next it shows you the time between each mark section.  The first mark is showing you how long (in ms) it took between the starting time and the mark time.  The next mark shows you how long between mark 0 and 1 and so on.  The accumulative time is just that.  Finally, the total time shows you how long it took between the start() and stop() calls.

There may be better ways out there, but this is what I came up with real fast.  I've attached the source if you want it.  Maybe messy, but I had to put it together quick to test some sections of my code out.  I have some improvements in mind.

GAE definitely forces you to be efficient.  In my case, it turns out that most of the processing was in generating the JSON of the results and very little time was in the FETCH.  However, this is not consistent.  Sometimes, it seems to take GAE much longer to both FETCH and access the memcache.

 
Follow

Get every new post delivered to your Inbox.