SugarCrm is one of the most recent software apps to catch my attention. I’ve heard a lot about it in the past, but until recently have not played with it. Recently, we installed on our server garden and I’ve been very impressed. While it starts as a contact management system, it has some design features [...]
SugarCrm is one of the most recent software apps to catch my attention. I’ve heard a lot about it in the past, but until recently have not played with it. Recently, we installed on our server garden and I’ve been very impressed. While it starts as a contact management system, it has some design features that allow you to extend the data model, creating modules that include full CRUD capabilities (from what I’ve seen so far at least). I’ll write more on that later. Right now I want to focus on what I found about the different features.
Evaluating commercial open source software lately has been a bit disappointing because at least in one case, Alfresco, the sales team explicitly state that they would never consider a production installation of the OS version. That shocked me. What was equally shocking was the number of end-user bugs we discovered in the OS GA release. To add insult, the community was essentially non-responsive to wiki posts. Evaluating SugarCrm, I wanted to make sure that I know what I’m getting into.
After listening to this podcast from SugarCrm, I’m encouraged by what I heard. Commercial adds the following value to the community edition:
Commercial Only Support
Standard: E-mail, portal, forums; extended, or premium support includes phone support.
Commercial Only Functions
Quotes, contacts, sales forecasting, contracts, partition data among teams, sales reporting, workflow development for processes, word and wireless updating
Professional Services
SugarCrm professional services only work with commercial customers.
I think the core of SugarCrm should be enough for 110% of what I’m looking for, which makes me happy because the commercial version is not cheap. Perhaps that’s the way to do it: make the community version very high quality, but limited in certain ways; make the commercial version expensive enough to support the entire project and make a profit. Sounds like a win-win to me.
I would love to hear your thoughts.
Do you use SugarCrm? What do you like about it? Dislike? What version did you chose and why?
Google Wave looks really amazing for collaboration. And Google has decided to open source this software. Here’s the preview video.
Google Wave looks really amazing for collaboration. And Google has decided to open source this software. Here’s the preview video.
I’ve been spending a lot of time programming lately, trying to get everything running in a CI server (http://hudson.dev.java.net/) along with the rest of my day and night job. Therefore I got particular enjoyment from the following link and thought it worth passing along.
I’ve been spending a lot of time programming lately, trying to get everything running in a CI server (http://hudson.dev.java.net/) along with the rest of my day and night job. Therefore I got particular enjoyment from the following link and thought it worth passing along.
Monopolies are never a good thing:
Google down – Computerworld Blogs.
it was estimated that 5% of the Internet was unavailable or slow. While still relatively small, it does make Google’s growing significance in the Internet an issue
Monopolies are never a good thing:
Google down – Computerworld Blogs.
it was estimated that 5% of the Internet was unavailable or slow. While still relatively small, it does make Google’s growing significance in the Internet an issue
In my quest for increased sanity and simplicity, I’m always thinking about how to be a better project manager. My latest innovation was inspired by Sione Aeschliman of Marylhurst University. Each week she sends email to the stakeholders of a project for which I am the developer. The email is a succinct summary of the [...]
In my quest for increased sanity and simplicity, I’m always thinking about how to be a better project manager. My latest innovation was inspired by Sione Aeschliman of Marylhurst University. Each week she sends email to the stakeholders of a project for which I am the developer. The email is a succinct summary of the status of the project. In includes a list of the open issues, what has been completed since the last email, and any related thoughts.
Inspired by the immediate value of having insight into these key issues I’ve been reorganizing my processes to be able to do that same thing for my projects. (As an aside, I have a hunch that success in business, and possibly happiness in life, is more a function of organizational effectiveness that of intellect. More on that another time.)
Over the years I’ve used a variety of software applications in order to meet this goal. Each seemed great at first, only to spiral down into a roiling sea of confusion and failed expectations. I now believe that project management has very little to do with the tools, and much more to do with paying attention to the right things. Right now, I understand those key factors to be the ability to answer the following questions:
- When is the project scheduled for completion (how this date was derived is a topic for another time)?
- What am I currently waiting for from the client?
- What is the client waiting for from me?
- What are the open issues? In other words, why is the project not down now? Open issues are all the issues that need to be addressed in order for the project to be considered “done.”
- What is the schedule for completing major milestones?
- What other notes are essential for keeping track of this project?
I’m sure that are other key factors to track, but this is what I’ve got so far.
To my mind, any tool that allows me to answer the above questions on a moments notice should work fine. Since I’m tired of paying for web-based systems that claim to manage this, I’ve decided to use a bare-bones document-based approach. Essentially, I have one google doc that lists all my open projects, with links to each project’s project plan. The project plan is a simple document with placeholders for the above information. If you are interested in seeing and even using my template, just follow the link below.
I’m really a frustrated project manager. None of this comes naturally to me, so if you see something I’m doing that’s inappropriate, or if I’m missing some essential steps, I would love to hear about it. But remember, right now I’m not trying to explain the full scope of my project management philosophy, rather just the steps required to provide meaningful status reports.
For years I’ve hosted Angel LMS, and each year it has become a little more cumbersome and my clients have been a little more unhappy.
Now Blackboard has announced a “merger”. But that must really be more of an aquisition. So it goes.
I wonder if this will be a good thing for the open [...]
For years I’ve hosted Angel LMS, and each year it has become a little more cumbersome and my clients have been a little more unhappy.
Now Blackboard has announced a “merger”. But that must really be more of an aquisition. So it goes.
I wonder if this will be a good thing for the open sourcers like Moodle? With less competition, Moodle will feature more prominently as the qualified alternative.
Still, I can’t shake the feeling that less competition is bad for the quality of the products.
I’ll need to think about this one some more before taking a stand…
See the details here:
While creating a time sheet for a client today I encountered a problem I’ve seen in the past: how to convert a time value to a decimal in excel. For some reason, the time tracking tool I use, paymo, doesn’t include time spent on a task, just the start and end dates.
Here’s the formula I used to convert the time value to a decimal:
(HOUR(A1)*60+MINUTE(A1))/60
Unfortunately, I’m not yet smart enough to have come up with this myself. I got it from the link below.
Today I was generating JavaDoc from withing IntelliJ idea, and I saw this error:
javadoc: error – Illegal package name: “”
I tracked it down here: http://www.jetbrains.net/jira/browse/IDEA-11773 and discovered it was the result of spaces in the name of paths in the class path. IMHO idea should be escaping spaces. But it doesn’t.
My [...]
Today I was generating JavaDoc from withing IntelliJ idea, and I saw this error:
javadoc: error – Illegal package name: “”
I tracked it down here: http://www.jetbrains.net/jira/browse/IDEA-11773 and discovered it was the result of spaces in the name of paths in the class path. IMHO idea should be escaping spaces. But it doesn’t.
My short term solution was to put the command from idea into a shell script and modify it there. What’s irritating about this is that the paths in question were IntelliJ’s own installation page. In my case:
/Applications/IntelliJ\ IDEA 8.1.app/lib/j2ee.jar
Ugh. So I can move the install dir for IntelliJ, provided that doesn’t cause additional problems, I should be OK.
Update: at least part of the problem was that I was javadoc’ing a package that included only groovy classes. When I excluded that package, things worked well again.
Converting and resizing from source files to web-ready files is easy with ImageMagick. Searching the web, I was able to put together this little script that saves a lot of time over the alternative (using photoshop batch processing).
#!/bin/sh IMAGE_TYPE=jpg SRC=src-images for file in $SRC/* do filename=${file%.tif} filename=${filename/src-images\//} echo “converting $file to $filename” convert $file [...]
Converting and resizing from source files to web-ready files is easy with ImageMagick. Searching the web, I was able to put together this little script that saves a lot of time over the alternative (using photoshop batch processing).
#!/bin/sh
IMAGE_TYPE=jpg
SRC=src-images
for file in $SRC/*
do
filename=${file%.tif}
filename=${filename/src-images\//}
echo "converting $file to $filename"
convert $file -resize 500 covers/products_lg/$filename.$IMAGE_TYPE
convert $file -resize 200 covers/products_med/$filename.$IMAGE_TYPE
convert $file -resize 72 covers/products_sm/$filename.$IMAGE_TYPE
done
Anyone know how I can simplify that nasty regex: filename=${filename/src-images\//}
I don’t want to hard-code in the dir name. Unfortunately, I don’t have time to master bash now. I’ll live, and even be quite happy, which this current solution.
Some times the easy stuff requires custom code. Searching the web I found a few examples. This one was the most promising, but it has some typos: Example Dir Zip.
So I rolled my own. Note that I use commons logging. If you don’t use logging, just remove the log statements.
Also note [...]
Some times the easy stuff requires custom code. Searching the web I found a few examples. This one was the most promising, but it has some typos: Example Dir Zip.
So I rolled my own. Note that I use commons logging. If you don’t use logging, just remove the log statements.
Also note bad source or destination errors are silently swallowed. I will probably change this.
Also, it doesn’t do any sort of locking. Probably at a minimum the destination file should be locked.
/**
* Zips the directory and all contents from dir into a file named
* filename
*
* @param dirPath path of directory to zip; must exist
* @param filename filename to store contents
*/
public static void zipDir(String dirPath, String filename) {
File dir = new File(dirPath);
if (!dir.isDirectory()) {
log.error(dirPath + " is not a directory");
return;
}
ZipOutputStream out = null;
try {
log.trace("Creating : " + filename);
out = new ZipOutputStream(new FileOutputStream(filename));
addDir(dir, out);
} catch (IOException e) {
log.error(e);
} finally {
if (out != null) {
try {
out.close();
} catch (IOException e) {
log.error("failed to close output file: " + filename, e);
}
}
}
}
private static void addDir(File dir, ZipOutputStream out)
throws IOException {
byte[] tmpBuf = new byte[1024];
// add each file
// if file is a directory, move into it and add all contents recursively
// until done
for (File file : dir.listFiles()) {
if (file.isDirectory()) {
addDir(file, out);
continue;
}
FileInputStream in = new FileInputStream(file.getAbsolutePath());
log.trace("Adding: " + file.getAbsolutePath());
out.putNextEntry(new ZipEntry(file.getAbsolutePath()));
// Transfer from the file to the ZIP file
int len;
while ((len = in.read(tmpBuf)) > 0) {
out.write(tmpBuf, 0, len);
}
// Complete the entry
out.closeEntry();
in.close();
}
}
-
Calendar
May 2012 S M T W T F S « Nov 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 -
Meta
