Python is an excellent alternative to Matlab for scientific and numerical computing that's free of charge. Matlab is certainly the de facto standard when it comes to numerical computing, but in most cases, Python is equally capable. In many instances, python is better. I've been playing with it over the past few days, and it is very possible that I will dump matlab completely in favor of Python. Time will tell.
Here's a description of Python from their website:
Python is a dynamic object-oriented programming language that can be used for many kinds of software development. It offers strong support for integration with other languages and tools, comes with extensive standard libraries, and can be learned in a few days. Many Python programmers report substantial productivity gains and feel the language encourages the development of higher quality, more maintainable code.
Python by itself is not enough to replace matlab, and that's where SciPy and Matplotlib come into play. SciPy is a python library that has a ton of functions for scientific computing. It's an extension of NumPy, which is a numerical computing library. Matplotlib is another package that allows you to plot things, just like in Matlab. It can do histograms, images, scatter plots, contours, and many more. It has the ability to save to PDF, EPS, PNG, PS, and even SVG if you want to edit your figures later with vector-based illustration software.
These figures were all created with Python and Matplotlib. For more, check out the gallery.
Give it a try! It may take you a few days to get up to speed, but in my opinion, it's very worth the time. If you end up using these tools, I encourage you to donate to Python, SciPy, and Matplotlib so the people behind this great software can continue their work.
Google has a special page for searching for academic publications called Scholar. This is a really handy tool for finding papers on any given subject, and it searches across multiple journals, conferences, and disciplines.
One great new feature that I just found out about is the ability for Google Scholar to generate BibTeX and other common bibliography entries. To enable this feature, do the following.
Now, when you find a paper that you would like to cite, you can just click on the link right from the Google search page and get the citation information. Great!
Here at the SPAN lab, we often need to gather information from a wireless network with a large number of nodes. Synchronizing a wireless network is a very difficult problem, so we developed a protocol that allows each node in the network to have a turn at broadcasting. This prevents multiple nodes from transmitting at the same time, which would obviously cause problems for all of them to transmit their data. Our token passing protocol is robust to outside interference, and can be extended for self-healing and self-forming networks.
Here's a video of me explaining the protocol.
Neal and I conducted an experiment last week where we needed to know exactly where we were at a given time. The challenge was to keep both of us moving on a particular path, walking at the exact same speed. As we thought about how to do this, we had the idea that if we turned on some music and took pre-defined steps to the beat, we could keep ourselves in sync. Check it out:
Our next experiment will feature costumes and background singers/dancers.
For those of you who use EPS and PDF images in Latex papers...
I got sick of having to convert eps files exported from matlab into pdfs. Furthermore, if you use pdf images in your latex papers, you often have to embed the fonts into the pdfs for things to work correctly. For example, some paper submission systems check for embedded fonts and deny your submission if that's not the case. This was such a hassle, I decided to write a script that allows one to right-click a file, and then just choose "EPS2PDF." It converts the eps to pdf, and also embeds the fonts, all in one shot.
To install in Ubuntu (or other distributions of Linux that use Nautilus), do this:
1. Download this EPS2PDF file.
2. Put it in the directory: /home/user/.gnome2/nautilus-scripts/
3. Make sure you have the "epstopdf" program installed on your system. In Ubuntu, install the "texlive-latex-extra" and "texlive-generic-extra" packages to get it. On other distros, try searching for "eps to pdf."
Then, when you load the Nautilus file manager, it will appear when you right click and then go to "Scripts->EPS2PDF." It will generate a new file with the same base filename only with a .pdf extension.
This week I attended a conference on mobile computing called Mobicom in San Francisco. In addition to the great talks and demonstrations that were presented, I met many new people with whom I share many interests. Nothing is more fun than geeking it up without having to feel like you're a complete oddball. We're geeks, we know it, and we like it.
I also had the privilege of demonstrating our Radio Tomographic Imaging (RTI) prototype system at the conference. RTI is a method for "imaging" objects inside wireless networks. For example, say one would like to know where humans are in a particular room or building, and you would like a computer to keep track of this information as they walk throughout the structure. RTI first estimates an image of where the wireless power is being absorbed by objects in an area, and then uses that image to track where the objects move. The objects need not carry a transmitting or electronic device for this to work, since the system can detect any mass that absorbs radio frequencies.
Our demo suffered from the fact that 6 of our 28 radio nodes were damaged during transit to San Francisco. They "acted" like they were working, but when our images suddenly became significantly worse than we are accustomed to, we knew something was wrong. [Read more by clicking the link below]
We fumbled around to fix the issue, but were forced to simply turn some nodes completely off. It was embarrassing and frustrating, but we managed to get mediocre images with what we had.
Demo visitor Hiroshi Shigeno trying it out for himself.
To my surprise, our demo was selected as a finalist for the student demo research competition. They asked the finalists to prepare a short talk, and then judges would choose a winner based on the presentation and demo results. When I gave my talk, I felt great right up to the point where I attempted to load a video of the demonstration. It was blank and would not come up. I quietly tried again and again, and finally after about 30 seconds of silence, the video came up. Then, when I jumped to my second video, an error box popped open and I could not get it to play. Talk about embarrassment! I had to give up and simply show a picture of the results. I felt so humiliated that I wasn't better prepared. Eeeesh...
I finished my talk, apologized for the technical difficulties, and sat down. I was pretty frustrated because it seemed like everything was going wrong. Later that night at the conference banquet I could not believe it when they called my name as the winner of the demo competition! I really feel great to know people think our work is worth an award. I think the technology itself is what won the award, in spite of all the many difficulties we had getting things to run smoothly. I am grateful to the judges who saw the technology for what it was, and were able to see through the quirks of the presentation. I consider myself very lucky because the other demo finalists did really excellent work, and any could have been declared the winner.
I am a huge fan of the open source software model and some of the applications that exist because of it. Open source simply means that the code is available to any developer that would like to modify and customize it for their own needs. In return, most open source licenses require that any modification must remain open, which makes it a very fertile environment for innovation and software evolution. Here's an example:
You're going to the moon, and you need some computer code to steer your spaceship there. An open source program that steers spaceships is already available under open source. The problem is, the existing code does not have the capability of LANDING on the moon, it just takes you to moon orbit. So, you can either program something from scratch, or you can download the open source code and add to it the functionality you need. Since the existing code is very good, you decide to modify it to land on the moon as well. The open source license says that whatever you change or add to the code must remain public and open source as well. You agree, create the landing functionality, and both you and the original application organization are in a win-win situation. You win because you didn't have to spend years making a program that could fly a spaceship, you only had to add a feature. The original organization wins because now they can have your added functionality and incorporate it into the next release! Perfect...
Here's a list of some great applications that you can use as an engineer (or even if you're not). All of them are entirely free of charge and open source, even for commercial use. Next time you are deciding whether or not to fork over hundreds of dollars for software for yourself or your company, give these a fair try.
A serious competitor to Microsoft's office suite. It comes with programs for documents, spreadsheets, presentations, databases, and drawings. It saves/edits documents written in MS formats, and can easily export files to PDF. It supports macro and scripting languages, and can be used for serious number crunching.
Inkscape is a vector-based illustration program. Vector-based means that you can scale your images and illustrations without losing picture quality. Inkscape is great for drawing technical illustrations, and it will save to a number of useful formats including EPS and PDF. It also has some very useful LaTeX functionality for adding math equations to your drawings.
Kile is an IDE for LaTeX. It features code completion features, document structuring so that you can quickly jump to sections of your document, shortcuts/macros for frequently used commands, and much more. Save yourself the headache of having to look up all those obscure LaTeX commands by using Kile.
Eclipse is a phenomenal IDE for common programming languages like Java and C/C++. It supports a flexible plugin architecture, and can be customized for many other languages. It features code completion, a nice interface, and many customizations.
Bazaar is the latest-and-greatest in version control. It's very flexible, allows many things that are not available in traditional systems like CVS, but still is simple and easy to learn. It also features easy integration into the online code hosting service launchpad.net. If you are looking into version control systems, you have to check this one out.
An entire operating system that's free and open source. Ubuntu is a relatively new Linux distribution that aims to be very user friendly for desktop use. Ubuntu has proven that Linux is no longer only for the geeks, and has become my OS of choice after spending years in other systems. It's slick, friendly, and yet extremely powerful for us geeks. New versions are released on a reliable 6 month schedule, so it's derivative of improvement is very high. All of the applications listed on this page can be installed (or are already included with Ubuntu) with the click of a button.
The Gimp - Image editing software similar to Adobe's Photoshop.
Gobby - A collaborative text editor. Have multiple people simultaneously edit text documents (good for Latex papers).
Rsync - A very powerful tool for backing up data.
I spent the majority of this week in St. Louis for the 2008 conference on "Information Processing in Sensor Networks." Presentations on Monday through Thursday were held on the topics of algorithms, signal processing, programming, and debugging of wireless sensor networks.
In my opinion, the value of conferences like IPSN is in the contacts and relationships that are formed by getting together with other experts in the field. The technical talks, presentations, and demonstrations are enlightening, but establishing a contact with someone who can help you is even better. I really appreciated meeting some of the great engineers from around the world, and look forward to working with them in the future.
Next time you are at a conference, branch out and meet new people during the breaks. Ask them what they are doing and what their specialties are. Ask questions about the presentations that interest you and talk to the authors. You never know when you'll meet someone who can help you tremendously, and you'll be able to contribute to their work as well.