Showing posts with label CMS. Show all posts
Showing posts with label CMS. Show all posts

Monday, July 16, 2007

Job Descriptions

Every company in America demands a job description...just not a well written one (or one that's been copy edited). It drives me bat-shit crazy when I read a bad one.

What makes them bad? Too specific (will need to be re-written next year when Software 2008 comes out), too vague ("Needs good people skills"), too much prose (it's not a book report, you don't need to hit a word quota), I could go on and on.

Be concise, say what the skills the person has to have, make sure when you post it you'll get some applicants (not too narrow) but not too many applicants (there's that vague thing again). This isn't rocket science.

Here, we have the additional guidance that the Commonwealth puts on us, and we need to put specific things to measure in there for our appraisals at the end of the year. Don't put things in that can't be measured.

Today I was asked to read over a new job description for a CMS administrator:

theAlphaJohn: oh christ
theAlphaJohn: im reading this new [job description]. now it's a WCMS not just a CMS
Will: what the fuck is the W for?
Will: Wicked
Will: Wang
Will: Whack
theAlphaJohn: Web
Will: ...
Will: wow
theAlphaJohn: A. Knowledge, skill and abilities:
- Strong communication (written and verbal), analytical, and organization skills (R)
- Working knowledge of Adobe, PHP, HTML, UNIX/Apache, principles and techniques of web design (R)
theAlphaJohn: Adobe is a brand, not a skill
Will: hahahahaha
Will: it's a language
Will: duh
theAlphaJohn: why Unix/Apache? Why not just Apache?
theAlphaJohn: "techniques of web design" like that can be measured
theAlphaJohn: it might as well say "mad web skillz, science-droppin', and jive foolery"
Will: yes
Will: hahahaha
Will: jive foolery
theAlphaJohn: "A bachelor’s degree in CIS, IT, or other related area preferred. Appropriate experience may be considered in lieu of a degree."
theAlphaJohn: (1) fucking spell out the degree name
theAlphaJohn: (2) does a WCMS admin really need to be a CS nerd? cause if you took two semesters of assembly language and lisp, do you really want to work with coldfusion and html?
Will: yeah
theAlphaJohn: 3 flavors of useless

Wednesday, May 09, 2007

Is there really a difference...?


Between working for the state, and being in a mental institution run by the state?

I have an internal customer with no concept of how long things take; anything you could ask of an IT shop should take as long as microwave popcorn. Today, it was decided that the best way to manage their expectations is to keep track of the time we spend working on their requests.

::scratches head::

If you think it takes 5 minutes to do something, but it actually takes five hours, and I tell you that I've spent an hour working on your problem, am I managing your expectations?

Oh. Then let's start using this project tracking system we have to have them enter their requests. Red tape will make them understand how long it should take.

I've been interacting with the customers on a daily basis for the past two weeks on an asinine request they made. The request had a hard deadline, and I had exactly enough hours between when it was received and when it was due to get it done, and I was told to make it happen. I had several hours into the project before the customer completely changed it. The change didn't make the task any easier or harder, but it meant scrapping the work I'd done up to that point and starting fresh. In the mean time, they made several other requests that "should only take a few minutes".

I am only alloted 6 hours a week for their project and 32 hours a week for my other major project. Almost every week, I'm told to drop one and spend 100% of my time on the other. Sometimes this is implicit ("It will take me 120 hours to do that and it needs to be done in three weeks." "Then do it."), and sometimes explicitly ("This is your top priority, focus all your time on this").

Today, after I sent the customer several updates on their tasks (which they acknowledged), they fired an email off to my boss's-boss's-boss telling him that I wasn't working on their project and why didn't they have any access to me. I just spent 90 minutes going through my notes and emails from last week to get the real tally: 32.5 hours.


...

The worst part: my Commonwealth-issued apathy suppositories aren't even working anymore. I fucking hate it here. Hate hate hate.

Thursday, May 03, 2007

How do I put this...?

I TOLD YOU SO!!!

From our report to the Technology Council, November 13, 2006:
Implementation and Migration

