Northern NJ MySQL Meetup for December 2007

Tonight was the December Northern NJ MySQL Meetup, and Martin Adamec gave a presentation on the Content Management System, or CMS, that he’s implementing at work.

Content (Component) Management System

He’s using XMLXML Schema, XSLT and XForms to generate the UI for the CMS, as well as perform data validation to provide data quality controls. The work is done once when defining the XML Schema for a particular data entity, and the web forms are generated using XForms and XSLT. He’s doing this all using PHP’s XML support.

Martin Adamec

Thanks, Martin, for sharing your work and expertise with us.

Tags: , , , , ,

My LOLbiznes cards have arrived!

I ordered my LOLbiznes cards on November 25, and they arrived yesterday on December 3, a day ahead of schedule.

My LOLbiznes cards, let me show you them

I compared two companies, VistaPrint and PrintsMadeEasy.com. I decided to order from PrintsMadeEasy.com, since they offered smaller quantities and I was just experimenting with this batch of cards, so I didn’t want to spend a lot of money, overall.

For cheap on-demand printing at low quantities of personal cards, the cards from PrintsMadeEasy.com came out fine. Some cards–I’d guess, maybe 1 in 10 or so–didn’t print properly, with toner not adhering to the card stock properly or other visual defects. The color profile of their printer is a bit too heavy on the magenta as the front-side art is a lot more purple-tinted than it should have been. The cards are good enough, but if you’re looking for perfection, this isn’t it.

I placed the order on Nov. 25 and it arrived Dec. 3, or eight days later. The guaranteed delivery was by Dec. 4. For 100 glossy, double-sided business cards, it cost $19.99 and $6.95 for shipping and handling, for a total of $26.94. Uploading my own design for the front and back was included, free. The net cost per card is $0.27 each.

Compare this to VistaPrint, whose minimum quantity is 250 cards for $19.99, and they charge $4.99 per uploaded design, plus $9.99 more for glossy finish, and $6.99 for double-sided: $46.95 total. Add $9.15 for 14-day shipping, and you’re talking $56.10, or a cost of $0.22 per card.

Generally, folks order in larger quantities, typically 1,000 at a time, so lets compare those prices. VistaPrint: $71.95 + $11.15 S&H = $83.10 or $0.083 per card. PrintsMadeEasy.com: $79.99 + $8.85 S&H = $88.84 or $0.089 per card.

Costs aside, both sites provide reasonable web interfaces for uploading your own designs and preparing your order. PrintsMadeEasy.com uses a Flash-based interface which I really dislike, but it does work and I was able to complete my order using it. No real surprises here.

In the end, I would certainly order from PrintsMadeEasy.com again for small quantity orders just to test out new designs, but I do want to give VistaPrint a try just to compare the print quality difference. If they can deliver better quality, I would definitely use them for larger quantity jobs, where the price difference becomes negligible.

Have you ordered cards from VistaPrint? How did they come out? Or, do you have any other on-demand business card printing companies to recommend? Let me know about them in the comments. Thanks!

Tags: , , , ,

I CAN HAS A BIZNES CARD

The last time I had business cards printed was back around 1995. I think I ordered a box of 250 cards, ended up giving out maybe 100 at most, and used the rest as scrap paper for disposable notes on my desk. Since then, I haven’t bothered to order updated business cards as I’ve changed phone numbers, addresses or jobs.

Recently, though, I’ve been asked by people if I have a business card often enough that saying “no” has become a pattern. Just last night, I went out to dinner with my family, and while outside smoking a cigarette, I started chatting with another patron who was doing the same. Turns out he also works a tech. job and asked me for my card. I ended up jotting down my contact information on a card for the restaurant and handed it to him.

In the past, this wouldn’t have mattered to me. But, now that I’m consulting full-time, these quick introductions could turn into valuable business leads that I could really use, now. The lack of preparedness and professionalism isn’t going to give that prospective client the sense of confidence I want them to have in my abilities and overall product.

