FogBugzMiddleware for Django

Wednesday, June 03, 2009 by Benjamin Pollack

Django is an increasingly popular Python web framework, being used by such companies as Google and the Washington Post. Django has a concept of “middleware,” which allows you to stash extra processors between your application and the low-level framework. Today, I took some time to write FogBugzMiddleware, a piece of Django middleware that allows you to automatically report 500 and internal 404 errors to your FogBugz install. Installing it takes just a few seconds, and will immediately allow you to start using FogBugz to manage your website’s crash reports.

You can download the software at http://bitbucket.org/bpollack/fogbugz-middleware/. The software is free for use and redistribution under a BSD license.

Categories: FogBugz
Actions: E-mail | Permalink

Removing Problematic Info

Tuesday, April 28, 2009 by Rich Armstrong
I wanted to provide a solid workaround for case deletion, a common customer request.   If you have access to your own FogBugz database, you can edit and delete cases directly. This applies primarily to people hosting their own install of FogBugz.

If you cannot access the database or if you're using FogBugz On Demand, the simplest way of approximating deletion is to sequester the case. Create a new project named "Sensitive Info", and add it to a new department called "Confidential". Set the department permissions such that only site admins have access, then move the case into the new project and close it.  No one other than site admins will be able to see the case or any reference to it (including case relations).  It will not show up in any searches except by site admins.

If you have access to the database and sequestration doesn't work for you, then the following is an example of one way to proceed.  It is offered without guarantee as to its safety or efficacy, but simply as an example of how one might go about moving data in this way. This example will use MySQL, but the process should be applicable to Access or SQL Server.

First, back up your database.

Let me say that again: back up your database.

Is your database backed up? Okay, then let's proceed.

Next, you'll need to find the ID of the offending BugEvent. Bug events are the entries on the case page.  They look like "Assigned to Joe Biden by Barack Obama" and a timestamp.  They can also take the form of an email, with text like "Replied by Rich" and a timestamp at the top of the email.  If you click on that timestamp, you'll see a #BugEvent value added to the URL.  This is the bug event's ID.

Log into your FogBugz instance of MySQL on the command line.  Run this command:

SHOW DATABASES;

You will get output like this:

+--------------------+
| Database           |
+--------------------+
| information_schema |
| FogBugz            |
| mysql              |
| test               |
+--------------------+
4 rows in set (0.00 sec)

In this case, your FogBugz database is named FogBugz.

Run this SQL:

SELECT * FROM FogBugz.BugEvent 
  WHERE ixBugEvent = 8675309;

The text in the "s" field should match up to the text you want to delete.  Note that if this is an encoded email, the text might be a block of gibberish.

Now, we want to create a table to hold the data we're going to remove.  This is not strictly necessary if you just want to blow away data, but you might come to regret deleting data outright, and this gives you some insurance.

First, create a new database:

CREATE DATABASE DumpingGround;

Now, we want to create an exact replica of the BugEvent table in the new database. To do this, we use a handy feature of MySQL called "SHOW CREATE TABLE". (The equivalent in SQL Server is "Script Table As".)

SHOW CREATE TABLE FogBugz.BugEvent;

You'll get something like this:

| BugEvent | CREATE TABLE `BugEvent` (
  `ixBugEvent` int(11) NOT NULL auto_increment,
  `ixBug` int(11) default '0',
  `sVerb` varchar(128) default NULL,
  `dt` datetime default NULL,
  `ixPerson` int(11) default '0',
  `s` longtext,
  `fEmail` smallint(6) default '0',
  `fExternal` smallint(6) default '0',
  `sChanges` longtext,
  PRIMARY KEY  (`ixBugEvent`),
  KEY `bugindex` (`ixBug`),
  KEY `dtindex` (`dt`),
  KEY `BugEventDtAsc` (`dt`,`ixBugEvent`),
  KEY `BugEventDtDesc` (`dt`,`ixBugEvent`)
) ENGINE=MyISAM AUTO_INCREMENT=18675309 DEFAULT CHARSET=latin1 |

We want to create a copy of that table in a new database to store information.  Take everything between the second set of pipes (||) and copy it off, adding a database name to the table name, so it goes from `BugEvent` to DumpingGround.BugEvent. 