During system selection, the Task Force sought out software that was flexible, robust, but still simple enough to be used by non-technical end users. This was a critical lesson-learned following the attempted implementation of the Luminis CMS. The trade-off with this ease comes in the design, development, and migration of content.

For all systems examined, users generally fell into one of four categories:
• Administrator - what we traditionally consider the IT role of administering the server, application, database, and user account maintenance
• Content Creator (Designer) - the person who designs the aesthetic, lays out the navigation, and builds the actual templates
• Content Editor - anyone who: adds, removes, or changes content on a site, adds pages to an existing site, and adds a sub-site that uses existing templates
• Content Consumer - anyone who views the pages created in the CMS

While few webmasters currently have the skills to be Content Creators, these skills are only needed during design of a new site or redesign of an existing site. Irrespective of which system is chosen, training is available to bring someone up to the necessary skill level of a Content Creator. These skills, however, are not an abundant commodity.

The majority of what our webmasters currently do falls into the Content Editor category. For the sake of both efficiency and cost, it may make more sense to focus the design of templates and navigation in Web Communications and focus the webmasters into a Content Editor role, but with a greater responsibility of reporting on the state of content and maintaining workflows.

Migration of existing sites into either CMS was straightforward once templates were created. Participating departments will have the option of using predefined templates, or hiring Creative Services to customize one. Some departments may choose a third option: to pay an outside developer to create new templates.

May 3, 2007

Not done by Web Communications. After four weeks of training they had four weeks to play in test. This is their effort in production after 31 days ::




Done by Web Communications. They had the same training as the other group and just got their accounts in production three days ago ::


Friday, April 06, 2007

Enterprise Software Selection: The High Cost of an Incorrect Choice

Back in December, after our CMS proof-of-concept was over, I got the idea to write a paper for the Project Management Journal about the lack of a cohesive methodology for the selection and implementation of off-the-shelf software. There are dozens of commercial life-cycle methodologies for writing software, but none for buying software. In my opinion, part of what made our proof-of-concept for CMS successful was the process that we followed. I don't think the framework I've developed could be canned and sold per se, but I was hoping to start a discussion in the industry about this problem.

I submitted the paper to PMJ before Christmas, and finally got word back last week that the paper was rejected as-is. I spoke to the editor, and they liked the topic and the content, but would like less of a case study and more of a scholarly paper. Having worked at a scholarly journal for three and a half years, I'm not comfortable reworking the content to be longer and wordier without adding more substance just to have it published. The only value with that would be to do controlled experiments around the process, but I'm not Gartner: I'm not in a position (time, resources, money, projects) to do that.

I've decided not to rewrite the paper, so I'm publishing it as-is on my website. If you're interested in reading, here it is.

Special thanks to Kirsten, Amy, and Fred for letting me prod you with interviews; your input was invaluable.

Friday, March 23, 2007

All I really need to know about ColdFusion I had to fucking teach myself

