Having trouble?
 |
 |
|
|
This is probably on everyone's mind so I will address this issue right away. Novell acquired Sitescape last week (2/13 to be precise) and I think everyone would like to know what is going to happen to ICEcore. Well the simple answer is LOTS, but the answer you may be wondering about is that ICEcore will remain an open source project and continue to grow. So what do I mean by LOTS of change? Well, we will finally have the resources to do some very cool things to promote the ICEcore product and it's community. Sitescape being a very small company often did not have the luxury of doing activities in support of the Community like conferences or marketing collatoral. I believe this will change moving forward. Another great benefit of having Novell as our primary sponsor is that they have the open source knowledge to really help us develop our processes and community. Think about it. Novell is one of the largest open source vendors in the world and now we have them on our side. What could be better? In the coming days and weeks I will keep you informed about all the cool things we are doing and how we can come together as a community to build the best open source collaboration tool on the market. See you soon.
I'm back from Utah and pumped!!!!!!! What a fantastic week at Brainshare. We had a blast spreading the word about ICEcore and getting feedback on what people think about the product. For those of you who missed it, we demoed a lot of new features that will be available from an SVN repository, hopefully this week sometime. ICEcore trunk now has the ability to "track" users, folders, or workspaces. What does that mean you ask? Well, put simply, if you discover an interesting place in an ICEcore system you will be able to add that place or person to your tracked list. This list is similar in some respects to the Twitter concept of following someone. Anything they post into the ICEcore system you will be notified about in your "feed" on your workspace. This is a feature I have wanted forever. No more having to email someone every month or so to see if anything new is going on. Now you will see it on your "My Workspace" anytime you login. We also now have the ability to "share" any content with users or teammates by pressing the "Share It" button. How's that for cool? The response to this at Brainshare was fantastic! And that's not all? We are developing a new way to deploy ICEcore accessories. Now you can integrate external web applications written in any language as an ICEcore accessory. How does this differ from an iframe you ask? Well, I'm glad you asked. Not only do we provide a fine grain of access control to any remote application but we also have extended our security model so that when the remote application is registered in ICEcore it is given privileges just like any other user of the system. Then when the application is executed by a particular user, the rights granted to the user are the lesser of the two. Very nice. You also may have heard about the DBus integration that was presented at the Wednesday and Friday Keynotes. This is exceptionally cool but I'm hoping to get the developer of it to give us a brief description of it in the coming days, so stay tuned.
And what have I learned? ICEcore gets attention and building community is hard work. I worked the Novell booth at OSBC this week and have to admit that people love the functionality of ICEcore. I'm don't think I had a single person walk away muttering about this or that. I did have several people though who liked the demo and the features that we have on the way. Include in that a couple of good ideas for new features and I think it was a successful conference. Now back to work. I plan on releasing the SVN sources this week or weekend and getting the ball rolling on integrating our sources with the openSUSE BuildService. This will allow users of all sorts of Linux distros take a wack at compiling and using ICEcore. Now I just have to figure out how to do configuration of the product at the same time as we do an rpm install. What joy!
At ICEcore we are looking into the next generation of what team collaboration looks like and are exploring what impact social functionality common in sites like Facebook and LinkedIn play in this evolution. This is a very interesting topic and one that we are having lots of fun with. I thought I would jot down some of my thoughts to give the community insight into what's happening. In today's ICEcore a workspace is created and team members are invited to participate. There are no concepts of interest groups or friend networks. However, given ICEcore's flexibility these should be relatively straightforward to add. ICEcore already comes with a powerful search mechanism that allows you to configure either search portlets or search accessories. These search accessories can be designed to allow users to find almost anything at any aggregation level. For instance, if you want to find all the newest material created across all your teams it is simple to configure the search criteria of the accessory and place it in your personal workspace. This also would come in handy if you wanted to perform a search for all the new material related to certain classifications of entities in the system. For instance, if ICEcore had the concept of friends, other ICEcore users you have a relationship with, we could use a search query to find all their newest content similarly. There are a few things missing that we are working on. We currently don't really have the concept of friends in the system and we also don't allow people to subscribe to workspaces of interest to them and follow additions made to these areas of interest. These are features we are considering adding so that ICEcore can become even more user friendly and addictive than it already is. So what do you think about adding social networking features to ICEcore? What would you like to see?
State:
publish
The ICEcore Community welcomes David Lapalomento to the project as a core contributor. David is a new employee with Novell and will be working full-time on the ICEcore open source project. David brings with him an excellent knowledge of Java, C, and Linux and has previously worked for Hewlett Packard and Marketplace Rewards as a Software Engineer. I hope everyone makes David feel right at home by asking lots of questions in our forums so that he gets acclaimed quickly. David is getting started right away working on something that is near and dear to lots of ICEcore users, installation and templates. David is making the build process more manageable and enhancing our template making process. These enhancements are aimed squarely at making ICEcore a more extensible platform for web application development and, we hope, will encourage contributors to develop custom applications and share them with the community. Thanks, David. Keep us informed of your progress.
State:
publish
Just a note to let everyone know that we are busy working on a number of things that will make ICEcore an awesome collaboration platform. I say platform because that is exactly what it is. Many people of the last few months have downloaded and installed ICEcore. I wonder whether we have explained the platform features well enough for our growing userbase to understand its potential. This post tries to explain some to our features that may be less obvious. The ICEcore Team server is an open source extensible team collaboration platform built on Java that runs on both Windows and Linux within the Liferay Portal Server. It enables teams to communicate and share data effectively without the hassle of managing multiple applications. ICEcore provides teams with the tools to create content and disseminate knowledge among co-workers while also providing a real-time collaboration component. The ICEcore Conference server is tightly integrated with the team collaboration server and provides presence and conferencing capabilities to the ICEcore Team server.
ICEcore has solved the problem of having multiple data stovepipes for each collaboration application by creating a unique software platform that allows flexible data types to be created and stored in one application and searchable from one index. ICEcore even ships with the most common entry types already defined so that users hit the ground running. The entry types that ICEcore ships preconfigured are: - Files (WebDav accessible)
- Blogs
- Wikis
- Discussion forums
- Photo albums
- Team Calendar
- Tasks and Milestones
- Surveys
ICEcore also allows custom types to be created and used by your teams. These new entry types are also indexed and searchable right along side all the other preconfigured types in the system. This flexibility allows knowledge workers to communicate the way they want to communicate and still have their contributions found by everyone on the team. If one of your team members likes to blog about her new discoveries and another prefers to contribute their contributions through a wiki, they can both work the way they prefer and still have their contributions indexed and searchable within the same application.
This flexibility is achieved in ICEcore because the system is based on an extensible definition system. These definitions are the building blocks that form the foundation of ICEcore. In fact, each of the entry types that are included in ICEcore implements an ICEcore definition which provides everything the platform needs to be able to display, store, retrieve, index, and expose web services for a specific definition. The beauty of the system is that a definition can be created for a specific business process or function. In addition, if the preconfigured definitions don't fit your needs you can modify them.
Not only does ICEcore allow you to extend the system so that it suits your needs for collaboration perfectly, but there is also a template system built in that enables administrators to predefine workspace and folder configurations which allows users having little or no ICEcore configuration experience to enable advanced functionality quickly. For example, in Figure 1, The workspace has been customized so that a calendar and project wall are on the main workspace page. Typically, a team workspace homepage only displays the members of a team, However, It is often more useful to see all the current activities and team calendar on the homepage of a workspace. With templates you can save this layout for use in other team workspaces. That way, when anyone creates a team workspace using this template they will get the layout defined.
I hope this post has gone a little further in describing the power of the platform. Additionally, we are hard at work to improve the system by improving the form and entry designer and hope to improve the layout capability of the newly created entries. Once we get some of these key features under our belt we hope to release an SDK and sample applications that will help our community better understand our flexibility and power. Keep tuned in for more info.
State:
publish
Hello, ICEcore users! As you may have noted from Brent's recent posting, I'm the new member of the team. I've been brought on to work full-time on developing ICEcore for the open-source community. So far, that's meant taming a wild build process. In the coming days we'll be releasing those changes, hopefully easing installation and configuration for contributors and users. After that, expanding the existing "templates" system is next in line. If you'd like to weigh in on the direction we're heading or want to lambaste our priorities, please post a comment on this blog or hit up the forums. Introductions out of the way, I really wanted to take this post to address what I see as a significant weakness in ICEcore as it exists: lack of test cases. I don't think there's very much debate over the value of testing today - it guards against regressions, decreases bugs in new code and acts as supplemental (and up-to-date!) documentation. I'll be developing new tests for any code I'm writing and improving existing code coverage will hopefully get some cycles soon. Writing effective test cases can be a stumbling point for coders new to testing. Poor test cases add to code maintenance overhead without providing functional guarantees or, worse yet, lend a false sense of security to a broken project. It is certainly within the grasp of anyone to write good test cases as long as you keep some basic tenets in mind. First of all, what is the desired scope of your tests? Test scope is normally classified by how many layers of your application an individual test exercises. Application tests are normally broken down into unit, integration, functional and system tests in order of increasing scope. In ICEcore, we'll be concentrating on integration tests. That means each test will attempt to verify some property of a method with an actual database connection. This is in contrast to pure unit tests, which would typically mock-up or narrow their scope to avoid communicating with other layers of the software stack. One particularly important part of test scope is understanding what you're not testing. For our integration tests, it would be totally valid to ensure that data objects are written to the database when testing a save() method. It's not valuable to test whether a third-party ORM layer is batching updates or not. In general, you should always assume your dependencies are infallible (and further, testing the sort of performance optimization above is almost always dubious). In reality, this may be far from the truth so revel in this freedom of testing while you have the chance. Also, keep in mind that each test should be focused on one property of one method. If you're writing a test case for the persistence property of that save() method, don't test whether it deals properly with null pointers: that's a totally different test. I'd still like to discuss how to determine what properties should be tested for a method and what constitutes a reasonable assurance that a property holds (along with some quick instructions on running JUnit through Eclipse) but I think that's enough for this post. I'll be writing more soon, until then I'd love to hear any comments you have or experiences with testing in general.
State:
publish
We haven't talked enough about ICEcore Conference in the past and that needs to change. The reasons historically have been that ICEcore's enterprise versions did not sell Conference by itself. The model for enterprise has been Teaming and Teaming + Conferencing. You couldn't get a Conference license without Team. Unfortunately, this hasn't changed, however, it is time to give credit where credit is due and help everyone understand what Conference is and what it can do even when not using the Team component.
So what is ICEcore Conference and what does it do? This may be self-evident but Conference is a service that provides meeting capability combined with desktop and application sharing. It also exposes an external API and can be integrated with other systems and services just like we've done with ICEcore Team. This allows presence and meeting capabilities to be added to just about any application you can think of. Conference features several features to help manage its meetings including a Meeting Archiver to record sessions, an Email Service that sends iCal meeting requests, and also an Address Book that keeps track of contact information for the people you contact frequently. All of this AND its open source. What could be better? ... Well since you asked
ICEcore Conference has also extended the Pidgin IM client with our own protocol handler so that presence is broadcast and also meetings can be created and scheduled right from the Pidgin client.
Conference is made up of multiple components and uses an XMPP router to handle messaging between the components. The following picture depicts the architecture of Conference. Note that most of the components support multiple instances so that clustering and load balancing is built in to all the different components.
We currently support 3 different platforms for the Conference server. One for Windows, one for RHEL4, and another for SLES10. We anticipate having the source tarball available soon so that builds can be targeted at other platforms as well. The client software to manage meetings is bundled into the server and is available for download and install once you have the server up and running.
I touched on this earlier but its worth mentioning again, Conference can be integrated with almost any other software so that presence and real-time meeting functionality can be added to your application using our external API. This is one thing we would like to see other projects start doing. Wouldn't it be nice to have a Buddy portlet in JBoss that shows presence and allows meeting creation with the touch of the mouse? You could do the same with SugarCRM if you wanted to. Anytime someone's name is displayed it could also include a presence icon you could click to start an instant meeting. This is what real-time collaboration is all about. Come and try it out and get started helping us make it the best conferencing platform out there.
State:
publish
Summary This document intends to detail the project plan for expanding and upgrading the existing ICEcore SDK. The key components of this upgrade will be: - Creation of a simplified extension bundling format
- Specifying an extension API
- Developing a web-based extension installation procedure
- Developing a web-based un-installation process
- Simplifying mechanisms for deploying custom extensions into existing workspaces
The design and procedure for implementing each of these goals will be outlined below. As this document continues to grow and evolve, comments and feedback are welcome. Extension FormatCompleted- Extension deployment listener
- FileChangePoller on opt/ for new WARs
Extension format: +- <extension>
+- src +- main +- java |- <java sources>
+- resources +- webapp +- WEB-INF +- views
+- test +- java |- <java sources>
+- resources
Todo- Post definition_builder_config.xsd to public internet address
- Registering a new extension definition/view/service
- Registering new definitions at runtime
- DefinitionModule
- TemplateModule
- Extension deployer
- move view JSPs to WEB-INF/jsp/ (avoid if unnecessary)
Goals
- Package extension up as jar (maybe war)
- Components:
- View templates
- Java model classes + XML entry definitions
- Java business logic
Stretch Goals- Maven archetype for easy extension project setup
- Create more expressive xsd for definition
Extension APIGoals- Automatic accessor/mutator DAO code for model objects
- Automatic form generation from model specification
Stretch Goals
- Interactive environment shell
- Allow for expert low-level customization (of SQL, entry defs)
- Templating language/xml extension to avoid JSP
- Custom, pretty URLs
InstallationWeb-based extension management interface Un-InstallationThrough extension management interface Extension Deployment- Accessories should be registered and available the the regular mechanisms
- Applications (formerly templates) should be automatically registered and available through the "New:..." button on eligible folders/workspaces
Development Schedule- Create relatively simple extension which exercises all aspects of extension development platform
- Views
- Model Objects
- Business logic
- Develop tools to simplify extension creation
- Automatic DAO creation
- Automatic form generation
- Implement processes to enable web-based installation
- Web-based extension management
- Develop un-installation procedures
State:
publish
Last week I started discussing the type of test cases that exist, characterized by the depth, or scope, of the application logic which they exercise. Unfortunately, knowing what type of tests you'd like to write isn't enough to guarantee that your test cases are effective. Writing good tests is a bit of a black art but I'll attempt to outline some pointers which I have found useful in this post. First, there's the low-hanging fruit of test cases: the simple success test. If you're missing a test case to demonstrate successful operation for at least one trivial case per method, you're flying blind when it comes to ensuring the basic functionality of your program. I really can't stress enough how great it is to have these tests- once you've got enough coverage here, you can refactor and experiment with near-impunity. These test cases make sure that the lower-bound of functionality in your project encompasses your use cases. One test per method is a reasonable amount of code, however, which is why I suggest writing tests as you code. The side benefit to the test-as-you-code method is insight into how consumers of your work will view your API. Sometimes, that can be an eye-opening experience. The next set of tests I like to develop for each method are the boundary-case tests. This is where you examine the arguments to the method under test and determine what extreme values might trigger unforeseen behavior. Let's consider the method below: public <T> T update(T t, int x) throws IOException { ... }update() takes a generic argument T and an int x. For any Object argument, testing the null case is an unfortunate necessity. That doesn't mean your method need handle the null case- it's perfectly acceptable to declare null is forbidden as a pre-condition of your method (so long as you have an assertion to that effect right at the top of your implementation). For the int, I'd say thorough test cases would at least try zero, one, Integer.MAX_INT and Integer.MIN_INT. For those truly intrepid souls who have made it this far and still desire yet greater assurance of their code's perfection, there's one last region which must be explored: side effects and exceptions. You have to be careful here because good test cases don't normally touch implementation details but often the imperative programming model makes side effects and/or exceptions an intended piece of a method's contract. It's definitely wise to use tools like EasyMock to simulate exceptional cases and verify correct behavior in the face of catastrophe. On top of that, checking that updates made it to the database, or that your temp files were deleted from the file system, or that your automated battle-tank has engaged "Berserker" mode all seem fair game to me. What tools do you use to write test cases in practice? For ICEcore, I'm working in Eclipse which makes developing and running JUnit tests as easy as anything else in Eclipse (which may not be saying very much). You can create new test cases through the File > New... menu and selecting JUnit Test Case. When you're ready to try out your tests, right-click the test/package/project of interest and select Run As... > JUnit Test. If you see the green bar, pat yourself on the back. If the bar is red, pat yourself on the back twice because at least that means you wrote some test cases (and you'll probably need the encouragement to get them fixed). There's certainly volumes more to be written about testing but I'm spent for now. Until next week, keep your eyes peeled for the new source release and feel free to post any comments or questions here or in the forums.
State:
publish
I have been reading the book entitled 'Organization Survival in the New World' by Alex and David Bennet. It describes the changing dynamics of organizations in this new era of "free-flowing" communication. One of the quotes from the book is: "A knowledge-centric intelligent complex adaptive system(ICAS) will recognize the value of information and knowledge in decision-making. It will connect people to people, people to systems, and systems to people to ensure availability and delivery of the right information at the right time for decision and action." I thought about this and realized that ICEcore has been built to fulfill this mission and does it in powerful adaptive ways. Bennet later describes how a knowledge-centric organization can achieve success defined by eight actions. I'm going to go through this list and discuss the way that ICEcore can help create an organization that functions as an ICAS. - Aligning strategic direction. => Using ICEcore you have that ability to publish your organizations objectives in the Global Workspace area so that all your employees can understand the company's direction. You can also setup notifications so that email is sent anytime you add to your global area.
- Enhancing mission performance => ICEcore totally excels here. Using ICEcore collaboration tools like blogs, wikis, forums, and file folders you can enhance any mission or project you or your team take up
- Increasing collaboration opportunities => ICEcore is all about collaboration and making it easy to collaborate. Using ICEcore you can create teams quickly in response to an organizational need and even create special applications to support your team. By using workflow and creating your own definitions your customization possibilities are endless. Stay tuned for more on this coming to OSCON. Not only that, but Team + Conference enables you to see who contributed something and start and instant meeting with them via IM or even share your desktop. The collaboration opportunities are endless.
- Driving process improvement => Process improvement is what our workflow functionality is all about. Using workflow you can create CMS systems, approval processes, or even a your own custom collaboration application that includes an ISO9000 process. Whatever you want, the possibilities are endless.
- Facilitating learning =>Some of the most exciting features in our 1.1 Alpha releases are in this area. In the 1.1 release you will be able to "track" people so you can stay informed on what your organization's best and brightest are doing. You will also have an Activity Feed that pumps all the information your interested in right to your "dashboard". This release totally unleashes the power of social networking for the enterprise. If you've ever wondered how Twitter or Facebook could be productive you've got to check out our 1.1 release.
- Facilitating availability of expertise => If you're new to Team and Conference you may not know that all the Team content is tagged with who created it and who has modified it. Even search results give you this info to help you find your company's experts. Combined with Conference you also know whether the person is online or not and can start a real-time meeting with them if you need help understanding what they've created.
- Increasing innovation and creativity => ICEcore is a complete collaboration suite that includes many tools that will help your team discuss and manage content. When your employees discuss the things that effect your organization only good things can happen. Unleash your organization's creativity by letting your teams try ICEcore.
- Enhancing job performance => Given everything I've just mentioned this one is a given :-)
Turn your organization into an ICAS. Try out ICEcore now.
State:
publish
ICEcore will be at OSCON 2008 (sort of :-). Everyone should try to make it to Portland July 21st if they can. We have some really big project news we are going to announce that I think everyone involved with ICEcore will appreciate. Not only that but David and I will be speaking in one of the sessions describing our new plugin architecture he's been working on and demoing a really cool application that he's built. All in all, I'd say this is one not to miss. If you make it there find us in the booth or after our session and we'll be happy to answer any questions about ICEcore :-) :-)
State:
publish
At last!! the news is out and about. We've been keeping it bundled up inside for weeks now. We've changed our name from ICEcore to Kablink and with it comes some pretty amazing functionality. For those of you who have asked for it in the past, we've added workflow to the open source project (now called Kablink). This is huge! Workflow is a fantastic tool to add to the ICEco ... err, I mean, Kablink project because it enables so many new and interesting applications.
Just last week someone in our forums asked how they could keep something from being published until it was reviewed and ready. Well now you have a solution. Create a workflow that has 3 states. The first state will be for the original author to work on the copy. The second state will be for the review team that is going to approve or disapprove of the work. And the third and final state will be for all the users that will consume it. Along with the states you will also need to create transitions between states. With the new Kablink workflow you have the ability to setup Manual transitions but also Automatic ones as well. For the simple example I'm using we'll stick with Manual ones. Each state will need to have transitions created that allow it to move to another state (in some cases back and forth will be needed, like from the review team back to the original author).
Once we have the states and transitions defined we need to create ACL (access control lists) for each state defining who can do what. This will allow only certain users access to the underlying object in a particular state. There are several ACLs that can be applied like the standard permissions of view and modify, but there are some new ones like "transition in" and "transition out" of a state (I assume these are self-explanatory).
Now that we've created state, transitions, and ACLs for each state we are ready to use our new workflow. The great thing about Kablink workflow is that unless otherwise specified you can assign it to any type of object in the system. Want to create a review process for your team's blogs? No problem. You just did. What about create a paid-time-off form for your employees? Again, no problem. The types of solutions that Kablink workflow creates are tremendous. I've even heard of a customer of Novell's Teaming product, which gave Kablink the source code for workflow (shameless plug), creating ISO9000 processes using workflow. This is some pretty amazing functionality when you think about it.
To enable a workflow you will need to go to a folder and select the "Configure" option from the "Modify" menu in the top right. You should then enable the workflow you created for this folder. Now all the new entries you add to this folder will have the new workflow enabled. When you're ready for it to move to another state, simply use the workflow dropdown list for the entry to move it to it's next state. It's that simple.
I hope you enjoy our new look, our new functionality, and our new name. Tell your friends and see you at OSCON this week for our launch. K|-)
State:
publish
With Facebook, Twitter, Wikipedia, Wordpress, and others the web entered a new phase a couple of years ago. The Social Web emerged full of collaboration and networking between groups of people. People are collaborating and sharing like never before online. Today I'd be surprised if someone reading this didn't belong to some social website (email me if you don't I'd like to know why). All these social networks and community sites are great but they have exasperated a problem that has been in CS since the early days, data silos. Now I have my friends in LinkedIn, my Followers in Twitter, the RSS feeds for all my favorite sites in Google Reader where I can discover new things based on my history of feeds, the list of things go on and on and on and on. Each of these services capture data relevant to me and my network and each of these services has value of some kind to my life or I wouldn't use them. However, the lack of integration in all these platforms has led me to think that collaboration should be a service, not a component of a system. Why shouldn't I be able to add comments to a Crystal Report even if Crystal Reports doesn't support them naively? Why shouldn't I be able to rate a database record from an Access database and share with others that have permission to see that record?
There seems to be a convergence of several different patterns and technologies that will enable "collaboration as a service" to become a reality. The first is RESTful services. These services perform two very important functions. They provide a unique URI for a resource or service and a common method for accessing that resource. These services also accept the standard HTTP mechanisms for management of the resource. Using GET, POST, DELETE, and other features of HTTP we get a standardized way to accessing a resource.
Next is identity. It would be hard to stitch all these services together without a common way of representing and authenticating a user. With new concepts like OpenID and SAML we are moving in the right direction so that identity across services will be less of an issue. Projects like Bandit are leading the charge in developing technologies that will enable this.
Now that we have unique URIs for our services and a standard way to authenticate, it is easy to imagine that some of the original concepts for the Semantic Web could be applied to these resources so that sets of meta-data could be added that describe these service resources. I'm just thinking here and don't profess to know all the ontologies in this space, but I could easily see something like FOAF (Friend of a Friend) being a starting place for a "my team" that I want to collaborate with. And if every person in my FOAF file can describe their RESTful services (Twitter accounts, Facebook, blog, etc), I'd have a pretty good idea of their interests as well.
Now that we have this composite built, what do we do with it. To create collaboration as a service I believe we would need to simply the interface to all these services so that I can see everything from one cockpit. This would be where something like RSS or Atom would come in handy. What if all these nice RESTful services would provide me with an RSS formatted feed so that I could display it in my shiny new cockpit? Now we're talking.
This gets us to the part where everything is reformatted into my cockpit but I still haven't collaborated yet. But I'm getting sleepy so I think I'll save the rest of my ramblings for later. ;-)
State:
publish
We finally got our Team SVN repository migrated to a public SVN server. Hooray !! Source code for all !!! https://forgesvn1.novell.com/svn/kablink (client) https://forgesvn1.novell.com/viewsvn/kablink (browser)
State:
publish
For those of you who have taken the leap and installed our Conferencing server you understand the benefits of using real-time communication in your team collaboration. We have some big news that I'm excited to report. Matt Crane, one of the Novell engineers working on Conferencing, is adding audio mixing to kablink. ;-) This will give the kablink project support for conference calls. This functionality will be provided by Asterisk, the world's leading open source PBX, telephony engine, and telephony applications toolkit (blatant pitch). We are totally excited to have this functionality on the way and are looking forward to Matt giving us a bit of detail in the wiki or forums as he gets closer to a working demo. Just imagine being able to start a conference call from a kablink team webpage with the push of a button ;-) Awesome.
State:
publish
New to Novell as of September 15th, I'm working on getting all of Kablink packaged up properly so that it can go into the repositories for Novell Suse Linux and be installed just like any other package. There are a few issues such as creating a silent install rather than today's install that asks a lot of questions. To allow the silent install, we will need to add a configuration interface, probably a web page on the server, to configure the server after it is installed.
Things I'd like to see in the results: Some way of informing the person who installs the package that it requires configuration via the following URL. This could be text in the package description as seen in the package manager, but I'd like something harder to miss. Ideas? Suse will probably reject anything that resembles a popup triggered from inside an RPM--that's not silent, anyway.
Hmm, it would be lovely to be able to have the RPM send email to the person who installed it. That's harder that it would seem because most people ignore mail that is sent to the local Linux box. I will look to see if there is something like the notification manager other distros have in Suse, because maybe that's the way to go if we decide to do more than just text in the description.
I'm in suburban cow country, north east of Philadelphia, moving soon to NJ, just across the river from Manhattan, where we're going to have a nice view of the George Washington Bridge.
I have a long background in Linux, I've programmed down at the C level, particularly for some network security stuff, but these days I like the modern dynamic languages such as Ruby and Python. I have been doing user interfaces for many years and I collect odd-ball input devices.
My Linux history: Slackware and early Red Hat on Digital Alpha (at home, I had a Multia/UDB). Alpha was DEC's (Digital Equipment Corp.) 64-bit RISC processor. Compiling the kernel was so cool. The intense pain that was getting the early PowerPC Linux to run on early Macintosh (8100) hardware.... Since that time I've worked with Fedora and Debian and Ubuntu, mostly, doing UI work, networking, and a compute-server. --> On my main workstation I am having problems with Suse insisting on working through the RAID bios and producing indecipherable strings instead of drive/partition names. I have tried Everything. I basically have to disconnect all but one disk to get Suse installed properly. It's now unbootable because I removed the bios RAID entry for a disconnected drive. Really. When it was there it didn't have any Suse-mounted partitions on it. I think I have to reinstall. Again. This is not an fstab problem, it's probably in the initrd, because that's were I get dropped if I go look on console one while the X console is just stuck making no progress in booting. Since I'm one of those people who can install Linux on a dead badger, I'm bothered by this . I think this is my first real blog post, tips/corrections welcome. I read blogs, just haven't focused my writing activities there. Eirikur (Oh.... I'm from the Boston area. Say my name as if I were somehow "more Eric" than some other person. "Erik-ur." This is what I grew up hearing from my friends.)
State:
publish
Team collaboration and social networking software are all the buzz right now, however we need to look at the overall contribution these technologies bring to the enterprise in terms of value before we determine if they should be the new "cool" technology. Are IT programmers ready to answer the CIO's question of "How will team collaboration software add value to our business?"? Maybe? Maybe not? What I hope to describe is how you can answer that question and what to look for in order to get your company started using collaboration software to solve real business problems. Which leads us to our first real question we need to answer and that is - how does collaboration add value to the bottom line of a business? The short answer is that it doesn't, not in and of itself. Collaboration in the right context and under the right conditions can produce spectacular results in the form of quick customer response times, better organizational knowledge, or faster time to market. Each of these business metrics can be enhanced through the use of collaboration tools, if done correctly, and harmed if done incorrectly. Imagine this scenario: You thought you addressed your multi-national organization's collaboration infrastructure needs, but it's not looking so good. Your IT department provides many popular tools to assist your workers, such as wikis, blogs, threaded discussions, email, file shares, and more. But users are burdened with having to learn multiple applications with different user interfaces, data is often isolated in one application, users report that information is hard to find and sometimes gets lost, and none of these applications reflect your core business processes (instead, you often bend your processes to cater to the way these tools work). This is the scenario your CIO fears most! To begin the process of understanding how to implement collaboration software successfully in your organization, we are going to start with a high level view of how knowledge gets created in an enterprise and how collaboration tools can aid in the understanding and categorization of knowledge. Knowledge Cycle 
The diagram above represents the process information flows through as we consume and understand it. There are 3 main phases that aid in the understanding of content and information, the first being the Publish phase. During this phase tacit knowledge is converted into something that is explicit and consumable by others. This phase represents the transfer of one person's understanding, education, and wisdom into a tangible good. The publication format can be nearly anything - a blog, wiki, document, anything that is consumable by another person.
The next phase of the cycle is the "Discover" phase. During this period the output of the publication event is found by another person. This can be done via search, browsing, or by someone sharing the document with you. This is a particularly important phase because without discovery the publication event will go unused and is useless. This area represents a significant area where technological advancement, not only in search technology but also in personal relevance, can be applied and utilized. Services like Twitter, Digg, and TechCrunch are using community and network recommendations to provide useful metadata about discovered publications. These services are providing a valuable filtering mechanism to help you maximize the quality of publications you consume. RSS and Atom feeds also allow you to stay focused on publication events that occur in areas you are interested in. The confluence of search technology, community reviews, and feeds are making the Discover phase of the Knowledge Cycle easier than ever and is providing valuable insight into what items are relevant to you.
Another interesting component of the Discover phase that has yet to be exploited is network relevance and its implications to you. Some services such as Twitter and LinkedIn allow you to monitor a "network" for events. LinkedIn for instance provides information about changes in your social graph as people are added and relationships forged. This graph is a highly relevant graph to you. It maps your closest work and personal relationships and also allows you to get a glimpse of the internetworking among your peers. Why is this important? Because this graph represents your preferences and social circles. I would argue that this information is used less than it should be to help determine the publication events that we consume. If techniques existed that would allow us to mine our social graph for not only relationships but also consumed publications and the quality of those publications, this information would be extremely helpful in shaping our information consumption. This area of the Knowledge Cycle, I feel, will yield great results in the future in helping us discover and apply the correct information to our problem domain. The next area of the cycle is the Discuss phase. During this phase information has been found and consumed but may not be fully understood by the consumer. This phase is a critical component of the Knowledge Cycle because it promotes and encourages questioning and full understanding of the material. Many tools can be used in this phase: phone, IM, email, forums, etc. The requisite for the tool is that a Q&A; can take place to facilitate understanding between parties. To better disseminate information and to make it more accessible to others in the future public exchanges should be used when possible. Communication channels like phone, IM, and email are great mechanisms that enable questioning and understanding but also limit the consumption of this "give and take" process to a very few parties. This sometimes is sought after behavior but in many cases the Knowledge Cycle would be more efficient if the discussions where held in public and fully searchable and cataloged with contextual elements. "Add Value" is the phase of the cycle where the information you discovered and read is now fully understood my you, the consumer of the content. At this point in the process you can fully appreciate the implications of the content and are beginning to understand how this new information can be applied to your own scenarios. The collaboration events in this phase focus on your adding value to the initial publication event so others in your network can more quickly find and understand the same information. This involves adding public tags, reviewing the content, adding Digg style ratings to the publication, or annotating the publication so that others can better understand its meaning from your perspective. This phase adds a new dimension of information to the original content that is extremely useful especially if the contextual usage of the information is maintained either via your network or some other means. This means that the context in which you are trying to apply the knowledge from the original publication is just as important and relevant as the value added components you associate with the document. This context allows your network or others in similar environments to have a relevant perspective on the original information which can greatly reduce the understanding lifecycle. The last phase of the Knowledge Cycle is the Extend phase. In this phase we are applying the knowledge, wisdom, and education that was distilled in the original document into scenarios that we own and are a part of. In this way knowledge has been transfered to us from someone else and used in, perhaps, totally new ways. The context of the original information may only tangentially apply to these new scenarios, if at all. A great example of the extension of knowledge into new areas was the seminal work by Christopher Alexander "A Pattern Language: Towns, Buildings, Construction". In this book Alexander makes the case for developing construction practices based on the fundamental notion that harmonious patterns have existed in architecture for centuries and that these patterns should be reused if they add value and harmony. This work was later applied to computer science by several researchers, most notably Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides and a new field in computer science was formed with the same basic tenets applied to computer science as Alexander had originally written about. This example clearly demonstrates the Extend principal (although on the extreme perhaps) that allows knowledge designed for one audience and context to be discovered, discussed, and transformed into another entirely different area of study.
State:
publish
I saw this picture and couldn't resist. This picture looks the way I feel when I try to find data in the typical environment I find myself working in. "Let's see, was that factoid I'm trying to recall an email someone sent me or was that in a wiki I read somewhere?" "Did that cool tip I sort of remember come from a blog or was it an RSS feed I subscribe to?" Who knows? The fact of the matter is that technology has created some fabulous tools for us but we (IT professionals) have yet to put all the pieces together for knowledge workers. Thus, we find ourselves living in the mansion above :-) where everyday we spend valuable time climbing ladders to the next trailer to see if we can find our "stuff" there. Integration is beautiful ... 
Having the ability to combine data silos and reduce their contents to a single search box is the Holy Grail of computing, and like the Holy Grail it remains allusive. Google has made huge progress in integrating data from multiple sources for Internet users, however, Google can't get behind company firewalls and it can only index what it can find. This means only a fraction of the data relevant to you has been indexed by Google or the like. The rest is locked in company databases and storage systems safe and sound from the prying eyes of YOU and Google. This means you still open your email client to search emails. You still go to the internal company blog to find that important message from HR. There is no Holy Grail of Integration that pulls everything together to make it easy for you to find and use or reuse. Or is there?
The current trend in search is to index things using a web crawler that constantly scans a system for updated files and then indexes the content of those files (if it can parse them). This is a fabulous technology for indexing the World Wide Web where standards like HTTP, HTML, and XML exist, but what about inside the Ivory Tower of Corporate America where we live off IMAP and SQL? Something we've talked about in the Kablink project to help with this problem is the use of OpenSearch (http://www.opensearch.org/Home) and RSS (http://en.wikipedia.org/wiki/Rss) to bring things together in a meaningful way for users. What if each system in the corporate infrastructure supported an OpenSearch query and could return its results as an RSS feed? Now the steady diet of IMAP and SQL protocols you've been using inside the firewall has a standard mechanism for producing query results that can be displayed by numerous tools on your desktop. Nearly everyone has an RSS reader installed on their computer somewhere, and if not probably use an online one like Bloglines. Well, what if you could subscribe to a database table or what if you could run a web search that also integrates results from your internal email system? I think we are at a point where these things are possible and just around the corner. What do you think? Let me know your thoughts on whether you think this will work or what your ideas for a fix are.
State:
publish
So if you haven't heard we added a nifty feature to Kablink called "Remote Applications". Remote applications are a way to add third party content to a kablink Teaming instance in a secure and configurable way. In its simplest form a remote application is simply an HTML fragment that has been provided via a remote web application, but it can also do some very sophisticated integrations as well. If you want a comparison they are similar to Facebook Apps in that the application runs on another system but has the ability to call back into Teaming for data. Remote applications are setup by the administrator under the "Site Administration" option of the Manage menu. The really interesting feature of Remote Apps is that they run using the permissions of the user loading the application. This means the Remote App only has access the the data in the system that the user has access to. We've even thought to add a maximum permission to an app so that someone can't be tricked into using the app and destroying their data. That way the lower of the app permission or the user's permission will be used when accessing data. This is what we suggest setting up for unverified applications where the reliability of the app may be in question. Another great feature about remote applications is that they can be called directly from a workflow during a state transition. This allows developers or administrators to integrate with other systems via workflow. How great is that? Now you can write an application that can be called from a workflow that changes the state of another system when a kablink entry is being transitioned. There is a great chapter in the kablink Customization Guide that explains the inner working of remote applications and is certainly worth the read. A quick summation of how a remote application works is this: 1) Create a reference to a remote application using Site Administration in Teaming. This requires you provide a URL of a remote system which will accept HTTP Posts and provide HTML fragment in return. 2) Add an remote application to Teaming as a Workspace Accessory, in a workflow, or even as part of a custom entry 3) Now when the accessory, workflow, or custom entry is created your remote application will be called using an HTTP Post from Teaming. In this POST important information is passed to the remote application. For example the following info is posted to a Workspace Accessory: 'ss_version' => string '1.0' (length=3) 'ss_application_id' => string '15' (length=2) 'ss_user_id' => string '7' (length=1) 'ss_access_token' => string '1-b7342ef30743e69be0a5fd85586c83c4ce030def-ff8080811d0613c1011d0614ce9c0003-15-7-0-1' (length=84) 'ss_token_scope' => string 'session' (length=7) 'ss_renderable' => string 'true' (length=4) 'binderId' => string '70' (length=2) The important thing to note is that the remote application now has an access token and the binderId that the application was called from. Why is this important? Well by using the ss_access_token you now have access to the full suite of web services that Teaming offers at the URL http://teaming_instance/ssr/ws/TeamingService?wsdl and you know where what workspace or folder actually made the call. (Note: For a workflow or custom entry you will get the entryId as well). Now that you have access to the Kablink Teaming instance and can use Teaming data in combination with other 3rd party data and provide HTML fragments in return that can be consumed by your instance.
State:
publish
Just a quick note about a tutorial I put together today for remote applications, our new data mashup and integration method. I wrote a PHP application using the Zend Framework and the lighttpd web server to serve it up. Check it out in the Wiki. It's a simple application that displays the contents of the HTTP Post that kablink sends your remote application when it asks for an HTML fragment.
State:
publish
Ever wonder how you could integrate your kablink or Novell Teaming instance with a remote system and pass data back and forth? What if you wanted to send your SAP or SalesForce.com systems some of your kablink data. You can using custom actions and conditions that can be integrated into the workflow engine processing. A new tutorial in the Wiki walks you through creating a custom workflow callout that can handle some pretty heavy lifting when it comes to data integration. This tutorial really gives you a glimpse of the power that was added to Kablink with the addition of workflow. Check it out!
State:
publish
I am in the process of developing a plugin / extension specification for Teaming and want input from anyone interested on what this might look and feel like :-) I just posted a first pass of a high level document that I'd love some feedback on. The document is in the Ideas forum, here. Feel free to rip and burn.
State:
publish
We are currently looking into a project that would put Kablink into a RPM repository for Linux, and eventually into the openSUSE BuildService. It is a big job and I've put together some thoughts on how we would do it in the Kablink Development forum. Anyone interested in Kablink on Linux should check it out and give me your feedback. We're also looking for experienced RPM developers who would like to help out and get paid :-)
State:
publish
There is always lots of chatter about Teaming integration and usage. How to customize? How to use workflow? etc. What I wanted to briefly touch on today is what I've been working on recently which is Conferencing. Conferencing, if you recall from by blog post many moons ago, has a very interesting architecture built around XMPP. Conferencing has it's own protocol based on XML-RPC that is delivered by XMPP and each component that comprises our solution registers with the Jabber server and receives XMPP messages telling the component what to do. What I've been working on lately is the use of the underlying XML-RPC mechanism to schedule and activate meetings remotely from other services. I am currently looking at an integration with SugarCRM that will create Conferencing meetings from within SugarCRM using PHP. Each time a user creates a meeting in SugarCRM they will have a checkbox on the "Create New Meeting" page that will also allow a Conferencing meeting to be created. Once I'm a little further along on this endeavor I will post a tutorial, so stay tuned.
State:
publish
|
|
Skip Footer Toolbar
|
The following URLs are supported in Teaming, and might appear in the table above.
|
|
Permalinks
|
Permalinks are URLs that remain constant over time, and are used to reference individual workspaces, folders and entries. You can use them as bookmarks, or e-mail them to others. Copy and paste them as needed.
|
|
E-Mail Addresses
|
If the folder owner has set up an e-mail address for this folder, then you can add entries directly into the folder via e-mail.
|
|
WebDAV URL
|
Use the WebDAV URL to access a folder directly as a file directory. Applications such as Windows Explorer and Microsoft Office can use a WebDAV URL to directly access the files stored in a Teaming folder.
|
|
iCal URL
|
You can use this URL to synchronize Teaming task and calendar folders to your desktop calendar application.
|
|
RSS URL
|
Folders can also be accessed using an RSS or ATOM Feed Reader or directly from the file system. Copy the RSS URL below and paste it into your RSS reader to access this folder as an RSS feed.
|
Caution: This RSS URL has been created for your use only. It uses your access rights. Sending this URL to other people may give them access to entries in this folder that they may not otherwise be able to view.
|