CREATE TABLE DumpingGround.BugEvent (
 ... 
) ENGINE=MyISAM DEFAULT CHARSET=latin1;


Okay, now we have a place to put the data we're going to remove.  Is your database backed up?  Good.  Here's the command to run.

INSERT INTO DumpingGround.bugevent 
  SELECT * FROM FogBugz.bugevent
    WHERE ixBugEvent = 8675309;

You should get this output:
Query OK, 1 row affected (0.00 sec)
Records: 1  Duplicates: 0  Warnings: 0

Right now, these two queries should give you the same results:
SELECT * FROM FogBugz.BugEvent 
  WHERE ixBugEvent = 8675309;
SELECT * FROM DumpingGround.BugEvent 
  WHERE ixBugEvent = 8675309;

Now, we just need to remove the data from the bug event in the FogBugz database.  We don't want to delete the row entirely. It might cause problems with data integrity. So here's what we run:

UPDATE FogBugz.BugEvent 
  SET sVerb = 'Removed', ixPerson = -1, s = '' 
  WHERE ixBugEvent = 8675309;

This changes how the event shows in the interface.  It will now say "Removed by FogBugz". The timestamp and any other information, such as assignments or changes in priority, will be preserved, but the data is gone.  You could also experiment with placing text into the "s" column, such as "Please contact an administrator to retrieve this text: Event# 8675309".  That's up to you.

You'll need to secure the DumpingGround database to your satisfaction so that the data remains preserved but secure.




Actions: E-mail | Permalink

Interruptions and EBS

Wednesday, March 25, 2009 by Rich Armstrong

Recently, on our FogBugz support forum, someone asked how to deal with interruptions in Evidence Based Scheduling.  You can read the full discussion here.

I wanted to post my response here, because it highlights some best practices.  The question was basically this: How do I account for my developers getting interrupted?  Sometimes they get pulled away on support issues.  Sometimes those support issues blow up into full-blown projects.  I want to account for this in FogBugz, but I don't want to add more overhead.  What do I do?

Our answer: 

This is one of those areas where we have to decide whether we make the software as complicated as reality, thereby making the software less usable, or keep the software simple, thereby making it a less-than-perfect reflection of reality.  In general, we lean toward the latter. Indulge me in a semi-related example and then I'll detail how this design philosophy applies to EBS and interruptions.

Often, people write us asking that only X type of user be allowed to set X field (e.g., only project admins can set priority). Rather than adding rules to the software, we recommend that this be addressed at the team level. This is because we've generally found that if you try to enforce your will/process on a person or class of people via software rules, they will either bridle at it, ignore you, or work around the system where possible. If you make the system impossible to work around, they will just stop using it and keep things on Post-it notes on their monitor. Everyone loses. 

The best-case scenario is where everyone agrees with and follows the rule.  In this case, the rule is then unnecessary, because everyone is already on board. All you need is minimal oversight to make sure that errors don't slip through. You can do this with a filter pretty easily. If we did this by disallowing a particular action in the interface, then that simply becomes a hindrance in the 3% of instances where you need to work around the rule. If one project admin is sick and the other one on vacation, you need to bother the site admin to make someone a temporary project admin and... well, you get the point. This makes the software less usable, which makes people use it less, which degrades the value of the software.

With respect to EBS, you mention two different kinds of interruption. In one case, it's a support issue, which might give rise to a couple hours of dev work troubleshooting, replicating, and filing a new bug. In another, the interruption blows up into a fully formed project.  I'll address the latter first, because it's handled in EBS.

You can see the trend of your ship date with the Ship Date Over Time graph.  If the line trends to the right, rather than upward, you are adding new work to the release faster than you can finish it. If interruptions blow up into legitimate sub-projects, you need to estimate those projects and figure out what gets dropped from the current release. This is a prime EBS use case, and sort of the thing it was designed to do.

As to the unplanned interruptions, it might be better to deal with these out-of-system, at least partially, rather than trying to track them explicitly. This will be greatly helped if you break up and estimate your regular development tasks in smaller chunks.  This has several benefits.  Not only will this tighten then ship date distributions for all developers, it will tighten the overall ship date confidence distribution.

