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.
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 moved to a smart phone within the last year. In the past I hadn't
really needed one. When I went somewhere I typically had my laptop
with me, so I usually hid behind that. However, as my role became more
and more driven by general email and Internet access rather than
specific proprietary programs I realized that I wanted to have more
access and functionality without lugging the computer around all the
time. If you know me at all, you know I'm a Linux nut, so I naturally
gravitated toward an Android phone. I love it. The openness suits me
and I get to use my curiosity and ability to tinker to my advantage.
Apparently I'm not the only one who sees advantages to Android. If
Gartner is correct, Android will overtake the other options and become
the dominant mobile operating system. I think that the openness is the
Mild tangient: I'm not a big cook, but I enjoy cooking when I can.
The only cooking show that has managed to grab me is Good Eats
Brown. Why? Because where most cooking shows are about watching
someone else cook, Good Eats is about me cooking. Each episode
explores a cooking concept and explains to me how and why it works. He
gets into the science of cooking so I know why doing certain things to
food makes it taste better. I leave with tools and techniques to help
me cook rather than just a pretty picture and a link to recipes that I
will never look up. One of Alton's key concepts is that nothing in
your kitchen should only do one thing. Therefore he prefers something
conventional, like a steel mixing bowl, to a gadget, like an electric
popcorn popper. The more flexible the tool, the better it is in the
Back now: Open environments like Linux and Android have that same
flexibility that I like. They can be set up to do one thing very well,
but they still have the functionality to do other things as well. They
foster a multi-functional approach rather than a "gadget approach."
Ultimately as more and more of our devices talk to each other, having
open standards and flexibility is going to be much better than
"duct-taping" everything together. I'm really anxious to see where all
of this goes. If Android dominates the phone market it will also
dominate the market for other devices like DVRs, smart TVs, smart
appliences and vehicles (not to be confused with the Smart Car which is
a strange, freakish thing). This could all get very interesting.
Other ways to learn
I got a tweet today from opensourceway. It was a presentation from the TED conference that
explored the idea of children learning without teachers. Basically a
gentleman made a computer available to kids on the street in India,
with no instructions and no supervision to see what they would do. The
results are amazing and call questions on many of my presuppositions
about learning. If I'ved done this correctly you can just view it
below. If not you can find it at the source.
If you are a Firefox user, you may have heard about the vulnerability
discovered which could allow malicious web sites to steal passwords that
you have stored in your password safe. You didn't know that? It could
suck. I don't have the details, but you can get a hint in the
description of the session "Breaking Browsers: Hacking Auto-Complete" at
Blackhat conference. (That's were security-conscious people get
together and talk about bad-guy stuff.)
The upshot is that after this conference, the precise method for doing
this will be out in the open, and there may be a lot of enterprising
hooligans who immediately make use of it. Get your passwords out of
Firefox now! I found a handy tool that
will look pull the passwords from your local repository and help you
dump it into another format before you clear them out of Firefox. I
know that sounds alarming, but you save it to your local system and run
it from there. (It will warn you if you try to run it from the
Internet.) It will show you a list of your passwords and let you copy
them into another file. I dumped them into a spreadsheet. (ODS format, of course!)
So... what to do with this file. I don't feel much better having a
spreadsheet laying around on my system with passwords to everything.
True, it's much less likely that someone will poke around on my file
system than that people will mess with my browser... but it's still not
a good idea. It's time to crank up the encrypted file space!
I've talked from time to time about working with encrypted file
systems, but not much beyond that. But now it's pretty urgent and I
want to make sure that I have an easy-to-use space available right now
for this and other sensitive information for which I need better
habits. I know that encryption sounds hard, but it's really not that
bad. There's a lovely open-source, multi-platform tool called TrueCrypt that makes this all pretty easy to handle. Don't think encryption will make that much of a difference? Take a peek at this article
on how long it takes to break passwords of varying complexity. Good
encryption with a good password will likely surpass the attention span or statute of limitations for most situations.
How easy was this to do? I installed TrueCrypt, which took a few
minutes of downloading and script-running. I fired up the program
which, incidentally, had a nice GUI. I created a 1GB volume which
resides as a file on my file system. It's formatted internally just
like a file system and it mounts that way too. I could easily have put
it on a flash drive if I wanted to. TrueCrypt also supports encrypting
partitions. Now I have a moderately safe repository that I can save my
spreadsheet into. I can mount it when I need to and not have to do
anything too weird with it. I can also keep multiple things in it,
consolidating my secured items. In Linux, and Mac OSX as well, I
think, it's easy to make a relative pointer to a file. That means that
I can take some key configuration and data files and store them in my
encrypted area, but allow the applications to deal with them as though
they were standard. I can explain that in more detail if someone is
interested. There is probably a way to do that in Windows by now, but I just don't know what it is. Maybe someone can fill us in.
So, I'm sorry to bear the news. I rather like the convenience of
the password safe... but it's just not safe right now. And don't feel
that putting Firefox's password file in your encrypted volume will
help. The problem is that Firefox will give up your password if it's
asked in the right way. We need to make sure that Firefox doesn't know
the password. Ultimately I'm sure this will be fixed. Then it may be
safe to go back. There are also other password safe tools that might
be helpful... but for now, I think I'm going to go with the
old-fashioned copy and paste approach with the spread sheet.
I hope that all of you will take this stuff seriously and give TrueCrypt a try.
We really do need to start taking personal responsibility for securing
our communications. Government is too slow and to clumsy to do it for
us (not to mention that they don't want anything to be secured from them).
Manufacturers have too many points of view to accomodate to make it
automatic. It has to be the right solution for you. Start with this
and before you know it I bet you'll be asking me about encrypting your
I've used OpenOffice.org since it was known as Star Office. (That's
been a while.) When it was absorbed into the Sun umbrella, I wasn't
sure what to expect, but Sun seemed to be a pretty good steward of the
project, even creating a plugin to allow Microsoft Office to read and
write Open Document Format (ODF) files. Then Oracle bought Sun. Again
I wasn't sure what to expect. However, all became clear pretty quickly
when Oracle began charging
for the free plugin for MS Office. Things have continued to change
since April and I'm honestly not sure about the current status of the
plugin. It's obvious, however, that Oracle is going to handle these
Now what do I do? Then, I found out about The Document
Foundation. (This is not to be confused with the Open
Document Foundation.) The Document Foundation is to OpenOffice.org
what the Mozilla Foundation was to Netscape. It is a shift to a
vendor-neutral body that is picking up the code of OpenOffice.org and
moving it forward without the entanglements. They are hoping that
Oracle will release the name OpenOffice.org for consistency, but in the
mean time they are going with the name Libre Office. I've installed it
and it works just fine. So far it's dealt with all of my existing
documents and done everything that I expected. I'm having trouble with
one gadget that I use to translate developerWorks submissions from a
Word Processing template into our XML format, but that will get figured
out over time.
What excites me about this is that it's a demonstration of what open
projects are all about. I think it's great when companies take
advantage of Open Source and contribute to projects. But open means
open for everyone. That freedom means that projects can't be hidden or
held back as long as there are people who are interested in using them
and doing the work to keep them going. My hat is off to people like
Richard Stallman and Linus Torvalds who helped drive the vision that
you could make things and set them free. It really is working.
If you're nervous about that Oracle stamp on OpenOffice.org, go grab
and check it out. It's in a transitional stage right now, so the logo
is a little chunky for the moment, but all of this will quickly clean
up. You might even consider being a contributor.
Poor, Fragmented Android - Not!
For a while, I've watched with amusement about this phrase
"fragmented" being applied to Android. Since I've been a Linux user
for years, I'm already accustomed to the idea of many contributors and
many options available. I thought that the response by Andy Rubin,
creator of Android, was beautiful and elegant:
If you type in the code within the quotes, it will download and
build the android kernel on your system. (There are a few
prerequisites, but if you already compile code you probably have them
installed, especially on Linux.) I tried it and it worked. I'm
running a 32-bit version of Linux right now because I was tired of
wrestling with some applications, so the compile stopped at one point
complaining about my environment, but it was clearly going through.
Again, the point is clear. Anyone can get hold of this. Anyone can do
something with it.
I have an Android phone and I've been very pleased with everything
it does. I especially appreciate the flexibility. I think it would
make a great platform for a tablet or other devices that need a limited
interface. With Linux at its heart it would also be extremely
adaptable to various kinds of integration. Imagine all of your devices
talking easily to each other through open protocols! It would be a
beautiful thing. If what we get with "fragmentation" is easy
integration and easy porting of applications to multiple environments
then I'm all for it. Frag me!
Adding Emblems to Media
I'm a big fan of Creative Commons media. I listen to a lot of it.
I have projects that I do where I need to play music, and I appreciate
having a source of good music that composers have designed to be
shared. However, I have to keep track of which piece of media I can
use for what. I keep lists and usually there is a note somewhere about
the license for that music, but that can be a pain. I try to keep them
separated into folders, but that doesn't always work.
In the Gnome desktop there is something called an "emblem" in the
file browser. It's a little visual tag that you can apply to a file.
I took the common symbols for the various Creative Commons Licenses and
saved them as emblems. Now, I can tag a file with the right emblem and
see at a glance what the license is.
Here are the emblems I created:
cc-nd (no derivatives)
cc-nc (no commercial use)
And here is an example of these in use:
Your file browser might have a way to add emblems. In mine I went
into Edit, Backgrounds and Emblems, and selected Emblems on the left
side. It showed me existing emblems and allowed me to add my own:
It's a great way to mark my file and make sure that I use the right
media for the right purpose. The emblem is specific to my system, and
would not transfer if I copied the file elsewhere... but maybe someday
there will be a standard for this.
I was catching up on my slashdot
articles and found an interesting
note about a major computer manufacturer (hint: you'll find out who
it is if you follow the links) who has been dancing in and out of the closet issue about
supporting Linux as a viable option for users. Their latest round has
boiled things down between Windows and Ubuntu. They have made the
following conclusions about which choice you should make:
You are already using WINDOWS programs
(e.g. Microsoft Office, ITunes etc) and want to continue using them
You are familiar with WINDOWS and do
not want to learn new programs for email, word processing etc
You are new to using computers
You do not plan to use Microsoft
You are interested in open source
It's hard to argue with the points that if your
computing is largely wrapped in Windows proprietary software that you
should be using Windows. It's also hard to argue with the idea that you
should use Ubuntu
if you are interested in open source programming. I guess where I
disagree is that idea that Windows is the best starting place for
people who are new to computers.
I've been away from Windows for a while. I can
never completely escape it, because people I know who have Windows
still ask me for help with problems. I have noticed that as things have
passed through Window XP, then Vista then Windows 7 (Vista 2.0) that I
have more and more difficulty keeping up with how to configure things.
I can always find the answers with a quick web search, but the point is
that I have to look it up. If it was truly easy and intuitive then it
would naturally lead me to the answers. So, why would starting with
Windows put a new user at an advantage?
If you are new to computing then you don't have
any expectations. You are learning technologies from the beginning. At
that point I don't see that either system would make any difference to
you. Sure, you might have more Windows users to throw rocks at-- I mean
more Windows users within a stones' throw to help you out... but you
might also know a few people who use Linux. Ubuntu has an easy install,
an almost magical way of finding and installing software. The default
settings are all pretty reasonable for a typical user. It's designed to
connect you to the Internet and get you browsing with no special
software loads or changes.
In addition, someone new to computers would have
access to tools for art design, media editing, programming, security,
and any number of other interests. All they have to hit the button and
it's theirs. True, the applications may not be the most common
commercial editions of these tools, but this person is new. They are
trying to learn how technologies work. How better to introduce them
than to provide freely available resources that will let them
experiment. As an example, I'll give GIMP
(which has a
very nice article in the Open Source zone right now). GIMP stands
for the Gnu Image Manipulation Program. It's an editor that provides
enormous capabilities to edit photos and other pixel-based graphics
which you would use on the web and in documents. It rivals Adobe
Photoshop in its functions and I have actually used tutorials that were
written for Photoshop to learn skills in GIMP. Someone learning about
pixel-editing can learn a great deal with this tool and put out results
that are usable by anyone. (GIMP supports a ridiculous number of
graphic formats.) There are many other applications that are similar.
I really want to challenge this last point. In
fact, I think that someone new to computers who starts with Linux will
fail to develop a number of bad habits that seem to occur with people
who grow up with Windows. They'll find community assistance early on.
(The Ubuntu help forums are very friendly and usually provide
tutorial-quality answers for solving problems.) They'll learn that
there are options available for software and that they can and should
make choices when they select a tool. They'll grow with their curiosity
rather than be driven by fear that they may or may not be licensed
correctly for what they are doing.
I know many will disagree with me, but I'd love a
chance to take a group of kids and raise them through a Linux program
versus a Windows curriculum. I think the Linux kids will have a broader
more creative view of technology and will dive into a community-drive,
open, global world. I think they'll be people who look for solutions
rather than waiting for answers. It could be a beautiful thing.
Alas! LinuxCon has begun and I'm stuck here, up to my-- well... never you mind! I'm just not there this year. However, conventions about opensource things are increasingly friendly to virtual participation, so maybe I'll be able to look in a little.
Today I already saw an interesting area on Open Source Education. I will continue to say that I think that good use of open source technologies in any school curriculum will go a long way to making kids smarter and more in-tune to technology. Why? Because open source is about technology! it's about how things work and why they work. It's the technological equivalent to those little plastic models that showed you the transparent person with all the guts showing. OK... maybe it's not that graphic... but the skin is certainly pretty easy to peal back.
Right now I haven't seen a lot of education in primary schooling which teaches kids how to enjoy getting into what makes technology happen. I think they get exposed to some commercial tools, but does that really teach what they need? Linux and open source software create an environment where kids can work with any aspect of the infrastructure, from basic program usage to development to security to... I've said it all before! I just can't believe that there aren't more teachers out there who are excited about technology helping their students to do cool stuff. Maybe there are many and I just don't hear about them. Even so, it shouldn't be pockets of experimentation it should be a core value. Open source environments allow you to dissect technology like a frog. It provides complete transparency down to any level that you want to explore. Any children who get a grounding like that are going to skyrocket ahead.
Maybe it's a money thing. Maybe the issue is that funding and free products all go together and a system that centered learning on an open-source environment would have to give up a lot. Maybe there's pressure not to go there by... er... "Them!" (Giant ants?) I really don't understand.
I will say that the availability of open-source software gave me learning opportunities that I never would have had otherwise. I still go and tinker with different technologies because it's so easy to get a basic start with things that are open. That knowledge allowed me once to secure a lab so tightly that we upset the security people (because they couldn't scan it to tell us whether or not it was safe). I want kids and up-and-comers to have that same joy of learning, discovery and exploration that I enjoy. I hope it becomes more available-- or should I say permitted.
Linux Hype vs. Reality Dang! While I was scribbling on the stuff above this story from opensource.com came up about a panel discussion on the perception and reality of Linux today. Wow! I would have loved to have been in that room! Check it out! Bottom line, Linux is not going anywhere and there is nothing really stopping you from putting to work for you now... if you really want to...
How's your second Life? I know that Second Life is not as fully buzzword compliant as it used to be, but I wandered back in to look around and realized that there is some cool stuff there. For example, I attended a live concert with some good music and then had a wonderful conversation with someone about life the universe and everything. Second Life can be a diverting way to interact with people. So, I'm proposing an experiment. I have staked out a location on IBM's property: You can reach it by going here: http://slurl.com/secondlife/IBM%20Business%20Center/68/164/32. This is not my official office. (I'm not actually important enough to have my own designated space in IBM's land. *sigh*) However, it looked like the sort of place that a group of people could sit around and talk about stuff. So, I'm going to try to find a spot on my calendar where I can go and hang out there and anyone who wants to join me is welcome. We can talk about living the open-source lifestyle. If you go there now you'll probably find me sleeping. Feel free to tap me for a friend request. My user name is "Cmwalden Newman" in the weird language of SL.
I was poking around on some information about OpenSim for an author and stumbled across a video about using a Wii remote to create a low-cost Multi-touch Whiteboard. Wow! I admit that I'd never given a whole lot of thought about how the Wii remote works. I was curious, but I just assumed it would be pretty complicated. I had never realized that the Wii communicated through Bluetooth and that the sensor on the front was an infrared camera.
So, I poked around a little more and found a page on CWiiD, which outlines how to get my laptop, running Ubuntu, to communicate with the Wii remote. I was able to set it up to use the Wii as a mouse, interpreting the tilt sensors-- which was challenging to use! I was also able to get it to work as a mouse using the infrared sensor. In this mode the Wii remote gives its position relative to an infrared source. (Your little Wii bar acts as the source for games, but any light source that generate IR will work, even a candle!) My office lights all use the little swirly fluorescent bulbs, but the bathroom across the hall from my office has incandescents. I just turned on the bathroom light and was immediately able to move my mouse by waving the Wii remote in the air like a magic wand-- though I had to point it at the bathroom. However, a desk lamp with an incandescent light bulb would do. I suppose I could mount a red LED somewhere if I wanted to be specific. (What a great use for a lava lamp!)
Anyway... it's been a while since I've been tickled with technology. This is silly, but fun and easy to do. Check it out!
question was asked in a developerWorks forum...
but it looked like it was going to turn into more than a simple
answer... so I moved it here to share with more people.
Congratulations on discovering the importance and opportunity in
Source software. The first step, in my opinion, is to start using Open
Source yourself, wherever possible. You have probably already started
on this path. The easy steps are using Firefox for browsing,
and programs like OpenOffice.org
for productivity. (If you're nervous about the whole Oracle thing with
OpenOffice.org, fear not, there are forks that have occurred which will
keep it open.) For development, you should look at the Eclipse project as well as the many
other interesting development tools that are out there. There is a
vast (and incomplete) list
of interesting Open Source applications
available in Wikipedia. You can also find a rather complete repository
of Open Source projects (including the good, the bad and the really
ugly) at the grand-daddy of all Open Source sites, sourceforge.net, a free repository
for project owners to organize and share their project.
Of course, you should also consider taking the Open Source plunge
and running Linux. (That link is not the official Linux kernel site, but a good
Like I said, you are probably already using Open Source software to
some degree, but the more you use the more you become aware of how the
Open Source world works, how the community drives development and
support and what you think is missing from the equation that you can
To get involved on the development end, you have a few options. One
to take a project that you use and identify something within your skill
set that needs help. You don't really have to ask permission to offer
a solution, but you should follow the protocol for the project. Every
project will have information about how to contribute. If they don't,
then write to the key players of the project and let them know that you
have something to contribute. They will likely be very pleased. If
they're not, then go find someone else to help!
Another interesting thing to do is to look at the list of projects
at sourceforge.net. They actually have a list of "help wanted" projects
that you can dive into. If you dig around, you may even find projects
that have lost their maintainer (which happens for a variety of
reasons). Picking up that work could be a great project and a valuable
service to the community.
Don't forget that there are open projects that need more than just
coding. There are needs for testing, documentation, translation and
just about anything that you can imagine in the business of software
development. Simply writing excellent tutorials with good manuals and
video demos could turn a project around... and this is typically the
sort of work that the deep developers don't find very interesting.
There are even other opportunities, like the proofreading help needed by Project Gutenberg.
Unusual projects like the Open
Prosthetics Project, which try to accomplish goals for the general
It's not hard to get involved in projects. It takes time and a
little discipline to stick with it, even though you don't have a
manager demanding that you produce. However, I think that you gain the
same satisfaction from this work as you do from any sort of good
volunteer work that you might do, and you actually get to benefit from
the work yourself by having greater functionality and improved skills.
Comments and pointers to opportunities are certainly welcome!
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 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.)
I'm sure that all of you are focused individuals. I'm sure that all of you see tasks clearly laid before you and that you systematically work your way through them with the persistence of a census-taker... each one in turn until all the jobs are done. How wonderful that must be.
I've always been full of curiosity. I seek knowledge and experiences of all kinds, which has led me in many interesting directions. It's probably also the reason that I'm so drawn to open-source, because there is always something new to discover. Recently, I came across this article: Work Smart: How to Make Procrastination Productive
I like the way this person thinks. Procrastination isn't so much laziness, or fear of action. It's a sort of intuitive prioritization where things get done, just not in the way that some would consider logical. Are there out there who suffer from my fascination with the next shiny thing moving at the corner of vision? Does this broaden your reach or weaken your grasp?
One of the things that I've been exploring in my distraction is what one can do with a Web Cam. (Great! Some of you are already writing your own jokes. Fine! Laugh it up.) I hadn't looked to seriously at webcams because I just didn't have a specific need for one. Additionally, most equipment like that tends to be pretty Windows-centric and, while I can usually find the right piece and get it to run OK under Linux, I just wasn't motivated. Then, I'm in a big-box technology store beginning with an F where I normally don't shop because I don't find that the cheap prices are worth all of their other hassles. (I might as well order on-line!) Yet, there I am, looking for an adapter for my Droid, that I thought I need to have that day. I happen by the webcam section and start looking at the different models. I find a Creative Live! Cam Socialize HD, which actually lists Linux as an option under it's system requirements! I'm so pleased and surprised that I find myself taking it home.
I connect the camera and it works right out of the box! Yay. I talk to my dad and convince him to get a web cam as well. The next night we experiment a little and decide that for bed time we'll let Grandma and Grandpa join us for story time. It's pretty cool. My daughter read her story (she always reads one to us too) and she would read the text and show the pictures to the camera. Another night we did it again and Grandma and Grandpa had a story for us. What a wonderful way to reach out and touch bases with each other. As someone with a home-office I appreciated the value of being able to have some virtual presence and sharing seemingly insignificant things.
Now something weird has started. Skype, which is what we were using, has suddenly decided to only use my camera at 15 FPS, rather than the 30 that it will do, and all of the settings and adjustments are shielded from me in Skype. I can make it work fine with the other, open applications that talk to the camera. I did some digging and found that this was not unusual for the Linux version of Skype. I don't know if they are behind on the video technology that's available through the Linux kernel, or what. Perhaps they are doing some of that intuitive prioritizing. In the mean time I'm looking for other options that are more open that will also be easy for my dad to use. I've even toyed with setting up my own SIP server using Kamailio, but I haven't had a chance to learn the in and outs of how it works. Too many shiny things... like getting articles done, drawing a paycheck and other things that.
Maybe soon my intuitive priorities will align and I'll be able to share with you the secret formula for doing this yourself. In the mean time I'll share a little hint with you: You don't need a fancy service to connect to your computer from anywhere. You can do it with SSH and a system that you leave connected to the Internet. I'll give the basics for the adventuresome and maybe write up a more substantial tutorial later:
Set up the openssh server on your home system. Make sure that you have a port opened to the Internet for ssh. I recommend choosing something other than 22 or you'll just get your log files clogged by script-kiddie attacks. I also recommend setting it up so that you require key authentication for a good connection. It's a little bit of a pain to deal with the keys, but it makes your setup exponentially more secure.
Get a dynamic DNS address and configure your home network to update that address whenever your home IP is reset. Now you can get to the home system by domain name rather than having to know the IP.
On your "work" system set up ssh and vnc. Whenever you want your system to be reachable set up a reverse-port-forward (-R) of the vnc port (590x) back to your home system. At that point, only your home system will be able to connect back to the work system through VNC.
If you want to connect from another machine, establish another ssh connection from, say, your laptop to your home PC, doing a standard port forward (-L) to the same port that you reverse-forwarded. Now you Use VNC to go from the laptop through the home PC to the work machine. Here's a brief example:
Connecting Work PC to home: ssh -i mykey -R 35900:127.0.0.1:5900 email@example.com Connecting from Home PC to Work PC through encrypted channel: vncviewer localhost::35900 Connecting from remote laptop to Work PC: ssh -i mykey -L 35900:127.0.0.1:35900 firstname.lastname@example.org vncviewer localhost::35900
That's the sort of expert view. Maybe some of you can use it. Selecting a higher port like 35900 helps avoid firewall issues where lower ports are blocked.
Ooo! Something shiny! I'm just going to take a moment and--
A few interesting stories today. The first one, while not very deep and more of a sort of op-ed piece talks about Oracle's apparent battling with open source. It's called "Shuttleworth: Oracle dooms its prospects in open source business." Oracle has made some interesting choices as the new stewards-- yes stewards! -- of the open-source projects they received with Sun. Another, "Jailbreakers Smell Trouble in New Apple Security Patent," speculates about how some of the new patents that Apple has filed may have more to do with giving them a way to catch iPhone jailbreakers than enhanced user security.
It will be interesting to see how all of this plays out. What I see is an increased interest by many technology consumers in openness. Just as the era of the PC created a world which was unfettered from the rule of the system administrator the next age of computing will allow a tech-savvy user to have more freedom and flexibility with their equipment... provided that they are permitted. We are going to discover soon how much of your technology that you actually own. Imagine if you bought a car but were not permitted to outfit it with whatever enhancements that you desired to go faster, be safer or just look funky. Imagine being prohibited from cannibalizing your old electronics or motor parts to create your own toys, tools and inventions. I can see voiding the warranty and refusing to support a device which had been altered... but surely when I pay that much money for a piece of hardware I should be able to tinker with it. I'm hoping that the response to these sorts of things will be for consumers to go to technologies where they are not subject to such controls. We'll see. Likewise, if Oracle continues to tighten their grip on their open-source projects I hope that many do what has happened in the past when an open-source project has started to turn away from its community responsibilities: they'll turn to another option which is still open.
I agree that these companies are well within their rights to protect their property. However, if your need for protection exceeds the desire of the consumer to put up with your restrictions they will go elsewhere. Like I said... I can't wait to see what happens next.
On the other hand, there are a couple of interesting looks at where openness is blossoming. Here is an article, "What would persuade you to ditch Windows for Ubuntu 10.04?," which says what I've said for some time: Linux is ready for you if you want it. It's a nice description of the things that Ubuntu has done to make themselves friendly enough to by my choice as a daily work environment as well as the choice for people I have helped migrate from Windows to Linux. It's all just going to get better and better.
Finally, there is movement in an area where you would expect openness to be unwelcome: the military. I've seen a few articles lately about how the military is finding advantages to open-source tools. Do a little searching and you'll find them easily. This makes sense to me. Most of the guys I have met who are truly dangerous don't wish for a lot of fancy James Bond gadgets if they get into trouble. They just want a nice sharp pencil. I think that soldiers are discovering that there is an advantage to having transparency to the technology that they use when lives are on the line. It will be interesting to see where all that goes as well.
Enough for now. I wish I had a great tag line to leave you with... but I don't.