Let's start with what we know:
  • The content management system that we purchased is written in ColdFusion. CMS runs on Windows, Linux, and Solaris and it can use Oracle, SQL Server, or mySQL for its database.

  • ColdFusion was a Macromedia product until they were purchased by Adobe. While there is a free developer/trail edition you can download, ColdFusion needs to be licensed for use, and that only covers installation support. You need to buy a support plan for any further assistance.

  • ColdFusion has its own built-in web server that is unsupported for production deployments.

  • ColdFusion is now a J2EE server application, and needs to run inside a full J2EE server (it's deployed as either an EAR or a WAR.

  • SunOne is a full J2EE server, but is only supported as a web server and not an application server (which makes no sense). To deploy ColdFusion with SunOne, it needs to be run inside Adobe's JRun.

  • The latest and greatest version of JRun uses Java 1.4.2_09, which is not compliant with the Energy Policy Act of 2005.

  • ColdFusion connects to the database via JDBC. ColdFusion and JRun use Data Direct's JDBC Drivers to provide that connectivity.

  • The latest and greatest version of ColdFusion, version 7.02, ships with version 3.3 of the Data Direct Drivers, which do not support Oracle 10gR2 (the latest and greatest version of Oracle). We had to update to Data Direct 3.5 to get ColdFusion working with Oracle 10gR2.

So far, not worth its own blog post, is it? Update the drivers and move on.

My last three weeks of problems have centered around this Adobe technote about updating the JDBC drivers.

To install the new DataDirect database drivers, follow the instructions in the appropriate section below.

[...]

JRun 4

1. Stop JRun 4.
2. Backup your existing macromedia_drivers.jar file.
3. Unzip macromedia_drivers.zip into the same directory, overwriting the previous macromedia_drivers.jar.
A new file, DDJDBCAuth03.dll, which is required for Windows Authentication, is also included in the zip file replacing the older DDJDBCAuth.DLL.

Note: java.library.path must be modified (either in the jvm.config file or through the JMC) to include {application.home}/lib so that DDJDBCAuth03.DLL loads correctly.
4. Restart JRun 4.

JRun uses the JDBC drivers in macromedia_drivers.jar in /jrun4/lib. For example, with JRun 4 on Windows installed on drive C:, this would be C:\JRun4\lib\macromedia_drivers.jar.

This looks pretty straight forward, and only took me five minutes to complete. I toiled with the same performance problem I was having for another week or so until the CMS vendor provided a piece of test code that showed we were still running Data Direct 3.3.

::scratches head::

Remember up above where I said that ColdFusion is deployed as either an EAR or a WAR file? It turns out that the driver is actually in two places:

cmsadmin@zetes2$ find . -name macromedia_drivers.jar -print
./lib/macromedia_drivers.jar
./servers/cfusion/cfusion-ear/cfusion-war/WEB-INF/cfusion/lib/macromedia_drivers.jar

To really update the drivers, and not just hope the Java class loader picks the right one, I had to:
  • Start JRun and ColdFusion, which explodes the archive and deploys the application.

  • Find the compiled driver file inside the archive and replace it with the updated version.

  • Shutdown and restart JRun and CF.

Lo and behold, suddenly my test code shows my data sources are running Data Direct 3.5; good start.

The actual problem that started this was installing the CMS demo site. Since this product is repository-independent (like every other chicken-shit vendors), the demo site is created by a bunch of CFQUERY tags inside the page you install from: You browse to page, point it to the database, push a button, and it makes with the CREATE TABLE...INSERT INTO TABLE...BEEP BEEP...BLINK BLINK...for a couple minutes until viola!

Only when I tried, it blew up. I reset and tried again, and it blew up. I turned on debugging, reset, tried again, and it blew up. The first day I had this problem, my install abended eleven times. Over the course of several weeks, no less than forty times: setup, go, explode.

The problem? After inserting about 1800 records, the database server would run to a point and then stop to wait for the web server to say "ready for more? let's go". While the database server waited for an ack from the web server, the web server sat there waiting for the database server to tell it "I finished inserting those records, what now?". Which, if you care, looks something like this:


He's watching football, she's doing Sudoku; neither one is really listening to the other.

The CMS vendor has no idea what the problem is, and in fairness they probably shouldn't. The problem is three layers of middleware down in the JDBC drivers that Macromedia (who is now owned by Adobe) licensed from Data Direct to bundle with JRun and ColdFusion.

Does your head hurt yet?

To further troubleshoot this, I had our DBAs do SQL traces on their side (which is where that screen shot came from) while I did JDBC traces on the web server side. Here's where the second problem in that technote bites me in the ass:

JDBCSpy built into the driver

Spy passes calls issued by a running application to an underlying DataDirect Connect for JDBC driver and logs detailed information about those calls, information you can use for troubleshooting problems. Configuration requires addingSpyAttributes to the JDBC URL through the "Connection String" field. [My emphasis] Unfortunately, due to bug 60098, the "Connection String" field doesn't work for Oracle, SQL Server, Sybase or Informix built-in drivers.

Yes, how unfortunate for me and everyone else in the world. What the fuck database isn't on that list? Access?

Now I need to fist the enchanted goat in order to get any useful debugging information. Here's where it gets better:

For these drivers, users need to create an "Other" type data source and fill in all the data source parameters manually.

For ODBC Socket and DB2 (7.0.1):

Add the following parameters to the data source Connection String field: [...]

Seems helpful enough, until you realize that the parameters they've laid out for you aren't actually all the parameters that you need to fill in. I had to play trial-and-error for 25 minutes to guess what the correct parameters were. It gets even better because here is their example of an Oracle connect string:

For Oracle, SQL Server, Sybase and Informix:
JDBCSpy URL for "other" type data sources:

jdbc:macromedia:oracle://Server1:1521;serviceName=ORCL;SpyAttributes=(log=(file)C:\\temp\\spy.log;logTName=yes;timestamp=yes)


Wait for it...

The fucking syntax is wrong!

Barry found Data Direct's Manual for their JDBC drivers on March 8th, so I dug through that to find that the parameter is NOT serviceName=[] it's SID=[].


How hard would it be to add a screen shot so you know NOT to fill in the "Driver Name" with "Oracle"? If you do, it's no longer type "OTHER" and JDBCSpy won't log your transactions.

The log files it generated were as worthless as they were voluminous, except to show it stopped at exactly the same insert statement every single time:

spy(jrpp-3)(2007/03/21 17:48:10.004)>> Statement[1435].execute(String sql)
spy(jrpp-3)(2007/03/21 17:48:10.004)>> sql = INSERT INTO ControlInstance
(CONTROLID,CONTROLTYPE,CREATIONDATE,INHERITED,OWNERID,PAGEID,PARENTCONTROLID,PARENTCONTROLTYPE)
VALUES
(1541,26,'2004-06-15 10:43:34',0,1000002,857,1185,1)

spy(Finalizer)(2007/03/21 17:49:54.043)>> Connection[3].setAutoCommit(boolean autoCommit)
spy(Finalizer)(2007/03/21 17:49:54.043)>> autoCommit = true
spy(Finalizer)(2007/03/21 17:49:54.043)>> java.sql.SQLException: [Macromedia][Oracle JDBC Driver]Object has been closed. ErrorCode=0 SQLState=HY000
java.sql.SQLException: [Macromedia][Oracle JDBC Driver]Object has been closed.
at macromedia.jdbc.base.BaseExceptions.createException(Unknown Source)
at macromedia.jdbc.base.BaseExceptions.getException(Unknown Source)
at macromedia.jdbc.base.BaseConnection.setAutoCommit(Unknown Source)
at macromedia.jdbcspy.SpyConnection.setAutoCommit(Unknown Source)
at coldfusion.server.j2ee.sql.JRunConnection.setAutoCommit(JRunConnection.java:394)
at coldfusion.server.j2ee.sql.JRunConnection.clean(JRunConnection.java:223)
at coldfusion.server.j2ee.sql.JRunConnection.close(JRunConnection.java:433)
at coldfusion.server.j2ee.sql.pool.JDBCPool.expire(JDBCPool.java:695)
at coldfusion.server.j2ee.pool.ObjectPool.closeAllResources(ObjectPool.java:292)
at coldfusion.server.j2ee.sql.pool.JDBCPool.closeAllResources(JDBCPool.java:884)
at coldfusion.server.j2ee.pool.ObjectPool.finalize(ObjectPool.java:312)
at java.lang.ref.Finalizer.invokeFinalizeMethod(Native Method)
at java.lang.ref.Finalizer.runFinalizer(Finalizer.java:83)
at java.lang.ref.Finalizer.access$100(Finalizer.java:14)
at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:160)

