All articles, tagged with “tech”


Announcing Alfresco Add-ons

Last summer I changed roles at Alfresco and moved from technical sales to technical marketing. It has been a lot of fun to own a technology project again. My main focus since that time has been to replace the Alfresco Developer Forge with a new Add-ons Directory located here:

http://addons.alfresco.com

As of this writing, there are more than 70 add-ons listed!

I posted a few months ago to the Alfresco Forums about our plans to replace Forge. The system hasn’t received proper care and feeding, is increasingly hard to defend against spammers and mal-doers, and there are modern code forges that provide a better developer experience than we are able to deliver as a side-service (I am partial to Bit Bucket or Google Code because I find Mercurial so much easier to use that Git). When we examined what our community really wanted from Forge, the important service was to have a single place to locate an interesting add-on to Alfresco. So we build a site that does just that.

On the site you can submit an add-on hosted anywhere on the Internet. You can browse add-ons, rate add-ons, and leave comments. We still have some back-end work to do so that created accounts are stored in a system that can be leveraged by the forums, wiki, and issue tracker (I apologize for asking for a new username and password), but the system is currently usable. Important features like search, tagging, and usage statistics are also in the works.

For those who are interested, the site is built on Drupal 7 and will in the future be integrated with Alfresco. I have personally found Drupal to be a disappointing platform to work with, but that is a subject for a future blog post (summary: you should use Django). While building the site I learned a lot about HTML5 and CSS3, but I don’t know if it is actually improving search indexing of the site yet.

Forge has been a useful tool over the last five years, but we are encouraging all projects hosted there to move. Forge is closed to new projects and new users, and at the end of February we plan to make that server read-only. It will eventually be turned off completely.

If you have any feedback on Add-ons or concerns with the future of Forge, you should get in contact with me. I would enjoy discussing it with you.

[ Read More | 0 comments | 1 pingback | , , ]

Alfresco Tips from DevCon

As before, Alfresco DevCon 2011 was a great experience. Events were held in both San Diego and London, and I was able to see different presentations at each event. Unfortunately for me, only about half of the presentations were the same between the two events. That means that even after attending both events I still missed a lot of sessions I was excited to see.

This post is to document some of the best tips that I picked up at DevCon (well, at least the best easy-to-blog-about tips). I apologize that I neglected to keep track of which session provided each tip.

There were lots of good presentations, so I recommend you spend some time browsing the slides which are posted at Slideshare:

http://www.slideshare.net/alfresco

Rendition vs Transformation

The discussion around a question yielded this clear explanation about when to use the Rendition Service and when to use the Transformation Service:

The Rendition service is the main API for customization use. It allows the manipulation of external metadata in Alfresco, and preserves a relationship between the source content and the transformed content which can be used to trigger updates. The Content Transformation Service is for generating transformed content without an association, and can only manipulate the direct content. It is necessary to understand the transformation service when adding new transformations.

Supported Content Formats

In version 4.0 Alfresco lists all of the mimetypes registered with the system and specifies what transformations are supported. Just browse to this URL:

[host-and-port]/alfresco/services/mimetypes

Alfresco API Documentation

The Share Extras project has a great generated documentation for the JavaScript API:

http://sharextras.org/jsdoc/

There are also JavaDocs available for the Java API here:

http://wiki.alfresco.com/wiki/Alfresco_JavaDoc

Packaging Best Practices

Jeff and Will gave an excellent summary of best practices around packaging extensions to Alfresco. Check out slides 24 and 25 of their presentation:

http://www.slideshare.net/alfresco/share-customization-best-practices

I liked it so much, I used it to update this wiki page.

The first half of the presentation by Gary Cox of Blue Fish Development Group also gave excellent advice on this topic.

[ Read More | 0 comments | 0 pingbacks | , , ]

System76 Shows Promise

When did it get so hard to buy a Linux computer? From 2004 to 2010, every computer I bought had Linux pre-installed. I purchased from Dell and Lenovo, but HP and Asus also had them on offer. Sure, I had to make compromises, but it was possible.

I was unpleasantly surprised when in the summer of 2010 I needed to buy a new work laptop and found that the Linux options had disappeared. After much painful searching I gave up and paid the Windows tax—twice, since I needed a separate license for the work VM.