Then, you just need to figure out the cases where things took much longer than they were estimated and figure out why.  If your developer gets pulled away from a 1 hour bug into a 3 hour call they would charge 4 hours to a 1 hour case.  This is what we would call a slow velocity. They're not super-easy to tease out of the system but you can review closed cases and see what the elapsed vs. estimated times are.

If a dev gets pulled away on one of these calls, she can simply make a note in the case (e.g., "pulled away on Dunder-Mifflin call") and move on with her work.  Then, when the case shows up on your filter of recently closed cases, you have an explanation for why the case ran long. You can then use your managerial skills to figure out what to do about it. The danger here is forcing the devs to account for other cases in which they overran their estimates, but these can be helpful as well (e.g., "took much longer than expected because the Initech API is a mess."). Whether it's a tech call or a messy dependency, these cases highlight risks to your ship date. Reviewing these cases regularly can help you highlight and manage those risks.  And, as we've seen recently, letting a computer tell you about risk can itself be risky. It's knowledge work, and demands a human touch.


So, to summarize, the cushioning effect of EBS should allow you to focus on shipping software, rather than counting hours. We would only recommend tracking interruptions if the tracking gives you clear, actionable information about how to avoid those interruptions and ship your software. If your top dev gets pulled away for 15 minutes to help a customer, thereby overrunning her 2 hour estimate by 30 minutes (when you figure in task-switching penalties), that's not really a big deal. She might've even gained something by the interaction. If you as a manager see that your devs are constantly overrunning their estimates, and that they're forever on the phone with Dunder-Mifflin, or forever chasing down silly PHP config issues, you might want to dedicate some brain time to figuring out how to resolve the larger issue, rather than spending your time figuring out just exactly how much time you're wasting.

Categories: FogBugz
Tags:
Actions: E-mail | Permalink

Running FogBugz on IIS7? Read this!

Thursday, March 19, 2009 by Michael H. Pryor

Bug: The FogBugz installer by default would turn on server side debugging for FogBugz on a new install.  This means that the FogBugz application would run in single threaded mode and performance is greatly impacted. 

 

 

Fix: We will address this in our next update but if you are running 6.1.44 or anything less, go to the asp settings in IIS7 for FogBugz and expand the Debugging node.  Turn of server side debugging and save your changes.  FogBugz will resume normal speed after this.

Categories: FogBugz
Actions: E-mail | Permalink

An API Tutorial Plus Excel 2007 Export... Plus Zombies!

Wednesday, March 18, 2009 by Rich Armstrong

Sometimes, you just need an Excel spreadsheet.  Sometimes, you just need to be able to slice and dice your cases in the way that's right for you.  Sometimes, you need to drop the case report into a Powerpoint slide to show to the higher-ups.

Sometimes, you need to go out hunting radioactive zombies and you need a hard copy... because neither WiFi nor 3G will penetrate the lead lining of your specially adapted Semi-Autonomous Radioactive Zombie Eradication Vehicle (SARZEV).

Well, if this sounds like you, then I have good news.  I'm happy to report that because Excel 2007 supports XML, it works well with the FogBugz API.  There's a few steps here, but in the process you'll learn a little about Excel and a lot about our super-easy API.

The first step is to come up with a view into the data that suits your needs.  If you're going out to hunt the undead, information is your most powerful weapon. Well, maybe a rail gun is your most powerful weapon... but information is a close second.

First, get your data. Here's an example of the data you might want:

 

To get this from FogBugz to Excel, you just need to get the same data from the API, which sounds scary, but come on! Aren't you going off to destroy the undead?  Why are you scared of a little API action? Seriously, it's easy.

First, you'll need an API token.  This is a 30-character code that will allow you to act via the API as if you were signed in to FogBugz. I use Chrome almost exclusively, but when I am working with the API, I like to use FireFox. Its XML rendering is a bit friendlier.  You want to go to:

https://[your fogbugz]/api.asp?cmd=logon&email=[your email]&password=[your password] 

 

This token is valid until you hit Log Off in the FogBugz interface or log off in the API. Now, you're ready to build your query.