So, last night I decided I was going to design and order myself a set of business cards. I wanted to create a card that was unusual, humorous, unique and memorable–qualities that reflect my nature and approach. The front of the card borrows from the LOLcats meme, as well as the “let me show you them” meme. I have yet to hear of anyone else making semi-serious LOLbusiness cards, so let me be the first. (FIRST!)

The back of the card is simple, informative and efficient–qualities that represent the kind of work I perform. I list my name, a title and contact information with as little clutter as possible. I use the remaining space to list popular technologies (think: keyword stuffing) that I don’t mind taking on work doing. I list AOLserver and Tcl at the top because as the recipient quickly scans down the list, they should cause a hesitation and very likely a question like “what are AOLserver and Tcl” which give me the opportunity to explain them, rather than coming across as pushing them directly.

In case you’re wondering, here’s what the proofs of the card look like, showing front and back:

Dossy's LOLbusiness card, frontDossy's LOLbusiness card, back

In theory, the order I placed online today should be arriving sometime during the first week of December. When I get them, I might write a little something about where I ordered them.

So, what do you think of the cards? Too edgy? Too risky? Not serious enough? Fun, or funny? Would you give me your business if I handed you one of these cards?

Tags: , , ,

Novell GroupWise Messenger 2.0 setup on openSUSE Linux 10.3

Lately, I’ve taken an interest in Novell GroupWise Messenger (GWM) because it’s one of the messaging protocols that is currently supported by Pidgin. There are several open bugs and enhancement requests for Pidgin’s GWM support, so I figured I’d see how difficult it would be to get a development environment set up.

I started with the latest openSUSE 10.3 KDE live CD. Normally, I only run Debian by preference, but since Novell is the organization supporting SUSE, I hoped that using openSUSE would be the path of least resistance.

My understanding is that the minimal software required to get GroupWise Messenger working, and what I ended up installing, was:

  • Novell ConsoleOne 1.3.6h
  • Novell eDirectory 8.8
  • Novell GroupWise Messenger 2.0.2 HP1

The openSUSE installation and all the Novell components fit neatly inside a 6 GB partition. Installation was relatively painless and configuration was straightforward.

The one snag that caused me a lot of grief was that the Novell GroupWise Messaging Agent (NMMA) process would keep segfaulting when I tried to connect with the IM client. Here’s the backtrace I recorded:

Thread 10 (Thread 0xb727eb90 (LWP 1091)):
#0  0x00000000 in ?? ()
#1  0xb7c59b3e in spmDDCAtLoginEndCallBack ()
   from /opt/novell/eDirectory/lib/libspmclnt.so
#2  0xb6dd63f8 in MgrCloseLoginSession ()
   from /opt/novell/eDirectory/lib//libnmasclnt.so
#3  0xb6dd7af3 in NMAS_ClientLoginEx ()
   from /opt/novell/eDirectory/lib//libnmasclnt.so
#4  0xb7c5a152 in SPMClient_PasswordVerify ()
   from /opt/novell/eDirectory/lib/libspmclnt.so
#5  0xb7c56bc1 in SPM_DDCVerifyPassword ()
   from /opt/novell/eDirectory/lib/libspmclnt.so
#6  0xb7cce6cf in SPMVerifyPassword ()
   from /opt/novell/eDirectory/lib/libndssdk.so.1
#7  0xb7c9b1d0 in DCVerifyPassword ()
   from /opt/novell/eDirectory/lib/libndssdk.so.1
#8  0xb7c96f50 in DDCVerifyPassword ()
   from /opt/novell/eDirectory/lib/libndssdk.so.1
#9  0x080b2c32 in ?? ()
#10 0x403b0001 in ?? ()
#11 0x08269b00 in ?? ()
#12 0x00000002 in ?? ()
#13 0x00000000 in ?? ()

Apparently, this is a problem with direct access mode to eDirectory. Changing the NMMA configuration to use LDAP instead got things working. I did this by editing /etc/opt/novell/messenger/strtup.ma, commenting out the dirreplicaipaddr line and setting the ldapuser, ldappwd and ldapipaddr lines. I didn’t configure it to use LDAPS (LDAP over SSL encryption), but in a production environment, I probably would have.