Sure, I could get Linux pre-installed through Emperor Linux, but that does not avoid the Windows tax. I couldn’t justify paying more to put on a free-OS that I was going replace anyway (I can’t help myself—I am a control freak).

What I didn’t realize is that buying a Linux machine is still possible, I just had to give up on the big vendors. In theory, going with a big vendor is supposed to provide a cheaper machine with better support. In reality I don’t think a big vendor is an asset as there are small vendors who compete well on price, and when was the last time you got decent support from any hardware vendor? Going with a small vendor holds little risk when measured against the the low bar set by the competition.

I decided to try again when I needed to buy a basic desktop for my mother-in-law. I found a long list of vendors who would pre-install Linux at the Ubuntu website.

After reading some online reviews, I spent most of my time evaluating machines from ZaReason and System76. Both seemed like reliable companies with decent equipment. The System76 Meerkat Nettop seemed like exactly what I was looking for.

I gave the Meerkat to my mother-in-law for Christmas 2010. It is an attractive machine and appeared to be built with decent components and was assembled in a tidy manner. It shipped with a recent Ubuntu which was well configured and had no crapware installed. They did add their own apt repository for some updated drivers, but everything appears to run fine even without that installed. It was so clean, I resisted the urge to replace it (though I thoroughly tweaked it). I was impressed.

Then the machine started smoking. It was less than two months old.

Let’s put this in context: according to the 2009 SquareTrade Laptop Reliability Study nearly 30% of laptops across all manufacturers fail within 3 years. Even the best manufacturers produce failures over 10% of the time. I wasn’t going to give up on a vendor over one failure. The big question was how would System76 respond.

They replaced the machine at no cost to me and with minimal fuss, though it took a little longer than I had hoped. It took four days (including a weekend) to get a response, but it came from a human. Then a few weeks to get the machine replaced. System76 felt like the problem was due to my using a faulty power strip (it was old, but had always been reliable), so I bought a new one to use with the replaced machine. The machine is now a year old and has not had a problem since.

Summary: buying from System76 is at least as good of an experience as buying from one of the big vendors, and I would say it is even better given that I get a good operating system with no crapware. On the whole, I am very happy I did business with them and I would purchase from them again. (Full disclosure: I have no relationship with System76 and doubt they will even see this blog post. I just want to see a good vendor stay in business.)

Thank you System76, may you live long and prosper!

[ Read More | 0 comments | 0 pingbacks | , , , , ]

The Content Management Tool

YCombinator’s Hacker News recently linked to an interesting post entitled “What every computer science major should know”.

I think it’s a pretty good list, but like others I have seen, it has a hole around the knowledge domain of Content Management, Content Modeling, and Information Architecture.

There are some core tools that every software engineer needs in their toolbox: a programming language, a scripting language, a database, source control, build management, bug tracking, project management skills, and more. If you aren’t already aware of the tools that exist to solve these common problems, you will end up re-inventing the wheel. All too often, software engineers and systems architects reinvent the wheel around content management.

I recognize that I am biased. When I started working for Alfresco two years ago, I thought content management was used for building web sites. It took me a while to realize that every time I built a file store with a flat-file index, every time I stuck collaborative content in Subversion and then struggled with how to get my teammates to update it, and every time I tried to grep Word Documents, I was dealing with content management. These aren’t web-based problems necessarily, and they certainly aren’t easily solved with a database. Like most engineers, I muddled through. I accepted my poor solutions as “how things are done”, and moved on to more (at the time) interesting problems.

Thank goodness for content management. Someone finds these problems interesting enough to worry about them night and day. These people have built some great solutions that are both easy to deploy and free. While working at Alfresco, I have come to enjoy solving content management problems. I think every engineer’s life will be easier if they are considering a good content management tool at least as often as they consider setting up a database.

I recently changed my role at Alfresco. Instead of being a “Solutions Engineer” (our title for Sales Engineers), I am now more involved with helping our Community interact and grow (I never thought I would be joining a Marketing Department, but here I am). As part of that role, I am helping to build awareness of Alfresco and content management in general.

Since this is my blog, I can shamelessly plug the Alfresco QuickTake video I did about “5 Tools that Alfresco Provides Developers”. When I watch the video, I only see my mistakes in presentation style. But my goal with that video was to describe some of the ways Alfresco can assist developers with generic content management problems, and thereby save people from re-inventing that particular wheel. Hopefully it helps you understand why a good content management tool will help you wax strong in all three virtues of a programmer.