Remember that page with the original search on it?  If you go and look at the URL string, you'll see a searchFor parameter.  This is the encoded search string that you will use to replicate the exact same search in the API.  Here's what mine looked like:

 

Build that into the URL below and you'll start getting your first data back from the API

https://[your fogbugz]/api.asp?token=[your token]&cmd=search&q=[your search parameter]

So, mine is (broken out for clarity):

https://zombiewatch.fogbugz.com/api.asp?
token=k5ea5jecjsv1qjo7gg54mcngebb852
&cmd=search
&q=assignedto:%22lead-lined%22+status:active

This should give you the same list of cases, but with only the case number.  For our example, we need to add a cols parameter to tell FogBugz what case information to return.

&cols=ixBug,sTitle,sVersion,sComputer

Here, we are using the FogBugz built-in custom fields to denote the type of zombie and its decay level.  We call them "Type" and "Decay" in the interface, but the API needs to be consistent, so we use the original names.  The data is unaffected.

So here's what the whole URL looks like. 

Now, open Excel 2007 and open a new spreadsheet, then choose the Data tab and From Other Sources, then From XML Data Import.

 

Paste your URL into the Open dialog that comes up, then hit Open.

 

You might get one or more messages that look like this.  Just hit OK on each of them.

 

 Then you'll get a message like this:

 

Again, it's fine to just click OK here. And here's you're reward.

 

Okay, so it's not the prettiest thing in the world, but click that "Summarize with Pivot Table" button and you can get something pretty good:

 

From here, you can get charts and graphs and all sorts of other neat reports that will help you make your case that the undead will soon rule the earth.

Be careful out there. 

ps. 

I've created an Auditor read-only user on zombiewatch.fogbugz.com, with the password of "password".

If you want, you can get a new token for this user by going here. With that token, you should be able to play around with the API to your heart's desire.  If you want to mess around with your own site, though, you can do so by going to try.fogbugz.com.

OH, and, duh, here's the full documentation on the API.

Actions: E-mail | Permalink

How We Use FogBugz for Recruiting

Tuesday, March 10, 2009 by Dan Ostlund

FogBugz can be used for just about any process oriented activity.  Lots of our customers use it not just to track bugs, but also to do all of their customer support as well.  Problems or questions come in to your Inbox, and your sales or technical support team take care of them.  In conjunction with areas and due dates you get a really effective system with minimal setup effort.  That's one of the many ways we use FogBugz here at Fog Creek.

FogBugz is also used here to handle all of our job applications.  We get hundreds of them, especially during our recruiting for summer interns.  I can't even imagine trying to keep track of all of this in Outlook or something--it just sounds like a total nightmare.

What we do is simple, and it works extremely well.  Applications go to jobs@fogcreek.com, which feeds into the Inbox in a FogBugz install devoted specifically to recruiting.  If you already use FogBugz for project management or customer service, you could just make another mailbox for job applications. 

Our hiring process has been written about before and consists of the following steps: A resume review, a phone interview, a screen sharing interview, and several in-person interviews.  We use these steps to narrow the pool down to the best candidates, hopefully resulting in an offer from us to some scary good programmers.

Every application that comes into the jobs@fogcreek.com email gets an auto-reply, which is at least a little funny, and assures them that a real person will look at the email, asks them to make sure they have provided us with some important information, and also asks them to keep replying using this same email thread.  The last request is because the subject line number tells FogBugz to append any new emails to the existing case, and all of the relevant information is kept in one place.  This works without a hitch.

We take each phase of the interview outlined above and make a fixfor that maps onto it.  We've made, for example, Needs First Review, Needs Phone Interview, Needs Copilot Interview, Needs In Person Interview, and so on.