Finally, here’s a screenshot of everything (ConsoleOne, GroupWise Messenger client) running:

Screenshot of Novell ConsoleOne and GroupWise Messenger client running on OpenSUSE 10.3
(click to enlarge)

If you’re looking for help with a GroupWise Messenger installation, feel free to ask me questions. If you’re looking for a consultant in the northern New Jersey area, I’d be happy to talk to you about what I could do for you.

Tags: , , ,

Summary of the Northern NJ November MySQL Meetup

November’s MySQL Meetup was fun, having two new members attend: Jen and Mor. Pete also made it to the meetup, and the four of us talked about:

  • popular modern web application development frameworks like Rails
  • outsourcing software construction off-shore and why ISO9000, CMMI 5 and Waterfall may not be a good fit for rapid web product development
  • the approach of agile development methodologies like Extreme Programming (XP)
  • a pragmatic view of “Web 2.0” and what it means
  • volunteerism through the Taproot Foundation
  • pictographical repreresentation of relative measures of qualitative data (i.e., Consumer Reports “blobs” and Harvey Balls)
  • jQuery UI, a set of themable widgets and interactions layered on top of jQuery, that simplifies building rich web user interfaces

As convenient as it is to meet at Panera Bread as meetup attendees can get themselves food and drinks easily, I’m somewhat disappointed with its management’s inability to manage the reservations for their private room in back. I really do want to start digging deeper into MySQL and try to get speakers to present to the group, and the unpredictable availability of the meeting room makes this frustrating.

Amy Kearns suggested that I call the local public libraries about hosting the meetup in their space. Apparently many now have free wi-fi and some may even have a projector we can use. Certainly, the price is right (free!) and the benefits of having a dependable reservation and possibly a projector, in my mind, outweighs the convenience of food and beverages at Panera.

So, for December’s meetup, I’d like to experiment by having the meetup at a public library. The currently scheduled date for the meetup is December 5th, the first Wednesday of the month. How many people think they can make that date? Of those who think they can, where are you travelling from? I’d like to pick a library that is centrally located for the majority of the people who plan to attend.

Please RSVP for the December meetup and in the “comment?” box, indicate if you have a preferred library where you’d like the meetup to be held–especially indicate if you’re already a patron of that library. Once I get some responses, I’ll start making calls and travel to some of these libraries to see which would work best for us.

I look forward to seeing you in December!

Tags: , ,

Server-Side JavaScript with jQuery and AOLserver at jQueryCamp07

Dossy presenting at jQueryCamp07

Here are the slides for my presentation, Server-Side JavaScript with jQuery and AOLserver, that I gave at jQueryCamp07 today.

Title slide screenshot

Tags: , , , ,

Overnight Website Challenge in New Jersey

A few days ago, Pete Prodoehl twittered about Sierra Bravo’s F1 Overnight Website Challenge that will take place on March 1st, 2008, in Minnesota.

I’ve had a similar idea that I’d been mulling over in my head, a kind of “Geek Corps” where geeks donate their time and volunteer to help people in need with technology–with a focus on local organizations, not overseas.

Are there enough web developers in New Jersey (or who would be willing to travel to NJ for a day) who are willing and able to donate their time for such a cause? Considering the trouble I’ve had finding geeks in Northern NJ, I really don’t know.

I’m sure there’s plenty of non-profit organizations who could use the help, but I don’t have a good idea of who they are or how to reach out to them. If you are part of or know of a non-profit that would benefit from participating in such a competition, in New Jersey, I’d appreciate it if you’d pass along a link to this blog entry to them.

At this point, I’d love to hear from anyone who is interested in a similar event as the Overnight Website Challenge, but in New Jersey. I would be especially grateful for any help in organizing such an event or spreading the word about it.

Progress on nsjsapi running jQuery under AOLserver

It’s not fully baked yet, but let me take a break from coding to … squee! You have no idea how excited I am right now.