As part of my new role, I also have been able to participate in planning our annual Developer’s Conference. I highly recommend you consider attending. either this year or at some point in the future; you will be surprised how many problems that confront you can be solved with an open source tool like Alfresco.

If you are on the fence, (or even if you aren’t), you should check out this decision matrix. Really—check it out; you will thank me later.

So put this tool in your toolbox. It’s free, it’s effective, and then you can get back to solving new problems.

[ Read More | 0 comments | 0 pingbacks | , , , ]

Getting Started with Freenode IRC

I worked as a one-man shop for an extended period of time. Though it was fun to wear a lot of hats, I really missed having a team of people to collaborate with. To cope, I learned to rely on the IRC community at Freenode. Freenode is a great place to bounce ideas off of intelligent people, get help when stuck on a problem, or simply to connect to other human beings. It is fun to give help, and it is a relief to receive it. Since joining Alfresco, I have had a team of brilliant people to work with, so IRC hasn’t been as important. But with my new role overseeing Community Technology, I was asked to moderate our community IRC channel. In my efforts to encourage participation and fend off the trolls (thankfully none yet), I learned about maintaining an IRC channel on Freenode and wanted to share some tips.

Using IRC

IRC is a great way for people who don’t otherwise know each other to meet and interact. There are lots of IRC servers around the net, some of which are juvenile in tone or focused on illegal activity. Freenode is an IRC server with a very specific mission: “to provide discussion facilities for the Free and Open Source Software communities, for not-for-profit organizations and for related communities and organizations”. It is a very friendly place and active moderators keep it comfortable and inviting. It is a great place for people new to a technology to learn the ropes, meet like-minded professionals, and help others.

The Basics

Pick a client

Which client is best for you depends on your operating system. Here are two places with good lists:

http://www.ircreviews.org/clients/

http://en.wikipedia.org/wiki/Comparison_of_Internet_Relay_Chat_clients

Connect to the server

Configure your client to log into chat.freenode.net .

Register a nick

Registering your nick prevents othemail er people from pretending to be you. On Freenode, you must provide an email to register your nick. That email is only used for password recovery. Your nick will stay registered to you as long as you identify with a password once every 90 days.

  1. Run this command: /msg nickserv register <password> <email>
  2. Then validate your email

You can probably configure your IRC client to automatically identify your nick each time you log in, but if you need to do it manually use this command:

/msg nickserv identify <password>

Sometimes when you lose a connection IRC won’t notice right away. When you try to rejoin your channel, your nick will still be in use and will not be available to you. People often configure their clients to use an alternate nick in these scenarios, usually by appending one or more underscores (_) to their normal nick. You can also connect to a channel using more than one nick simultaneously. This is often used to play a trick or joke in a channel.

Join a channel