The case comes into jobs@ and we clean up the title so the case is easy to read (usually, position: person's name, in the case title), and then we move it through the process. The case is then passed off to developers to review.  Candidates who get high ratings are assigned to the Needs Phone Interview fixfor and we arrange a time to talk on the phone.

We even use the free-text fields in FogBugz to keep track of the resume ranking that we give, and we use the remaining field to keep track of the questions that developers have asked the candidates; this keeps us from asking a candidate the same questions in different interviews.

This describes the process for developer and intern candidates, but we hire other kinds of people here too, believe it or not. To keep all of these positions separate we've created Areas like QA, developer, intern (by year), sys admin, and so on.

Using the list view allows us to easily sort by area, or due date, or fixfor so it's easy to see if something is overdue, or if we got a new email from a candidate already in the system, or whether a developer is slacking on resume reviews because they've been too busy eating Fun Dip

Once we decide to bring someone in for a visit to our New York offices we assign the case over to our people who handle the travel arrangements and they pick up the thread.  We follow this all the way through to making offers, and helping with travel and moving arrangements.

We could collect resumes with a web form, but we like the low-barrier nature of just emailing to our jobs address.  Everyone has a resume, and they usually take the time to write a cover letter, so why make them paste all of that stuff into whatever form we'd come up with, which is different from whatever form everyone else comes up with?  It's just more overhead.

That's it.  Collect the resumes, and shepherd them through the process.  A case for each candidate, all the information you'll need right there in the case, and easy to sort and organize.  If you're using some other system for collecting and responding to resumes, give FogBugz a try for this purpose.  I predict you won't go back.

 

Categories: FogCreek | FogBugz
Tags: ,
Actions: E-mail | Permalink

GTD, FogBugz, and Customer Service

Thursday, February 19, 2009 by Dan Ostlund

FogFanz has an interesting article up about using FogBugz as a Getting Things Done (GTD) tool.

It's a great topic, and one that we talk about here a lot.

A growing number of Fog Creek employees use FogBugz as a GTD tool.  Rich, the fellow in charge of our customer support efforts, has designed his workday around a series of lists in FogBugz that give him the next things he needs to do.  Filters are the means of constructing those lists.

Since he's not in control of the volume of customer email he gets, our Inbox for customer service becomes his defining task list for the day.  Rich and the support team work through the Inbox first. He takes care of these cases in the order in which they arrive, and rigidly enforces the "no cherry-picking" rule because cherry picking makes the whole system break down.  You spend (waste) time thinking about what to do with a case several times over, avoid addressing your weak spots, and inevitably answer the customer who tells you how great you are and wait to deal with the one who has the malignant Mono mystery Unix install failure.

To Rich, every case that comes into the Inbox is an opportunity to make that thing never happen again, or at least reduce how often it happens.  He spawns off a case in the Fix It Twice area so that it ends up in a trusted system, one of the keys of GTD: You have to capture everything.  These are the cases that make those Inbox problems go away forever.  These are the cases that will reduce your support volume.  These are the cases that will make support staff and customers happier.

Joel has talked about using Five Whys and Fix it Twice on his blog, and we've even been inspired by these guys.  Here at Fog Creek Fix it Twice has become a bit of an OCD obsession.  Rich has helped us make this less of an ad hoc system.

Anytime there are spare cycles Fix it Twice cases get attention, so when the Inbox is done Rich digs into the Fix it Twice list.  This is where the real magic happens, and where Rich has brilliantly gotten support off the treadmill of trying to keep up with more and more support requests.  This is where he gets to think creatively about how to fix problems permanently, which also happens to be a nice break from the routine of daily support, and turns support into a strategic role--a thinking-person's job--and a role less prone to burn out.

To us, your GTD "inbox" is NOT the same as your FogBugz Inbox.  Your GTD inbox is the Fix it Twice area.  The cases in Fix it Twice are the things you will get done, the things that will reduce your support load.

The progression from processing the Inbox to processing Fix It Twice is as close as we've ever gotten to implementing GTD's idea of contexts in a real way.  Effectively, it boils down to Inbox is @reactive, and Fix it Twice is @strategic.

Rich has a few extra steps (that he may write about), and has put a lot of thought into this FogBugz/GTD system, making it simple to follow, but powerfully effective in reducing the volume of support problems we encounter.

The point is that he has lists in FogBugz that help him to organize his day's work, and that this melding of GTD thinking with strategic customer service thinking has helped us move away from running to catch up, to more effectively driving the direction of support efforts.  If you have a growing customer base and don't make Fix it Twice part of your life, you'll always be trying to run a little faster on a merciless treadmill.  That is until something breaks badly--your support staff gets burned out, or your customers become so sick of your inability to help them that they burn you in effigy (or in modern terms, say nasty things about you on Twitter).

There are lots of tools to help you follow GTD, but FogBugz can definitely work in that role.  It can work as a personal system, or you can make it work for strategic customer service.
 

How Would You Change the FogBugz Interface?

Thursday, February 05, 2009 by Dan Ostlund

We have a fan blog!  We didn't start it--I mean, we're fans of ourselves, but that might be a bit much.  Instead it's kept by a longtime user of FogBugz who has a background in usability testing, and in a recent post he gives FogBugz a theoretical makeover.

He proposes some interesting ideas that are worth a look.  I especially like that he appreciates some of the hard design decisions that go into keeping an interface simple and easy to use, and yet still providing all the functionality customers want.  For more in that vein, you might also take a look at his post on possible FogBugz 7 features (just remember those aren't our promises!).

Drop by the blog and let him know what you think of his FogBugz design ideas.

Tags: ,
Actions: E-mail | Permalink

Placeholders

Saturday, January 31, 2009 by Rich Armstrong

Snippets are a powerful feature of FogBugz, but many people don't know about placeholders in snippets.  These allow you to put a tag in your snippet text that will automatically be replaced with a value from the case.

The easiest way to see how these work is to see them in action. To do this, I created a test snippet which shows me all placeholders and the values they're replaced with.  Take the whole of the text below and copy it into a "test" snippet, then use it in a case (preferably one that's been emailed in).

A lot of folks ask us (as I asked when I first joined) why we don't have a snippet for extracting the first name out of the email's From address.  The simple answer is that this is not just a simple database value that we can pop into the text.  This will be one of my big wishes for future versions of FogBugz, but it won't be coming any time very soon.

Note that these placeholders work in outgoing autoreplies as well. Here's the snippet text: 

{case} (case) for the case ID
{sender} (sender) for the sender's email address
{subject} (subject) for the subject of the message
{ticket} (ticket) for the external ticket ID
{url} (url) for the URL of the FogBugz install
{ticketurl} (ticketurl) for an external link to the case
{ticket} (ticket) for the non-URL portion of the link.
{username} (username) for the name of the logged on user
{useremail} (useremail) for the email of the logged on user 
Categories: General | FogBugz
Tags:
Actions: E-mail | Permalink

Deleting a Wiki Article

Thursday, January 22, 2009 by Rich Armstrong

A lot of people are surprised we don't just have a button to delete a wiki article.  While that would be nice, it's not that simple.  Wiki articles are usually linked to other wiki articles, and these inbound links need to be dealt with before we can move forward with deletion.

Simply go to Wiki > Customize and choose your wiki to edit.  If on the Edit Wiki page you click the "List all articles in this Wiki" link, you'll be taken to a list of all the articles, each of them with a count of inbound links.  Click the number of inbound links and you'll get a pop-up listing the articles that link to the article you'd like to delete.  Once you've edited those articles to remove the links, you can go back to the Edit Wiki page and select "List all orphaned articles in this Wiki".  Your article should now appear in this list, along with a handy delete button.

Categories: FogBugz
Tags: , , ,
Actions: E-mail | Permalink

Change the Starting Case Number in FogBugz

Saturday, January 10, 2009 by Adam Wishneusky

Sometimes there arises the need to increase the starting or next case number in FogBugz. Say you have imported cases into FogBugz from another instance of FogBugz or another tool such as Bugzilla. To avoid case number conflicts, you can change the next case number with a simple API command which you can run right in your web browser.

The FogBugz API accepts both GET and POST HTTP requests, so you can do this by putting the following URLs into your favorite web browser. Note: these URLs are for windows self-hosted installations. PHP installs should use .php in place of .asp and On Demand accounts use https instead of http.

First, login using your email address and password:
http://yourfogbugz/api.asp?cmd=logon&email=youremail&password=yourpassword

Replace the italicized values with the appropriate ones. The API should give you an XML response with a token that looks something like this: 1ntkuxplkqjj6ldk325p512lar6vg2. Copy the token. Now change your staring case number by putting the following URL in your browser:

Update the starting case number:
http://yourfogbugz/api.asp?token=yourtoken&cmd=adminSetCaseNumber&ixBug=desirednumber

Replace the italicized values with the appropriate ones. Use a desirednumber that's higher than your highest imported case number and use the copied token from before for yourtoken.

On a related note, if you're clearing out the cases in your FogBugz database in order to start again without losing your projects and users, you'll want to use TRUNCATE TABLE on both your Bug and BugEvent tables in your database if you want the case number to start from 1 again.

Full FogBugz API Version 5 documentation

Categories: FogBugz
Tags:
Actions: E-mail | Permalink

FogBugz iPhone Spec

Wednesday, December 31, 2008 by Michael H. Pryor

We've had a number of customers contact us asking us if we were going to create an iPhone app for FogBugz, or if they could create one themselves.  For the last few months, we've had a spec sitting around but we're so busy working on FogBugz 7 that we haven't had time to implement it (and I don't see it happening anytime soon).

While we're still going to reserve the right to build this app ourselves, I figured I'd post the spec anyway in case someone wanted to beat us to the punch.  Maybe someone will write something so awesome, that we won't even bother competing -- we'll just point people to theirs.

 Read our first draft iPhone FogBugz application specification.

 

 

Categories: FogBugz
Tags:
Actions: E-mail | Permalink

Get to your FogBugz fast

Tuesday, December 23, 2008 by Dan Ostlund

Rick Minerich has a great little post about how he uses Executor to get to his FogBugz cases quickly.  Executor is a flexible tool that adds lots of functionality to the normal Windows run command window.

Call up Executor by hitting Windows-z.  To set Executor up to go directly to FogBugz you'll need to set up a keyword.  Launch Executor and right-click on it to choose "add keyword" from the menu.  Or you can type in "-key" into the command box to get to the keyword interface.  Once there right-click where the keywords are listed and select "Add..."  Choose a title for it, and in the Command box directly below the keyword paste the url of the case or filter you want to be able to go to. 

This can be done even more quickly by typing "-a [name of command]" to have Executor take you directly to the keyword page with the keyword title already filled in.  There are lots of nicely thought out touches like this in Executor.

I set up a filter in FogBugz that shows me "All open cases assigned to me."  I ran the filter, copied the url, and then pasted that into the command line of the keyword interface as described above.  I named it FBME (Executor doesn't like spaces in the keyword).  Now I can hit Windows-z and then type FBME and it immediately runs that filter and shows me the cases I want.  You could do this with any filter or even with specific cases.

I've scarcely looked at all the options Executor has, but there are a lot of them.  I've had Executor setup to work with my FogBugz install for about ten minutes and I already love it!

Categories: FogBugz
Tags: ,
Actions: E-mail | Permalink

Alterno FogBugz!

Thursday, December 11, 2008 by Dan Ostlund

Matt Johnson, who works for a company that uses FogBugz, unleashed his design skills on FogBugz to make an alternative FogBugz interface that you can take a look at and try.  Instructions on what you'll need to install are on his site. 

Actions: E-mail | Permalink

Shrinking Large SQL Server Transaction Logs

Friday, November 07, 2008 by Rich Armstrong

It's possible with some configurations of SQL server for the transaction logs to grow very large.  This has even at times threatened disk space on some of our customers' servers!  It's an infrequent support request, but to solve this, it's essential to use DBCC SHRINKFILE.  Here's some steps.

Back up your database! 

Launch SQL Server Management Studio.

Open up a query window associated with the database with the large transaction log. (Right-click on the DB and choose new query.)

Get the logical name of the transaction log file.  (Right-click on the DB, select Properties, then in the Files screen, grab the Logical Name... probably ends in something like _Log.)

Execute the following, substituting <log_file_name_Log> with the appropriate logical name of the database log file, no quotes needed:

  1. DBCC SHRINKFILE(<log_file_name_Log>)
  2. BACKUP LOG <database> WITH TRUNCATE_ONLY
  3. DBCC SHRINKFILE(<log_file_name_Log>)

Afterwords, perform a full backup of the database. 

The file should shrink to a ridiculously small shadow of its former self. 

Categories: FogBugz
Actions: E-mail | Permalink