Back in February, I blogged about nsjsapi, an AOLserver module that makes the SpiderMonkey JavaScript interpreter (written in C) available to Tcl. Then, in July, John Resig blogged about env.js, which he used to load jQuery under the Rhino JavaScript interpreter (written in Java). env.js is neat because it’s a JavaScript implementation of a basic browser and DOM environment which isn’t provided by either SpiderMonkey or Rhino.

However, env.js assumes its running under Rhino, or at least has all the java.* and javax.* and org.w3c.dom.* APIs available, so it doesn’t completely work under SpiderMonkey. So, I’ve set out to implement all those missing bits in JavaScript, in nsjsapi.js. (Yes, I know I’m crazy …)

After a few days of furious coding and much head-desking, I’ve gotten far enough that I can do this from an AOLserver control port:

nscp 1> set js [js create]
js0x88e0838
nscp 2> js load $js /home/dossy/htdocs/js/nsjsapi.js
undefined
nscp 3> js load $js /home/dossy/htdocs/js/env.js
undefined
nscp 4> js load $js /home/dossy/htdocs/js/jquery-1.2.1.js
undefined
nscp 5> js eval $js {jQuery.fn.toString = DOMNodeList.prototype.toString; true;}
true
nscp 6> js eval $js {window.location = 'test/index.html';}
undefined
nscp 7> js eval $js {$('body').html()}
<div><span id='foo'>This is a test.</span></div>
nscp 8> js eval $js {$('div').append('<span>Hello world!</span>')}
[ <div> ]
nscp 9> js eval $js {$('body').html()}
<div><span id='foo'>This is a test.</span><span>Hello world!</span></div>

I guess this doesn’t seem like much of an accomplishment, but it’s a huge first step towards being able to do actual JS-based server-side web development under AOLserver.

I want to iron out a strange crash bug when the JS interp. is destroyed via [js destroy], and complete the file I/O stub that isn’t finished yet, then check in nsjsapi.js. I plan to get this done in time for my talk at jQueryCamp07 this weekend.

Tags: , , ,

Find fun questions in your web referer logs with Google Analytics

I know that reviewing web referer logs is nothing new, but Google Analytics lets you filter your view. One use for this is to find search queries that were posed in the form of a question using the common question-forming words who, what, when, where, why and how.

Perhaps undocumented, but well-known to programmers, is the technique of concatenating terms with a pipe character (the “|”) which means “or”. This way, we can create a single filter containing all those words at once.

Screenshot of Google Analytics Keywords report filtered on 'who|what|when|where|why|how'

Try it out, see what kind of questions people were asking that resulted in a click-through to your site. Maybe you can add content to your site that better answers some of those questions and help future visitors who ask a similar question.

Tags: , , ,

A simple MySQL client in Tcl/Tk using mysqltcl

Yesterday, Ron Cripe emailed me asking if I knew of any simple examples of how to use Tcl/Tk with MySQL. I knew about mysqltcl and pointed him in that direction, but he said he needed an actual example on how to use it.

I’ve done a lot of Tcl programming but have mostly avoided doing GUI’s with Tk, so I figured this might be a good opportunity to do some learning, myself. I quickly wrote a simple application that connects to a MySQL database, then lets you execute queries against it and displays the results. You can download it here:

It’s named .txt to make it easier to download–just rename it to only .tcl (removing the .txt) once you’ve saved it.

When you start the app, it presents you with a simple login dialog:

mysqltcl-client login dialog

Enter your username and password, change the host, port and database values if necessary, and press Enter or click the Connect button. If all goes well, the login dialog will go away and the query window will appear:

mysqltcl-client query dialog

This is an example of what the query dialog looks like after executing a SHOW TABLES query. Very simple, not terribly exciting, but what do you want for a 5KB, 181-line Tcl script?

If you have Tcl, Tk and mysqltcl installed, go ahead and grab a copy of this script and check it out. If you have questions about the code, just ask: I’ll try my best to answer them.

Tags: , , , ,