Somewhere, somehow, some resource on the database server is being exhausted by a fairly small number of inserts and we don't know what resource or why because both servers eventually stare off into space waiting for the other to make the next move.

In the end, I gave up and had the vendor walk me through cloning the demo site from our production system and hand-jamming it into test.

Oh, did I forget to mention that this ran flawlessly on our production system? That's right, I didn't because I found another bug in CMS. We installed the demo site into /opt/SUNWwbsvr/docs but when the installer ran (and blew up) it had created /opt/sunwwbsvr/docs. Solaris is case sensitive, and a developer had jammed in an lcase() function that non-narcissistic applications like Apache forgive. Sun has to make their name CAPS in all their products.

What a fucking waste of time. Adobe's documentation staff need to bathe in napalm.

Thursday, March 01, 2007

Aww...my first CMS Bug

How adorable!



Something tells me if their Q/A didn't test subsite creation, that this won't be my last bug report and bug fix.

Monday, October 30, 2006

I'd kill for writers block right about now

I've been a naughty blogger since school started. I'm taking an English class this semester, and though the papers aren't terribly interesting I've been trying to blog them once they're done.

When I haven't been writing for class, I've been writing for work. I handed in a 17 page report on Content Management last Friday. Though it was based on some surveys, and several people had editorial input, the word-smithing fell on me.

