Some small improvements to J6.
•March 17, 2010 • Leave a CommentFinally Some Time for JacobSix
•March 14, 2010 • Leave a CommentLatest Changes to JacobSix
•March 14, 2010 • Leave a CommentJacobSix now supports OpenID, Facebook, Twitter logins
•November 15, 2009 • Leave a CommentJacobSix 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!Moved the JacobSix Blog
•November 5, 2009 • Leave a CommentWe 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 CommentThe 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:
- 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.
Latest Release of JacobSix
•November 4, 2009 • Leave a CommentThe 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:
- 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.
New Landing Page Look
•October 21, 2009 • Leave a CommentWe 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.More features in JacobSix. Rolling through the sprint.
•September 8, 2009 • Leave a CommentI 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 CommentRecently 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.