Discussions actually happen in a channel. The name of a “Primary Channel” starts with a single hash (“#”) and is discussion forum for a specific project or community (like Alfresco, or your local LUG). “About channels” start with a double hash and host conversations about a topic or subject (for example: ##security). Feel free to join us in #alfresco for a stirring discussion of social content management! </plug>

Participate

When you join a new channel, take a minute and read any conversation that is going on before saying anything yourself. When you feel comfortable with the context, feel free to ask a question. Just blurt out your inquiry; there is no need to first ask for permission to ask your question. If there are other people listed in the channel, but nothing seems to be going on, then be patient. Busy professionals often leave their IRC clients running all day and just check once in a while to see if there are any interesting questions to answer or discussions to read. Someone might decide to give you a hint on your question hours after you ask it. If no one responds, don’t get offended. Assume that no one knew the answer or had time at that moment and keep participating. Most important, once someone answers your question please stick around and see if you can answer anyone else’s question. You might learn something else while you are at it.

IRC is low bandwidth communication, and it is easy to misunderstand what someone else says. Assume the best in people and ask for clarification when needed. Try to write so that your words will not be misunderstood, and remember that you never know when your last sentence will show up in a search engine’s archive. Also, keep in mind that you are not as anonymous as it at first appears.

Bots

Internet Relay Chat is a very lightweight protocol for group discussions. It doesn’t do fancy things like editing previous posts or archiving discussions. Because it is so light weight, it is very easy to program automated systems to monitor the channel and respond to simple commands. These are called “bots” and can do fun things like look up a word in the dictionary, give you the weather, or archive the discussion. Most bots have a “help” command. The NickServ bot is how you registered your nick earlier. Try /msg nickserv help to see what else it can do.

Useful IRC Commands

Commands start with a “/”. Feel free to try these out.

  • /help (display information about a command—works without any command too)
  • /me (display text as if it were an action)
  • /whois (provide information about a user)
  • /info (provide network and channel information)

Administering a Channel

Creating a new channel only requires joining an empty channel—it will be created the first time it is requested. The first person to join a channel is automatically the founder of the channel, and can become an operator (aka admin) at any time. By default channels will disappear when the last external connection ends, but channels can be registered so that they do not disappear. Channels can only be registered by a user with a registered nick.

Channel management is done with the ChanServ bot (try /msg chanserv help).

Becoming an operator

You can’t administer a channel until you become an operator with the op command. Only an operator can create other operators. If no operators are left in a channel, the channel can no longer be administered. You shouldn’t be operator any longer than you have to, as it creates an unhelpful class distinction among channel users and not knowing who is operator can help keep trolls from causing trouble. Once you have finished, drop to normal user status with the deop command.

Register a channel

/msg chanserv register #<channel>

Flags

Settings like operator privileges only last for the current session. To make settings persist, Chanserv must have an entry in that channel for the nick with the appropriate flags. Details on the flags available can be seen with /msg chanserv help flags. Flag manipulation looks like this:

/msg chanserv op #<channel> <username>
/msg chanserv flags #<channel> <username> <flags>
/msg chanserv deop #<channel> <username>

Your community should probably have multiple founders so that the channel is not left without an operator should one founder stop showing up. Here is how to grant founder status to a user in your channel:

/msg chanserv flags #<channel> <username> +*F
/msg chanserv flags #<channel> <username> -OV

The first command grants all flags to a user, including the founder flag (F) which must be explicitly granted (it isn’t part of the *).

The second command removes two flags which normally should not be used. “O” automatically makes the user an operator when they join the channel, which should be avoided as previously explained. “V” automatically voices a user when they join the channel. Voicing is only needed on moderated channels where new users cannot speak upon joining without the voice flag. An open channel for community participation should not require this, and not having the V flag makes it easier to identify a problem with the channel.

You can see all the flags assigned to all users in a channel with:

/msg chanserv access #<channel> list

Channel modes

Channel modes are settings on the channel which determine how the channel operates for all users. The most common two modes are “m” which moderates the channel and means that only voiced users will have their messages broadcast to channel participants, and “i” which makes a channel invite-only. For a community discussion channel you probably want to turn off both of these modes with a command like this:

/mode #<channel> -im

You can check the modes currently assigned to the channel with:

/mode #<channel>

Setting a topic

Setting a topic helps newcomers into your channel identify what discussions should focus on, and any other relevant information (like if the channel is logged). Set the topic with the /topic command.

Recover

There is a shortcut ChanServ command called Recover. I recommend against ever using it as it has a lot of effects that took me a long time to undo.

Kicking and Banning

The main duty of a channel operator is to (on rare occasions) wield the heavy stick of kicking or banning a user who is hurting the atmosphere of the channel.

A kick is a temporary disconnect, and will hopefully remind the user to get along with others. The syntax is:

/kick <username>

A ban prevents that user from reconnecting while the ban is in place. This is done by setting up a filter that if matched on the username or hostname will prevent connection. You set this with a +b mode and filter as follows:

/mode #<channel> +b <filter>

Where a filter is of the format nick!user@host, and any part can be substituted with “*” as a wildcard. If you have trouble banning a user on Freenode, then pop into #freenode and ask a helpful network admin what to do. An IP ban or network-wide ban may be necessary.

To view existing bans in place in a channel use:

/mode #<channel> +b

Conclusion and Acknowledgments

Hopefully this has been helpful. For more information use the help command and read this page:

http://freenode.net/using_the_network.shtml

Thanks goes to Hazmat, who setup #alfresco years ago and helped me get admin rights. I also owe a big thank you to Prodego who volunteered some time to walk me through the necessary incantations to control the channel. And of course, thank you to all of the volunteers who keep Freenode healthy and helpful!

[ Read More | 0 comments | 1 pingback | , , , , ]

Email: Password:
OpenID URL:
Forgot Login? Close