I'm tired of writing; that's why you're getting bullshit videos from YouTube.

Suck it up.

Thursday, September 21, 2006

The Week in Alpha John-ness

Since last week's news cycle blew.

The end of last week was split between a project at work and a paper for school. The project is a disaster that landed in my lap after the person who owned it left a few weeks ago. No notes, no knowledge transfer, just a stillborn piece of garbageware the vendor gave us and its desire to break all rules of common sense. A day of digging and a couple phone calls to Barry was all it took to...well I have no idea what the fuck is going on with it now. We have no concept of project management here, so for all I know the Baby Jesus is the only one making sure this piece of shit doesn't implode and kill all of us.

Monday was our second lock-in for the CMS proof-of-concept. I had a call on Friday to make sure the vendor showed us what we wanted to cover. The call was my idea, which worked out since they were planning to spend hours on some bullshit we didn't care about. Instead the training went very smoothly and we saw everything we wanted to. We have a follow up meeting this afternoon to discuss what we have left to do for this POC.

Also on Monday, I spent time documenting our requirements for George's List, our answer to Craigslist. Yet another project that almost went to the coding stage without any written requirements or design documentation, Amy and I got a draft done [PDF] before the Web Team meeting on Tuesday. The Web Team was helpful in pointing out some things that had been overlooked, something that can only happen when you write your fucking assumptions down before people start coding!!

I've been very distracted at work for the past couple weeks, mostly due to the office full of Bobs living down the hall. Our Director left, and there is a consultant filling in for her for the next four months. In the mean time, the Bobs are here from the same firm doing analysis to figure out why everything is so fucked up. Senior and Executive management have done a piss-poor job of communicating their goals and intentions, and they have not (and probably will not) meet with individuals, only the managers. This has lead to tons of insecurity and doubt about people's own skills, how they fit in, and whether projects they're working on will be cancelled or stopped while others take priority. In short: nobody knows what the fuck is going on, and in that vacuum of doubt people are already jumping ship.

I'm the first to admit that I'm frustrated and unhappy, but I don't want to leave. I didn't take this job to love it, I took this job to finish school. Everything that's wrong here can be fixed, but the issues aren't being dealt with. Since it doesn't seem like these issues are going to be addressed anytime soon, I'd really like to move to another unit while things settle down. I've interviewed for two different positions on campus in the past six weeks, but haven't heard back from either of them (not even to say, "Sorry douche bag, you didn't get it"). I'm not in a position to quit my job and work full time (especially since my expenses exceed my pay here by $2000 a month), and taking another job will mean less time to focus on school.

I took yesterday off to regroup and get some errands and homework done, and it helped a little. I didn't get any homework done, but I caught up a lot of other lingering issues (caulking the shower in my bedroom was such a rush man). I have two exams next week, so chances are good that my weekend will be spent in the library.

Friday, September 01, 2006

The (Bill) Joy of Technology

