I got the title of this article as a question through a private Facebook message. I decided that this is probably something that a lot of people are thinking about, so I figured I'd post my thoughts here. (I've also been very sparse at writing here so hopefully this will get me back on track.) My thoughts on this are not specific to code but about skill-building in general. I'll talk about code, but I'll also talk about other technical areas where I hear people say that they want to grow.
"How can I improve my coding skills?"
The short answer is simply "Write more code." That's not a very satisfying answer, though. My own immediate response to an answer like that would probably be something like "If I could do that then I wouldn't have asked the question." So, how do you get passed the obstacles? How do you grow in something where you feel you need improvement.
Surely the first step must be to understand what you think needs improving. What is the difference between what you can do and what you want to do? Do you have a goal? A role model? I don't think that you can get anywhere if you don't know where you want to go.
People act like setting goals is easy, but it's really not. Often our goals are vague or open-ended. In fact, "improve my programming skills" is both vague and open-ended! So how do we narrow that down?
What are goals?
Setting reasonable goals is one of the key secrets to achieving just about anything. You set a destination and you go there. Yet how do you tell the difference between an achievable goal and just a wish. I've repeatedly heard that the best way to set goals is to use the S.M.A.R.T. system. The letters stand for:
S - Specific... Identify a particular thing that you want to do
M - Measurable... Have some way of determining if you have accomplished your task
A - Attainable... Do something that is within your resources
R - Relevant... Make sure that it fits with what you want to achieve
T - Time-bound... Give yourself a time limit to get it done
These aren't hard and fast rules, but they are good guidelines for keeping you directed. So, how would we apply this to "improving programming skills"?
Specific - What skills do you want to improve? Do you want to learn a particular language? Do you want to work with a particular kind of application? Your overall goal may have subgoals depending on your current skill set. It's a great goal to want to program on-line video games, but if you have no coding or network experience then you have some foundations to build. It is likely that you have a pyramid of goals that have to be achieved in order to reach your final destination.
Measurable - What are you going to set as your test for each goal? For programming, it makes sense that your goals would include writing specific functions and applications which build toward your overall goal.
Attainable - What resources do you have at your disposal? If your goal is to be a master mainframe programmer but you don't have any way to access a mainframe you are going to get frustrated. Start with things that you can do. The open source world has made this easier than ever to learn technologies without having to buy expensive hardware and software. Your circumstances might allow you to gain access to other resources by simply asking, or bartering. It's true that what you need for your goal may not be easy, and you shouldn't always go for the low-hanging fruit, but if it does not seem possible for you to do something then that's not really a goal. It's a desire waiting to become a goal.
Relevant - How will this activity help you accomplish your goal? This makes more sense for sub-goals in your pyramid. Will learning PHP really help you with embedded system programming? Will developing your drawing skills really help you create a phone app? Sometimes our goals will take us into strange places that really are useful in ways that we hadn't anticipated. Other times we distract ourselves by shiny things that just seem interesting at the time. It doesn't mean that you shouldn't be multifaceted with lots of varied interests, but your curiosity can drive you off-track. If you feel you are struggling too much with your goal you may have a lot of irrelevant things that need to be set aside for a while.
Time-bound - When will I do this? I can attest that the things that I have to do with deadlines usually get done while the things "I mean to do some day" wait. Setting a time goal will help you keep on track. If you are like me, you curse the clock and the calendar a little and would rather play with ideas and technologies. However, that won't help you get it done. Set some time constraints on your goals and you'll be better off.
I think it's also important to remember that you may will fail in some of your goals as you move forward. You'll try something that is beyond your skills and have to back up a little. This is all part of the process. You cannot give up because of a failure here and there. Persistence and refactoring your path as you go is what will bring you success.
Where do I start?
As I said above, this is a great time to be in technology if you want to learn. More options are available less expensively than ever before. The Internet also provides a lot of ways to interact with others who share your interest to share resources and knowledge. Even if your interests are very specialized, odds are that you will find some group that shares them. This is important to deal with they nay-sayers who try to talk you out of your goals.
I would begin by finding something that was a model for my goal. For example, if I wanted to be a game programmer, I'd start looking at games that I liked and looking behind the scenes into the people who made them happen. You will likely find a blog or something where they have talked about what they think is important to their work. You'll also find various sites that recommend the sorts of skills that you need for a particular industry. Get a feel for what you need to learn and start putting together a picture of what you need to do. Write this stuff down! Don't just ponder it, but lay out written goals and plans for what you want to do. You'll forget pieces otherwise. This is a serious project. It's your future. Put together the same kind of material that you would to explain this to your boss, but do it for your own benefit.
Once you have an idea of what you want to achieve, then start building your subgoals. If you are doing video games you should probably learn something about C/C++. If you are focused on Mobile games then you might need to be more focused on Java. You might need to collaborate with people who have other skills, such as a graphic artist or musician. This may require to you become more social.
I would also recommend that you look at open-source projects that are relevant to what you want to learn. One of the nice things about these projects is they usually need work done and they are happy to have contributions. You don't have to build an entire application yourself, which can be hard, and you get to write code which will be reviewed by others. Even if your code isn't accepted as the final solution in the project, the experience you gain by trying is equal to what you would have doing exercises in a classroom. You also might make a real difference to the project with your contribution, which will be highly motivating. You can find repositories of open-source projects on sourceforge, github, ourproject.org and any number of other sites.
Also remember that many projects need contributions besides just coding. You might be able to contribute something where you are more skilled, such as editing documentation while you become socially connected with people who have the skills you want to learn. It's a lot easier for me to give my time to someone who is helping me do something I find difficult than someone who feels like my knowledge is theirs for the taking. Become a contributing part of a team in whatever way you can and resources will open up to you.
Not just programming
The question I addressed was improving programming skills, but I think these ideas are relevant to improving just about any technology skill... and probably non-technology skills as well. As our world has more and more chaos because there are more and more resources with more and more choices it is difficult to follow a simple proscribed path. An emerging skill is the ability to become our own teachers, to determine our own curriculum and to find our own resources. Technology is moving pretty fast and it takes a lot of effort to put together a series of classes and get it through the approval process for a University program. The ability to set your own goals and plan to achieve them will keep you agile, even when you have left the University far behind you.
I haven't written here for a while. A lot of changes have been going on behind the scenes for me. Around the time that I wrote my last entry I was brought into a new team within ISV Developer Relations at IBM. As a result, I am no longer editor for the Linux and Open Source content on developerWorks. This is bittersweet for me, as I really enjoyed helping authors to shape their information to share with people who want to learn. In my little intro on this blog I mention that I am really passionate about Linux and Open Source. This is not hyperbole. I've run a Linux desktop for more than ten years. We have no Microsoft Windows or Mac OS in my house. Personally, I don't find this a hardship. I do pretty much what I want and need on my computers and don't seem to have the struggles that others do. (I'm hearing a story by one friend who has been through ten different Microsoft tech support people over a period of days still trying to get his Windows 8 activated. Bleh!)
I've always found that it wasn't that Linux and open source couldn't do things that people needed, but that they just weren't aware of what was available or how they had become tool-bound. Perhaps a Linux environment tends to provide the most benefit to a technical person with a sense of curiosity. In any case, it was a joy to help provide a variety of information to help people try things and broaden their horizons. I got to work with some really talented authors and make a difference to hundreds of thousands of people. Wow!
My new role is going to take me more behind the scenes. I'll still be enabling people to get their messages out, but in a greater variety of ways. It's all fairly new, so I don't really have stories to share. I have no doubt that I'll get food for blogging in my new role.
I will continue to use this space to talk about technology and social issues that I think make a difference. I'll continue share things that I do with Linux and open source so that others can explore them as well. As my activities become more varied I may have even more to share!
Along those lines, I recently had to put together a booklet for a non-IBM project. I had done the writing in a word processor, but when it came time to generate the final format I decided that I really wanted to work with a publishing tool rather than a word processor. In a previous role, ages back, I did a lot of work with Adobe PageMaker. I remember renting time on Macs at Kinko's to create signs, fliers and such. Once I designed a set of sample pages for an elementary level math book using PageMaker. The pages were being shown in an editorial meeting for a major textbook publisher and it was the first time they had gotten a printed mock-up as opposed to a literally pasted page. (That sounds ancient doesn't it?)
It's certainly possible to do a booklet in a word processor, and LibreOffice works fine for that. (Have you downloaded v4 yet?) However, a desktop publishing tool is designed for a greater degree of precision in layout. If you can get your head wrapped around the different approach to thinking you really get a more finished product. The most popular open source publisher project I am aware of is Scribus, and the last time I used it was to do an 8-page, full-color mini-magazine for a convention. I know that many will consider Scribus to be lacking as compared to a PageMaker or a Quark, but the $850 price tag on Quark makes it a little out of my reach, and it's not available for Linux. Scribus is free and available for Windows, Mac OS and Linux. I essentially had to wish for it and it was installed on my system. Here's a sample from their sourcforge gallery.
Of course, working with page layout is different from other kinds of content editing. Publishing programs are much more concerned with controlling how things look than helping you to write. It's literally like having a lot of little pieces of paper that you are going to paste onto a blank page. You assign what is on each little piece of paper, a graphic, some text, etc. Some of this is handled by "frames" in a word processor, but in layout software it just seems to be a little easier somehow... at least to me... depending on the project.
Because of the "pagey" nature of this application, it was easier for me to set up something to be how I wanted it and not have things move around on me when I changed something. I had a few challenges with setting up a dynamic Table of Contents, something that is almost magical in LibreOffice. I will probably review this tutorial by Bruce Byfield before my next document.
If you want to play with layout software, Scribus isn't a bad place to start. It will acquaint you with the basic concepts of layout, primarily separating your design concepts from your content. For a big project it might still be worth using a commercial product, but for a little newsletter, booklet or other projects where you are assimilating various elements into a single document, Scribus might do the trick.
Now, when I'm designing a single page, like a sign, postcard or flier, from scratch, I will tend to use Inkscape. I've even done large, full-color banners with this and enjoy it very much.
More adventures later. I'm tinkering with Blender, the free, open 3D modeling/animation/compositing software. If you think moving from word processing to page layout is mind blowing you just wait 'til you see what happens in this paradigm! I used Blender to create the header graphic for this blog. Everything is composed of 3D elements which were lit and moved around, then "photographed". It's pretty interesting stuff.
For everyone who contributed to the Linux and open source areas on developerWorks for me, you have my sincerest gratitude. It was an honor to work with all of you. For the readers to gave feedback, sometimes in the most forceful ways, you have my gratitude as well. It's hard to function in a vacuum and your input constantly shaped my approach to what we covered and how. I look forward to my new adventure.
I haven't been writing so much over the last few weeks. There are good reasons for it, but nothing that would particularly interest my average reader. Rest to say that I am living in interesting times. There's nothing really bad going on, but interesting nonetheless.
There are a few things I'm tinkering with that I'll share later. Today I came across Simon Phipps' article, Vert.x's journey teaches invaluable governance lesson. Essentially, Vert.x is a project that provides a framework running on a Java Virtual Machine that lets you write polyglot applications. You can write your code in a number of different languages and even mix and match code. (You've heard of Spanglish?)
That is interesting unto itself and worth looking at... especially in these days where there are many different applications requirements and disciplines that all really need to mesh together.
The most interesting bit in this case is how the project reached a point where it needed an independent home, separate from any specific commercial interest which could continue to keep the project open. They chose the Eclipse Project as a home over Apache, primarily because Eclipse has a very business-friendly background. (Certainly Apache has worked with applications that have significant business interest, but in this case Eclipse edged out a little.)
I don'thave much to add to Simon's article. It's worth a read, especially by those who view open-source development as some sort of lawless software wasteland.
Soon I'll tell you some of what I've been discovering about the OpenShot video editor. I just may start using this for some things. (Though I still think Cinerella is pretty cool.)
From: Scam Mail
DO YOU NEED A LOAN, IF YES REPLY FOR MORE INFO.
At least they are honest about scamming you.
IBM Linux on POWER
I think Linux and the POWER architecture are an outstanding combination. I would really like to see a new POWER laptop to load Linux on. (Apple used to be a good source for that until they decided to go Intel.) POWER servers are competitive in price with el-cheapo models, especially when you factor in consolidating services into a single box. I came across this video which talks about Linux on POWER.
Steve Southworth is funny
Steve Southworth posted this picture with the caption: "The original camera phone."
New VoltDB article in developerWorks/opensource
How many databases do we need exactly? When are we going to have enough? If you have a shop where you are able to support a single database, say DB2, then that's great! However, it's likely that you need to have flexibility in your database, either because you can't always get what you need from the administrators, or you are dealing with customers who have varying situations, or some other unexpected situation that you can't predict. It's always good to have more tools in your toolbox. Talke a look at VoltDB and play with it. Here's what author, Simon Buckle, had to say about his article:
"Having problems scaling your relational database? Thinking about switching to a NoSQL datastore in order to scale but you need your data to be consistent at all times? These are the kind of tradeoffs that you would normally have to consider when deciding whether to go down one route or the other but it is possible to have both scalability and data consistency. Introducing VoltDB.
"VoltDB is an in-memory database written in Java with the scalability of NoSQL data stores, but without the consistency problem; it is ACID compliant. VoltDB is queried using SQL, so it will be familiar to those who have worked with relational databases before. This article will cover the basics of how to install VoltDB and how to use it, so you can integrate it into your application(s). Finally, it will also discuss VoltCache, a scalable key-value store with a memcached compatible API built using VoltDB."
The VoltDB developers tout their project as revolutionizing your application design methodology to get things out fast! Check it out, play with it and you'll be the smartest one in the room when someone brings it up!
Open Source alternatives
Ages back, I wrote a popular blog entry called "Start your learning with Open Source." It must have struck some sort of a chord because it's gotten more than 15K hits since 2009. One of the most common conversations I have with people about open-source software is about subsitutes for the current software that they are using. I reference a few sources in that blog entry, but there is also an evolving Wiki in the Real World Open Source community with a list of open source software. You'll find some handy suggestions in there. You can also add your own. It's just getting started, so we've barely scratched the surface. Take a look and contribute.
Don't forget that there is a discussion board there as well where you can bring up your questions and problems. Have another place where you do those discussions? Tell me where and I'll add them to the bookmarks or feeds in the community.
Today I got another one of those InfoWorld articles with one of those sensational titles called "Beware these open source lock-in schemes". I had to take a look. The open-source world has really come a long way. I remember when telling people a product was open-source would be a cause for immediate argument and accusation. Now there are businesses and governments who are looking for open-source as a requirement. As is always the case, people are stepping forward to take advantage of that interest in somewhat nefarious ways.
There has been a lot of information floating around about the "hidden costs of using open source", as though there were no hidden costs to using any technology. It's true. Any piece of open-source software will make demands of you. You will need to understand it. You will need to spend time making it work the way that you want. You will need to make sure that others who use it also know what they need. I have never bought a piece of technology that came with someone who prevented me complicating my life with it through either improper use or making mistakes.
The whole point of working with open-source from my perspective is leaving your options open. Right now I'm using Ubuntu, but it's not my only Linux option. I have run other distributions in the past and may run others in the future, but it's my choice. Linux is at the core of all of them and the software that is important to me runs on all of them. They keep me because they serve my needs, not because I'm too invested to move.
In the article, Simon Phipps mentions the "four freedoms" of open source, which should be protected in any choice that you make. These freedoms are fundamental and important. I'm quoting them here from the GNU philosophy page with my own comments:
The freedom to run the program, for any purpose (freedom 0).
Have you read the license agreements for many of the things that you use? Most of us don't and when we do we shrug our shoulders and click "Agree" anyway because there is work to be done. You will become amazed by some of the things hidden in license agreements about what yoiu may and may not do with the software and what they may do to you if they decide that you have violated those terms. (There is a South Park episode that parodies this, but I will not point you there. You will have to search for "south park humancentipad" and find it on your own because it is terribly rude.) I don't say that people who license software to you should not be able limit its usage with a license. It's entirely up to them. However, you should know that there is an arena of software that does not impose such limitations. It's really your choice.
The freedom to study how the program works, and change it so it does your computing as you wish (freedom 1). Access to the source code is a precondition for this.
Invention stands on the shoulders of previous inventions. It's the way of humanity. Because of the compiled nature of software it imposes a barrier to this sort of learning and development. Again, there is nothing wrong with hiding the true nature of software, but there is something wonderful about leaving it in a way that you can take it apart and learn from it.
The freedom to redistribute copies so you can help your neighbor (freedom 2).
Sharing things that help us has also been a large part of human experience. Think of all the things that are a part of our world that were shared so long ago that we can't imagine a time where people didn't do it. I'm talking about things like making beer, irrigation, use of simple machines... It is natural to want to share best practices with others. Open source software encourages this sort of sharing so that good ideas get spread around, freely.
The freedom to distribute copies of your modified versions to others (freedom 3). By doing this you can give the whole community a chance to benefit from your changes. Access to the source code is a precondition for this.
This gets to the "improvement" concept that I mentioned before. If I have a great idea for improving a commercial product, but the owners of that product don't wish to incorporate it, that's the end of it. I could go create a competing product, but I would really need to be invested in my idea for that. If I share my idea openly about how to modify the commercial product they can sue me for violating their license agreement. (See how all of this fits neatly together.) With open source, I can contribute a simple idea and share it with whomever I wish. Many projects have unofficial patches that anyone can apply to affect the function of the software. Sometimes these ideas are incorporated into the core, but they don't need to be.
So, there you have the four freedoms... the hidden benefits of open-source software. These are the reasons why open-source matters. It's true that these freedoms come with a little bit of effort to make the most use of them. They can introduce a certain level of chaos into your technical life which you will occasionally have to manage... but I'll bet that you do those kinds of things already and call it the "cost of doing business". Think about it.
Things around developerWorks
Tuesday is publishing day on developerWorks, so here are a few items that you might have missed, but shouldn't:
Ian Shields has been doing updates to his series on the Linux certification tests. His latest refurbish is "Plan Linux hard disk layout and partitions". I've worked with Ian behind the scenes at IBM for a while and his shares my perspective on being a repetitive voice in support of Linux and open source in the work place. In any meeting on new things it was always a contest to see which one of us would be the first to ask "will it work on Linux". Ian is the real deal and you can learn a lot from his articles whether you plan to take the LPI test or not.
Over in the Real World Linux community, Himanshu Arora has put up a nice blog entitled "Zsh - The new Linux/Unix shell everyone's talking about". Zsh has actually been around for a while but it's worth learning more about. One of the interesting features of a Linux/UNIX environment is that you have choices for your command-line environment. I normally use BASH, but there are times when another is helpful, especially in scripting. Since you can tell a script which environment it should run you can pick your favorite to type in but have the others whenever you wish.
I was at an event this weekend. It was a non-technical event with a group of artists. One of them had designed something which could be customized and had a DVD showing exactly how to recreate what he was doing. On the DVD he included a PhotoShop template that would automatically remix an image into the necessary pattern. Then he said something remarkable. He said that he also had templates for GIMP, the open-source graphic program and that he could make those available to anyone who preferred the free software. The next run of the DVD will include the GIMP template as well.
This was not a group of techies who were all about open-source. This was just a guy, an artistic guy who used some technology to create his work. He had an open-source solution. This is one of the first times that I have encountered this in "the wild". That's really execellent! I bought a DVD just to show my enthusiasm. I'll probably even play with his technique.
Open source and Linux are spreading beyond their traditional boundaries. I don't get so much in the way of hostility when I announce myself as a Linux user anymore. Progress!
Himashu Arora has been contributing a lot to the Real World Linux and Open Source Communities here on developerWorks. The other day he contributed this commercial by Red Hat with an interesting message about how things that once seemed impossible happen over time if the are real.
You should also take a look at his latest articles:
Before I get to the BOSSies (Best Open Source Software awards), I saw this article today: "Brand-new hardware -- now with malware pre-installed!" That's a terrific time saver! Imagine being able to participate in denial of service (DoS) attacks and SPAM profligation without all the pesky poking around in malicious web sites.
The author concludes that you should stick to the big players when buying hardware. I conclude that you should always take control of your own security. That's why I like building things from scratch and why the first thing I do when I get a system is erase the drive and load Linux. With the way things are today, manufacturing and assembly spread all over the world, you should make no assumptions about your system when you get it. Do some verifications on your own.
The BOSSies are in, and the winners are...
Every year, InfoWorld presents the BOSSies, awards for the Best Open Source Software in a variety of categories. While this is as scientific as about any awards system out there (which is to say not very), it is a great way to see what's making waves in the Open Source world. I get validation on things I already use and introductions to stuff I haven't yet discovered.
These are presented as slide shows, which is a little annoying. Here are the winners:
WordPress and Joomla are my two default content management environments for quick web sites. I want to like Drupal, but have just not had as much success with it. I'll keep tinkering, though. Typo3 looked interesting too.
I've worked with SugarCRM and liked it. Right now I don't have as much need, but if I have to do that sort of tracking again I will likely make use of it. vTiger might also be worth a look. I may also be tinkering with Magento for some things.
I'm perpetually curious about accounting systems. I'll probably look at FrontAccounting.
I'm also curious about Diaspora. There were several other tools that looked really interesting but dealt with situations outside of my world.
I've heard quite a bit about OpenStack. I don't know that I'll get to do much with it, but it intrigues me. CloudStack as well. We've had a little article coverage on Cloud Foundry, so I will probably look at it too. Lots of options!
Puppet seems like my style. I may actually have a project where it could be useful. I'm curious about Juju and Chef as well. I'm intrigued about deployment automation since I oversaw the Y2K rollout at the Texas Lottery Commission.
OpenRemote is intriguing and may offer some solutions to problems unique to my household.
Fun gaming options in 0 A.D., Warzone 2100 and Stella . Naev also reminds me of a game I used to play on my Commodore 64. I can't remember its name, but I enjoyed it quite a bit. (I'm sure someone will remind me. It's just on the edge of my memory.
I loveCalibre using it with my Kindle, and my Sony Book Reader before that. Outstanding application. Be warned, it gets an update constantly. I wish they would set it up to auto-update and save me the trouble.
An Arduino kit is sitting, waiting for my attention. I really want to play with it. Upcoming articles about that too.
I'll probably check out Lightworks as well when the Linux version is available.
Today I was pointed to the article "How would you fix the Linux desktop?" through slashdot. (Yes, another one of those articles.) I am quite comfortable using a Linux desktop and have been for nearly a decade, so it's not very mysterious to me. My family also uses Linux as a desktop with no real complaints. However, this seems to remain a controversy. It reminds me a little about my daughter talking about her school lunch.
My daughter just turned ten. The other day she was talking about all of the terrible things they are doing at the school cafeteria. They've removed some of the dishes she liked and put, in her opinion, poor alternatives in their place. I should say that my daughter is not a pizza and hot dogs sort of diner. She likes sushi and different kinds of vegetables when they are well prepared. Her description of what was going on did sound a little poor, but it's an institution's approach to being told to provide more "healthy choices" while also adhering to a giant list of restrictions, primarily budgetary. I would probably eat it, but not look forward to it. I suggested that my daughter could always take her lunch and we could keep them interesting. I don't think she even heard me.
We have a lot of choices that we would rather not act on. "I hate my job," says someone... but doesn't really want to leave and find another one. "I hate the environment in my city," says another... but won't move someplace where they say they'd be happier. We complain, but we don't act, because we are not so unsatisfied that we think it's worth the effort to make a change. This truth means that most complaints fall on deaf ears because providers know that we likely won't do anything. If Walmart knew that "I'm never shopping here again" didn't have a silent "unless I find that I'm desparate for something and everyplace else is closed, or I happen to be somewhere and Walmart is the only place I recognize, or I know I need something cheap" then they would probably be a lot more attentive.
So, in desktop land, though people might be disapointed with their Windows or MacOS experience, they likely won't really try to make a move. Once the disappointment is voiced it has been served and one can simply get on with things.
Some say that the problem is not enough applications and that there are barriers to writing applications that work across Linux desktops. I don't know how true that is. I regularly play with different desktops on my Linux installation (you can change it every time you log in if desired). All of the programs I run work fine across the desktops... though the experience changes slightly as the desktop features rearrange. It seems that it is largely a matter of the application letting go of the things that the desktop does rather than trying to emulate them. Maybe I'm missing something.
There are really only about a dozen things that most people do with a computer. Applications exist for those. Developers of popular software could provide a LInux version as easily as they provide a version for Windows and Mac OS. Arguably, if they started to use some of the existing open development techniques that are used for Linux applications they could more easily write things that run on all of the operating systems with single code base. There are several examples of this in existing open-source software.
People don't use the Linux desktop because they just don't care for the most part. They use whatever they're given. If IT turned around and gave them a Linux desktop and managent said it was the new policy people would use it. Oh, they would complain, just like people do about the store they go back to again and again, but they wouldn't quit their job over it. As long as someone has to make an effort to be different, it will only be those who already do that sort of thing in their lives who take on Linux, and discover the benefits it gives them. Everyone who prefers to "go with the flow" can discover what flows downhill.
I recently had a call with some people who are interested in
contributing to the Real World Open Source and Real World Linux communities here one
developerWorks! Yay! I would like to see a lot more input by people in
these places. As a part of that conversation they requested me to
outline my recommendations for people new to writing in this
environment. I decided that this might be of interest to the general
public, so I'm posting here rather than privately through email.
Writing in developerWorks is not like having your own Wordpress or
other blog. You can do a good deal of customization to make it fit your
own preferences, but you will need to fit into the overall
developerWorks framework. This framework may change around you, so the
general rule of thumb is "Keep It Super Simple". Your content is what
is most important here, not any bells and whistles that you might add,
so write things that do well with plain, clean HTML. I prefer to do my
writing in an HTML editor, actually. I tend to use Kompozer, an
open-source editor. Unfortunately, development on this project seems to
have stalled out, but it's still my favorite editor. It produces clean
HTML with no muss or fuss and allows me to easily put something
together which I can just paste into place. You can use any editor that
you choose which can save HTML. However, bear these things in mind:
Don't use a lot of styles and parameters on the HTML. Sometimes
you need to, but keep it to a minimum. This will make your article
behave better when it's published.
Be cautious about what comes out of a word processor. When I
write something in LibreOffice and them paste it into the blog there is
a lot of hidden style information that ends up in the HTML. This is
ugly and bulky and will do weird things to your entries. Be prepared to
clean up anything that you do.
Including images is good, but you will be working with a simpler
subset of formatting options. You will also need to upload your image
to the developerWorks server or reference the link externally.
Posting audio and video is good, but remember that this can
sometimes be unpredictable. For example, when posting a YouTube video,
you must use the old-school <object>
code rather than a simpler <iframe>.
Someday this may change, but for now it is necessary. Some embeds
simply will not work.
The included HTML editor is decent, but a little thin for me. I
have two browser plugins that I use to help me write entries that I
have not pre-written in Kompozer.
Write Area - This plugin will give you a
fuller editor that you can invoke in any text area with a right-click.
It provides more formatting options for links and images. Unfortunately
it does not include a spell checker, though. so be sure to double-check
your work. I use this a lot! (I'm using it now). It's been a real help
to get around any site that has a limited window in which to write.
It's free for Firefox. I'm sure that people with other browser
preference will find similar add-ons. I'm just telling you what I use.
Scribefire - This plugin provides more than
just an editor. It is a blog management system, allowing you to work
with various blogs on different sites. It will give me a list of the
blogs that I use and let me edit or create a new entry for any of them.
This can be handy, but it sometimes does some strange things with more
advanced formatting. (Remember, I said to keep it simple?) Another
feature is that it will allow me to simultaneously publish the same
thing on multiple blogs at once. I did run into one issue, which I
mentioned in a previous post. Do not use the '#' symbol in your article
titles with Scribefire. This caused it to get lost when trying to
agregate my existing entries. That was very frustrating for quite a
while until I tracked down the issue.
There are other blogging tools which are compatible with
developerWorks, but these are the ones that I generally use.
Any pictures that you want to use need to either live on the system
or be linked with the URL. For some content, especially copywrited
content, I just link to it. That saves some of the usage hassles and
acts as an automatic credit to the owner. For example, Dilbert cartoons
are a great thing to include from time to time and they have a simple
method for linking to their content.
If you're going to do things like this, you should expect to have
to tweak the HTML from time to time. Sometimes developerWorks seems to
alter things that are not entered through the raw HTML view. (That's
the <h> button in your toolbar if you are using the default blog
editor.) HTML is nothing to be afraid of, and many of you are technical
people anyway, so you should feel comfortable with it.
For some pictures, though, it's best to upload them. If you are
using the default editor, uploading is automatic. You click the icon to
insert a picture and it gives you a chance to upload your picture. I
will often use this step just to get the picture up and then go into
Write Area to manipulate it and make it look nice with the article.
Add image tool.
You can also upload an image file directly. Select the Settings
link, next to New Entry. On the Create & Edit tab you'll
find File Uploads. You can manage everything here. Note that
this interface acts much like old-school FTP, so you can't overwrite
If you need to change something you need to delete it and then
upload the new one. That provides a window where the file may not
exist, but it's pretty quick.
Copy the link for an existing file and you can use a conventional <img>
tag to include it.
Bookmarking major links
I quickly got annoyed by some of the steps to getting to areas like
file management. They are easy to find, but require a number of
clicks to get there. This was easily remedied with a few book
marks. I have bookmarks set up for my main blog and the entries
page. These reside in a folder on my bookmark toolbar, so it's
pretty easy to jump right to the spot I want. If I did more file
management I'd probably set up a bookmark for it as well, but it's just
as easy to go to the entries page and then click over to files.
(Two quick clicks versus three slow ones.) It seems like such a
silly thing, but it really helped me a lot.
Contributing to the Real World communities
That should get you started with basic blogging. If there are
questions that I have raised rather than answered I'll be happy to
address them. You can email
me or comment here. I may make this a living document and update it
rather than writing additional chapters. I've set up the Real World Open Source and Real World Linux communities so that any member
can draft an article. Simply become a member and start one. When you
submit it, I'll be notified and can release it. Feel free to use this
to post a great topical discovery or idea without taking on the burden
of maintaining your own blog. If you decide to start your own, let me
know and I'll follow it.
Computer security fascinates me. I freely admit that I don't have the chops that many do about cracking into or securing syststems, but I do alright for myself... on securing systems, that is. I'm certainly not claiming in any way that I spend time engaged in any activity that could be construed as subversive or illegal... Dang! Awkward...
Of course, this is the situation one gets into when taking an interest in the "dark arts" of computing. People assume that you are claiming to be some sort of criminal mastermind or something when actually you are simply fascinated by the nature of how bad guys do things. Just as someone who likes to watch true crime documentaries on TV is not necessarily using it to plan their weekend, many people interested in "Black Hat" hacking are not looking to lead the next charge of Anonymous. So, it is likely that if you had an interest in attending the recent Black Hat 2012 conference in Las Vegas that it was hard to make a strong connection between that and what you are paid to do. That's OK. Though the event is over, there is a reasonable archive of confernce material on the web site, including papers, presentations and even some source code! (Use at your own risk.) There's not much in the way of video from the site right now, but a YouTube search brings up material-- though most of it is from Black Hat 2012 in Europe. I'm guessing, though, that techniques and vulnerabilities don't change much by crossing the ocean, so you can probably get a lot from them.
I'll keep my eyes open and try to report additional material as I find it.
IP Law Talk
The other day I was reading about a patent license agreement between a major software company and a minor company for an undisclosed amount regarding undisclosed patents. The story was non-news, unless you're into corporate celebrity, but the discussion had some interesting thoughts expressed. At least they tried to be interesting. They ultimately turned into the sort of juvenile brawl that such discussions do because everyone is out to win. The part of the discussion that really caught my attention was why a company might not want to disclose their patents. Since Linux and Open Source software frequently comes under fire for allegedly violating patents this is interesting to me. The conversation is often along these lines:
Patent holding company: The villainous developers of these open-source projects are stealing our IP and violating our patents and they must pay.
open source developers: Uhhh... we don't think we are.
Patent holding company: Oh, yes you are. In fact we have been striking numerous deals with people who agree that this is a violation.
open source developers: Wow, you really do seem to be making deals with people. Maybe there is something to this. What patents are we violating so that we can fix that?
Crickets: (chirp) (chirp) (chirp)
OK... that wasn't completely fair and read more like a Dilbert cartoon, but I hope you see the fun side of it. It seems to me that if my goal was to prevent people from infringing on my intellectual property that I would want to proclaim loudly and strongly what was being stolen from me so they could and would cease and desist. That doesn't seem to be the way that it works out for some reason. There are non-disclosure agreements (NDAs), behind-the scenes business, announcements that are simultaneously widespread and secretive. It can be very confusing.
Well, it turns out that a new community has formed on trying to understand and relate to Intellectual Property Law. It's your chance to ask your questions and voice your own experiences with people who deal with this every day. It's called IP Law Talk, and should be a fascinating place. I wonder if they know about this weird patent slide show.
Has the Command Line outstayed its welcome?
This is the question asked by a Linux Insider story. I'm going to apologize for being a little prejudiced here, but I just don't understand someone who is technical who wants to do everything with a mouse. Even when I'm supporting Windows I will jump into the command line to get information because I can get information faster by typing "ipconfig /all" than I can browsing around with the mouse. I use icon-based launchers and I find them very handy. I recently talked about how I use them to keep my Firefox identities clear. However, there are some things that I can just flat do more efficiently using the command line. I can then combine those things into a script which I can place under an icon if I so desire. Macro recordings of mouse movements just don't seem to have the same capabilities.
I know that many people get nervous about the command line. They don't type well. They don't have the commands memorized. It can be frustrating until you get used to it. But there is a heavy price for a graphical interface in system resources which could and should be used for other things if the interface is only rarely required.
I hope that you aren't afraid of the command line. If you'd like to explore it in Linux there's a nice tutorial as part of our Learn Linux 101 series. Windows folks can look at this site. You don't have to use it all the time (though I admit that I do). It's nice to have it around, though for when the other tools aren't working. As an example, when I've had some program take over my graphical interface, it's nice to be able to switch to a command session to see what's happening and kill the offending processes. I've been able to use ssh from my phone to connect to my laptop when the keyboard wasn't responding and fix things without having to reboot. Is that geeky? You bet! But that skill comes in handy when you're dealing with bigger problems.
There has been some controversy about comments by Valve co-founder, Gabe Newell, calling Windows 8 a "catastrophe" and saying that Linux was part of Valve's future strategy. (Don't take my word for it. See the story by the BBC.) I admit that I haven't had as much time for games for a while, and when I do I am more likely to want to play a "human contact" game with dice and faces rather than having more computer time. However, it's no secret that Linux has been woefully thin in the gaming area. This is ironic, because I think that the tools and libraries available to Linux could make it an outstanding platform for media and gaming. It's just not where game creators focus.
Perhaps something like the Steam platform working more with Linux will make a difference. Of course, this is a future play. Steam has announced enthusiasm but not a release for Linux. It could get pretty interesting, though. While browsing through the gaming world I found that Steam is looking to Linux. Another site, Good Old Games, does not support Linux now, but might respond to interest, especially if it works well for Steam.
I did find a site, Desura, which already supports Linux. I downloaded a few of their free games to test and just might go for some of the paid titles as well. As entertainment becomes more network and browser based the native platform should matter less and less. I'm intersted to see what has happened. If anyone is already using Desura and knows games I should check out, let me know!
Today I was looking over an interesting article called "Great open source map tools for Web developers". Look, I'm taking off my IBM hat and setting it way over there. Now it's just you and me with no major corporations to bother us or be represented in any way.
When you work in a company that does a lot of technology, with a lot of research, it's pretty difficult to deal with anything that isn't being explored somewhere. Some of these things become major projects and money centers, others are tinkered with and then set aside for the next interesting thing. So there can be a sort of love/hate relationship with companies like Google, who also do a lot of tinkering with various technology areas. One day a tool is OK to explore, the next day "Das ist verboten!" This can really be unfortunate when you have something that you're trying to do which has to either be thrown away or completely rethought. Yet when you're dealing with something like mapping, aren't you forced to go to someplace like Bing and Google who can afford to put satellites in the air and do massive data collection? Well... not necessarily.
As it turns out, governments and other public entities do massive data collection as well, and their information belongs to the public. It's true that some of it may not be as up-to-date or as rich as a private entity can do, but it is freely available. And it turns out that there are a number of open source projects that are tapping these public data sources, and finding interesting ways to tap into them. If I was a betting man, I would say that your odds of being shut off from an open-source resource are better than that of "the competition". It's also remarkably easy to find things like weather data from the National Oceanic and Atmospheric Administration and community-supported street data (Say! I can see my office from here!). Here is a source for open data catalogs around the world, which pointed me to this specific list for Texas, among others.
Obviously, along with the data, there are APIs available as well. All of this can be mashed up in interesting ways. Here's an example where Open Street Map data was used to create an interactive map of countries. As you mouse over the countries you get information about the name of the country. Clicking the country takes you to data for that area. Obviously, one needs to consider the source of information, and there are situations where you need the accountability of a paid resource, but spend some time exploring these open data pits to mine. You find a good fit for your needs, and supporting these efforts helps ensure that they continue.
If you are keeping score, we have a coupld of new items in the Open Source and Linux sites today.
In Linux, "Accelerate to Green IT - A practical guide to application migration and re-hosting" has been a significant effort by a team inside of IBM to share their observations about server consolidation based on their real experience. This is good stuff, and the kind of information that only comes from experience. Their approach is to help you identify the "low-hanging fruit" for server consolidation and to have realistic expectations for where the complexity may lie. I think that server consolidation is a fascinating area. In some ways it makes me wish I was still involved in levels of system administration where I could give it a shot. This article will likely not answer all of your questions about what to expect, but it will get you thinking, and thinking is one of the keys to success.
In Open Source is a fun article, "Building Ruby extensions in C++ using Rice: Add new programming extensions in Ruby", an examination on how to use RICE (Ruby Interface for C++ Extensions) to combine the goodness of C++ with that of Ruby. It provides more ways to use the right tool for the job and allows you to tap into the power of C without having to do everything there. I like this sort of mashed-up approach to programming. Yes, it can add some complexity, but it's worthwhile if it keeps you in control of your performance or other critical elements. It's more tools for your toolbox.
Today I read a piece from my email:
The Internet should not be anonymous. I know that in some ways these pieces are meant to create conversation and controversy, which makes me an excellent lemming. The premise that Mr. Grimes sets forth is that in these days of Internet commerce and widespread criminals, everything from identity thefts to terrorists, that we need to let go of our desire to be anonymous on the Internet. We should have a central identity, held by the government, that all parties will use to verify you and, if necessary, track what you are doing.
Let me pause for a shuddering scream and maybe throw up a little...
There, I'm a bit better now.
I've touched on this concept before, but it's one of those things that I feel I should address again and again, because I feel that widespread understanding of what is possible will help keep us from being driven into something that has too many unintended consequences.
We already have some good technologies that could provide a centrally verifiable identity which would be pretty hard to duplicate and crack. If you've ever worked with the Gnu Privacy Guard, you know that freely available technology exists which supports strong encryption and document signing with public key technologies. This is good stuff. It's easy to use and easy to centralize. You can have as many keys as you want, each assigned to different entities. Keys are easy to create and easy to revoke. You could use a biometric or something like that as the password so you don't have to worry about complex passwords. The biometric would control access to the key, but not act as the key itself. If you are more paranoid you can use more paranoid methods for controlling access to your key.
It's true, you might want to use a different repository for your banking than you would for your online role-playing games. But it would be no trouble at all to include the repository location as part of the key registration. If you prefer to keep all of your keys in one place, great. If you want to spread it out a little because of price or privacy concerns, then that's up to you.
One advantage to this approach-- aiming for a universal protocol rather than a universal provider-- is that you can fire your provider. Have you ever tried to fire your government? (The people of Egypt are working with this concept right now.) If the government becomes the central repository for who you are and how you can do business you are in some serious trouble if they ever have an "oops" with your account. Think of any mistake the government has made for you. How easy was it to get that resolved? How long did it take? I've heard terrible stories about visa problems and other mistakes that took years to be resolved... even after a judge declared that the government messed up the file and needed to fix the problem. I would much rather have a situation where I can replace my service provider for any reason that I choose.
The government will still get to play. There will be a set of regulations for who may act as an official identity repository for some functions, and anyone who wanted to fulfill that function would have to follow the rules. However, that wouldn't preclude other entities for having mini-repositories for things like online gaming or social networking.
But, Chris, I hear you say. This doesn't sound any different from what we have now. All these different passwords and keys and such, it doesn't fix anything. I think it will fix much. First, rather than many different schemes to authenticate, there will be a standard, with a market of service providers. Simply settling on a single protocol and having good tools and services to make that work would make a difference... the same one that settling on standards like HTML did for Internet content.
I'm sure there are some that will disagree with me here... but this makes a lot of sense to me. Let's move for openness and choice.
NOTE: As of February 2013 I am no longer the editor for Linux and Open Source on developerWorks. Don't worry! I didn't get fired or anything. I got rolled into a new team which draws upon all the skills I applied on developerWorks as well as exercising some of my other capabilities. It's an exciting challenge. As a result, this wish list is not necessarily the most current guide of what you should be writing. I'm going to leave it up, though, as a snapshot in time. I'll keep blogging and sharing. It actually may be easier to do now in my new role!
People ask me what kind of articles I'm looking for in the Open Source Zone on developerWorks. This is meant to be a permanent home for my thoughts on what I'm seeking in the way of articles with a little better explanation than I can offer on the basic developerWorks wish list
. Rather than just a bullet list, I'm going to try to get you inside my head so that you're working toward the idea, with your own new information and discoveries, rather than just trying to write to spec. Consider this your guide for what I'm seeking. I'll update here when I have new information. I recommend that you subscribe to the feed for this article so that you keep up to date. When you know you're ready to write, review the guidelines in the developerWorks Author Resources and then submit your content.
Right now in Open Source, I'm looking specifically for articles that cover tools and techniques that work across platforms. In particular, I'm trying to identify things that compliment the IBM product set and leave room for integration. In some cases they will simply be useful tools that people could be using. In other cases there will be specific ways to tie into the project's functionality using APIs and pull its functionality into an application.
For example, Blender (http://blender.org) is an open source 3D animation and compositing application that can do Hollywood quality rendering. I'm sure that there are some pretty creative ways to use their APIs to do things that would make for some pretty impressive functionality. There are many more projects that lend themselves to this.
Along with tools, I'm interested in development techniques for PHP and other open paradigms (Did I just use that word?). That would include Android development, C-code and anything else that is being used, or could be used to generate open-source software. I'm not really looking for opinion pieces ("Why this software/tool/technique is the best!"). There's plenty of that out there. I'm looking for things that will help a developer/IT professional wrap their head around a technology and begin to use it.
Security is becoming a hot topic. Cracking tools are on the rise and we hear about more and more break-ins each day. (Makes you wonder about the ones we don't hear!) Also, people are begining to work with data across environments in ways that they never did before. They want to work on their laptops, tablets and phones whenever they want and whereever they want. This provides a number of security challenges which have to be addressed. The open-source world has been interested in security for some time and there are some great tools and techniques available, but many people have never heard of them. Relevant topics would include encryption, authentication, malware and virus detection, tampering detection, automated defences, cracking forensics, firewalling and other ways of hardening systems and software across platforms.
Another aspect of the increasingly mobile and interconnected lifestyle is more focus on virtualization. Some of us have used these techniques for a while and are used to the idea of dealing with resources that we can't put our hands on. For many, this is a mind-blowing concept, but one that is imperitive if they are going to be successful in a world that includes mobile and cloud computing. KVM has come a long way. (Remember when KVM was about keyboards and monitors?) There are other tools for emulating hardware and virtualizing storage and other environments that people need to see. Relevant topics would include tools to virtualize environments, best development practices for working with virtualized environments, security and monitoring techniques, automation, resource management and more.
Another side effect of our growing web of data is the need to store it all. People need to store more information and access it quickly. It needs to be secured, backed up and authenticated. People need to be able to access it from any device that they choose in any environment that they choose. This is another area where Open source has been working for a while and there are a number of tools and techniques available. Relevant topics would include storage formats, tools for securing, authenticating and sharing data, backup methods, techniques for compressing and transmitting/receiving data.
Social business is becoming a big deal and there are increasing demands on developers to build social elements into applications. OpenSocial has been working for some time on tools and techniques for all of social media with an eye to compatibility across applications and platforms. The future of social business would be brighter if applications pursued an open path rather than a bunch of competing proprietary methods. Relevant topics would be an introduction to what developers need to know about social applications, the tools and APIs that are available and best practices for developing compatible applications.
When you go to Amazon, Netflix, Facebook, Google+ and any number of online stores and communities, there are engines that suggest items/people/information that you might like based on what you read, buy and rate. There are several players in this arena, including easyrec and Apache Mohout. As this sort of personalization is becoming more common, developers are going to be looking for solutions that they can experiment with and implement. Relevant articles would explain the key elements of such engines and help developers code their first examples.
Open source lifestyle
Another aspect that I want to cover is the lifestyle of using open source. There are fundamental ideas that one needs to grasp to be successful in the open source world. From the R & D side, you need to be willing to do your own installations, maybe compile some code and do some digging through forums and such to be successful. Knowledge of resources like Sourceforge (http://sourceforge.net) and basic tools like the GCC compiler (http://gcc.gnu.org/) are probably necessary. You should also have knowledge about the best ways to find what you're looking for. Skill with the query language on the search engine of your choice is probably helpful.
Once you decide to bring a piece of software into "production," you'll need a different classification of information to help the less adventuresome. Quality tutorials, books and even professional training may be necessary. You might want to connect with a professional company who provides support on open-source products. Knowing your way around this world will help you be successful.
Information which helps users make good decisions about open source and integrating projects into a commercial environment are helpful. I would like to tell the story of how particular open-source technologies successfully fit into commercial environments and make a real difference. Stories built on personal experience are a plus.
Many people freeze when moving to Open Source because they just don't know how to get from here to there. They've always done it a certain way, and the change frightens them. Showing clear migration steps between the old commercial way and the new open source way will be very helpful to get people to try it. Again, if you have saved a ton of money and time by moving to an open source tool or technique, this is a way to share that success and lead others.
Developing for OS compatibility
When your application can live in its own world you don't really need to consider standards or popular modalities. However, if you want to integrate with the open source world, those things matter. I've seen many commercial Linux projects falter in the beginning because they chose funky proprietary ways of installing their products and working with the environment rather than doing it the "Linux way." Helping developers understand the best practices for working with an open source environment will help them to save some pain and have more success in the beginning.
The bullet list
If none of that has fired up your imagination, and you are looking for a list of topics, here are some things I'm looking for. Bear in mind that this is not comprehensive and will probably change constantly.:
developing Eclipse plug-ins
using Eclipse with C++/Java/XML/PHP
Eclipse Mylyn - task and application lifecycle management (ALM) framework for Eclipse
I just wanted to take some time to say thank you to all the people in the open-source world who make it possible for me to do so much with my little computer. Maintaining a project is a largely thankless task, with the greatest reward being to have what you want in the way that you want it. I respect your skill and appreciate your willingness to give it as a gift to everyone.
Here are projects that I use nearly daily that I would like to highlight. If you have worked on any of these projects, you have my deepest gratitude:
Linux - This changed everything and let me escape the world that dictated how my computing must be.
libreoffice - It's had many names, but the newest direction of this open office suite continues to be a great resource. I use it constantly and get a lot of work done.
Firefox - It's not the only browser that I use, but I still enjoy Firefox a great deal. The plugability is just so extensible. I even have multiple profiles so I can flavor the configuration to the task.
Pidgin - This little utility lets me keep up with multiple streams of communication in a single interface. It's so convenient!
Thunderbird - Simply a wonderful email application that gets better and better as it goes.
Audacity - An amazing audio editing application that let's me do some very interesting things with music and other sound editing. I get very professional results with this and I couldn't be more grateful.
Cinelerra - Some day there may be a great multi-platform, nonlinear, video editing suite. It may be that when it arrives I will use it. In the mean time, I've been very impressed with what Cinelerra can do. It's Linux-only right now (without jumping through some major hoops), but, say! I run Linux, so that's not a problem!
GIMP - I once used GIMP to repair a photo where a prominent member of a local group had his fly opened. I have been consistently impressed with what can be done with this amazing piece of software.
Inkscape - When I do posters, signs and even business cards I use Inkscape. It's ability to scale everything and fit text exactly the way that I want it has made it so useful.
Scribus - I haven't used Scribus as much, but when the project demands it, it sure makes a difference.
Image Magick - A utility that lets me batch process graphics with ease. Wonderful!
Android - I am writing to you now through the magic of Android, as it lets my laptop borrow its Internet connection.
Joomla - A wonderful, PHP-based content manager that helps me maintain some web sites that I could otherwise never have the time.
Wordpress - Likewise, a great way to help me get information up and out on the Internet in my free time.
These are by no means all of the only things that I use, but I will use almost all of these today. Thanks to all of you who make it possible, whether you are a developer, a tester or an evangelist.
I've been getting news here and there about the parting thoughts of Microsoft's software chief, Ray Ozzie. He wrote a blog entry which appears to see the future as not wrapped up on a PC. I'm still chewing on this one.
My general view of Open Source is that it should take on the things that are so fundamental that they should belong to everyone, or things that are ignored because they can't be sufficiently monetized. (Obviously Open Source moves beyond that scope, and shall as long as there are technical enthusiasts who want to make things better for the sake of having them be better.) As devices like smart phones, and things we haven't even imagined yet, become a part of our daily lives, the landscape changes. Trying to hold onto the old paradigms (did I just use that word?) becomes unreasonable. Things keep moving forward.
Perhaps we really are entering a stage of computing where the hardware and the specific applications become less important than the integration and accessibility. I'd like to believe that Open Source can play a huge role in this by providing a sort of neutral space where everyone can play without having to "lose." Companies could roll their expertise and service into popular and effective projects. This doesn't mean that people won't pay for anything anymore. Many of us choose to pay for service or packaging or expertise in areas where we could probably do it ourselves. Technology will be no different.
I have no grand insights here. Like I said, I'm still chewing on this. It's very interesting, though. Very interesting.