As I previously mentioned, we're doing a proof-of-concept with two Content Management System. The idea behind this is to consolidate all of our websites into a single development environment to standardize navigation, look and feel, etc. There was a project to do this two years ago that imploded (I wasn't involved, but if you ask me the vendor sold us fantasyware) so this time around we decided to play with each system for a few weeks to really understand it before we chose one.



We're winding down our work on the first system, and yesterday we showed our work to a panel of department super users (including the Dean of the College of Science and the Assistant Dean of the College of Liberal Arts) to get their feedback. I couldn't have asked for a better reaction, they were very pleased with the due dilligance we had done (we had an answer for every one of their questions) and they loved what we showed them.



With that out of the way, I started working on the installation of the second system. We start the proof-of-concept on that September 18th. This application does templating using XML/XSLT and is build using Enterprise Java Beans (EJB) that run inside JBOSS. Having followed their install instructions, I was immediately greeted by 2MB of thread dumps (which is about 2 billions lines of "go fuck yourself".

09:48:28,581 ERROR [EntityContainer] Starting failed jboss.j2ee:jndiName=ejb/FolderContainedEntity,service=EJB
org.jboss.deployment.DeploymentException: Error while fixing table name; - nested throwable: (org.jboss.util.NestedSQLException: Could not create connection; - nested throwable: (java.sql.SQLException: Unable to connect to any hosts due to exception: java.net.ConnectException: Connection refused); - nested throwable: (org.jboss.resource.JBossResourceException: Could not create connection; - nested throwable: (java.sql.SQLException: Unable to connect to any hosts due to exception: java.net.ConnectException: Connection refused)))
at org.jboss.ejb.plugins.cmp.jdbc.SQLUtil.fixTableName(SQLUtil.java:196)
at org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCEntityBridge.init(JDBCEntityBridge.java:143)


Alright then. I made a few changes (clickity click) and fired it up again, basically the same mess. I dug through the errors a little deeper and found this:

ObjectName: jboss.j2ee:service=EJB,plugin=pool,jndiName=ejb/Page
state: CREATED
I Depend On:
Depends On Me:
ObjectName: jboss.j2ee:service=EJB,plugin=pool,jndiName=ejb/BaseEntity
state: CREATED
I Depend On:
Depends On Me:
ObjectName: jboss.j2ee:service=EJB,plugin=pool,jndiName=ejb/Mail
state: CREATED
I Depend On:
Depends On Me:


::scratches head::

I had a little chat with Will about it:

theAlphaJohn: i already hate [the second CMS system]
Will: uh oh
Will: did they steal your lunch money?
theAlphaJohn: if only
theAlphaJohn: it just shit out like 2MB of error messages (that's like 2 billion lines of text)
Will: yeah
theAlphaJohn: This is what would happen if Java wrote song lyrics:
theAlphaJohn: [sends error]
theAlphaJohn: I DEPEND ON (dot dot dot)
theAlphaJohn: (DOT DOT DOT) depends on me
theAlphaJohn: beep beep *blink* *blink*
Will: haha


This is one of the things I dislike about cutting/bleeding/clotting-edge technology. Make no mistake fuckers, I am a 1337-@ss mofo right up in here, but 2 billion lines of "java.net.io.doucebag exception error: fuckface thread dump unpacking ejb container go fuck yourself......" does not help me find the problem. It's not like I'm stepping through your code in a debugger or working through it in JUnit. And even if I could, why would I then pay you for it if I had to do that?

In the old days (circa 2003), we used to get an exception and the program would abend and leave us a tasty core dump and a stack trace to find our way back to the problem. Most people don't find that helpful, but you can work with it. Volumes of exploding Java methods are not going to lead me back to the missing configuration file the vendor didn't provide me with, now are they?

Wednesday, August 16, 2006

Video: Shakira - Hips Don't Lie

Will managed to one-up me by embedding this video into CMS this morning. Cracks me up, especially since I hate this song:

Tuesday, August 15, 2006

Putting CMS to Work

We're playing with the first of two Content Management Systems this week, and once Wil got the base template built I started the important work: