Categories

## Bringing Ustream and Justin.tv back to life

Tried to watch the Make: Live! webcast about the Arduino this evening, but was unable to view the video stream on my computer. All I got was a black screen. Tried viewing the webcast directly from the Ustream site, but still got nothing.

Marching through the standard troubleshooting steps, I removed all script blockers and ad-blockers, and shut down my software firewall. Still nothing.

To verify that I could still view video, I went to the TWiT Live page and confirmed that my computer handled the BitGravity stream without difficulty, but both the Ustream and Justin.tv streams failed to function properly. As a final check, I went to YouTube, where videos displayed without a problem. To see if this problem was limited to my preferred browser, I shut down Firefox and launched Internet Explorer. Same results. So something was acting on a system-wide basis.

After several rounds of searching on Google, I eventually stumbled upon the solution. It seems that you must tell the Flash browser plugin to permit third parties to store information on your system. I’m not happy about allowing Flash cookies, but if you don’t permit this, you won’t be watching Ustream or Justin.tv. I haven’t (intentionally) changed these settings in months (maybe years?), so I don’t know why I’m just now having problems. Anyhow, I thought I’d make this post just in case somebody else is experience the same difficulty.

If you are a Firefox user, you might want to install the Better Privacy add-on, just to simplify the process of removing Flash cookies, which are now going to be added to your system every time you view Ustream or Justin.tv videos. Be sure to “protect” the settings.sol folder in Better Privacy, or your settings will be forgotten every time you shut down Firefox.

[Update: After submitting this post, I went back and returned the Flash plugin settings to their original values. After deleting the other Flash cookies and restarting the browser, I had no problem viewing the Ustream and Justin.tv feeds on the TWiT page. Still don’t know exactly what caused the problem, but allowing third-party data storage on a temporary basis seemed to clear the logjam.]

[Update 2: Nope, I had accidentally deleted the settings.sol folder cookie. Once I locked things down solidly, Justin.tv would no longer work. So ignore the prior update… you apparently must allow Flash cookies to watch certain webstreams.]

Categories

## Making Beamer Better

I use Beamer a lot for presentations, and I’ve gotten pretty good at the editing cycles that it requires. Unlike in PowerPoint, Beamer doesn’t allow me to simply click and drag an object to a new spot. Rather, to move something on the slide, I have to edit the LaTeX code, entering a command like \vskip0.2in to give me an additional bit of space between a couple of equations or text elements. It sometimes takes numerous iterations to get things right. This doesn’t both me, as I love being able to write entire presentations in LaTeX. What I want, however, is an ability to speed up the iterations.

If I could place the document preamble in one file, and the code for each slide in individual files, then it should be possible to create a script for compiling just one slide at a time. Then, I wouldn’t have to wait while Beamer compiled all 100+ slides in a presentation deck every time I make an edit. (Yes, that’s a lot of slides, but the count goes way up when I use multiple slides to reveal an equation one line at at time.) I can comment out code to limit compilation time, but it’s slow and cumbersome, and I once found myself in the middle of a presentation with missing slides because I forgot to uncomment about a third of my presentation file. So I want a supervisory program that will handle the individual code blocks, and allow me to compile the entire document when I’m finished.

If such a program exists, I’d sure like to know about it. If not, then maybe I’ll get around to writing it someday. 🙂

Categories

## Secret Tools of the Engineering Grad Student, Part 4: BibConverter

As you begin writing academic papers, you will need to cite the work of other researchers. From the prior two posts in this series, you know about using LaTeX to typeset your paper, and using JabRef to store your bibliographic references. However, typing in all the citation information by hand is rather tedious. Your ability to search the research literature is greatly enhanced if your academic institution provides you with access to databases of the engineering literature (Engineering Village, IEEE Xplore, Web of Science). All of these services allow you to export bibliographic data to a file on your computer, which you can then import into JabRef. However, there is a better way: BibConverter.

The brainchild of Kjell Magne Fauske, BibConverter is a free online service that converts a web page of information into a BibTex reference. While you are browsing through one of the article databases, you will likely find a paper you want to reference. Instead of downloading a citation file, simply copy the entire web page to your desktop, go to BibConverter, and paste the clipboard contents into the provided box. Click on the “Convert” button, and now you have a valid BibTex reference, that will look something like this:

@ARTICLE{Kalman1960,
title = {New approach to linear filtering and prediction problems},
author = {Kalman, R. E.},
year = {1960},
volume = {82},
number = {1},
pages = {35--45},
month = mar,
abstract = {Classical Wiener problem (filtering and prediction) is re-examined in
discrete case using author's new ("state transition") method of
analysis of dynamic systems; general solution is developed in
terms of conditional expectations; this gives result of
greatest possible generality when only first and second-order
statistical averages are used; basic concepts of theory of
random processes reviewed.},
}


Copy this data to the clipboard, and go to JabRef. Create a new BibTex entry with “Ctrl+N”, select the “Article” entry type, and then replace the “BibTex Source” entry with your clipboard contents. Once you’ve done this once or twice, it will seem quite natural, and it saves you the time and mess of having to clean up all the citation files that will start to litter your system. You can even download a bookmarklet from the BibConverter site to save you the trouble of surfing to the BibConverter site and selecting the proper database format. This service has saved me hours of time over the past several years.

[Note: IEEE Xplore recently changed it’s online format, and it looks like BibConverter is currently unable to process data from that service.]

Categories

## Secret Tools of the Engineering Grad Student, Part 3: JabRef

If you write academic papers, then you need to maintain a database of the references you cite. Assuming that you use LaTeX, this is typically accomplished by creating a BibTeX file that contains the needed bibliographical data. (Note that, in addition to identifying this particular data format, you may also see the term “BibTeX” being used to reference the software program that pulls information out of the BibTeX file and integrates it into a compiled LaTeX document.)

While it is possible to create a BibTeX file using nothing more than a text editor, it saves time to import such information into a program designed for this purpose. Always pleased to uncover free software, I’ve found the open source program JabRef to be a powerful citation manager. Many of the engineering article databases (Compendex, IEEEXplore, Web of Science, etc.) allow you to export bibliographical data for the papers they store. It turns out that there are many formats for exporting such data, but JabRef allows most of these formats to be imported directly into its BibTeX database.

Since JabRef runs on the Java Virtual Machine, it works with Windows, Mac OS X, and Linux. In fact, if you don’t want to be bothered downloading JabRef, you can launch the software over the web.

Alternatives to JabRef include Firefox extension Zotero, Mac program BibDesk, and commercial program Endnote.

Categories

## Secret Tools of the Engineering Grad Student, Part 2: LaTeX

If you are going to write a dissertation (or any other paper for that matter) with significant mathematical content, you will discover that the typesetting of your equations proceeds much better if you use LaTeX. While there is a steep learning curve, you will save a good bit of time down the road if you get comfortable with LaTeX (pronounced “Lay-tech”) early on. Here’s an equation for the Fourier transform rendered with this typesetting system:

F(f) = \int_{-\infty}^\infty f(t) e^{-j2\pi ft} dt

This equation is created with the following code:

 F(f) = \int_{-\infty}^\infty f(t) e^{-j2\pi ft} dt

As you can probably figure out, mathematical symbols are created in LaTeX with text keywords preceded by a backslash. In addition to the improved typesetting, this means that you can quickly update many equations at once by simply searching for, and replacing, text strings. Thus, if you wanted to convert the above equation to be a function of g, instead of f, a simple text replacement would update all the equations in one fell swoop. Contrast this to the equation-by-equation corrections required if one is using MathType to typeset mathematics inside a Microsoft Word document.

While there are many benefits to using LaTeX, it does take a little getting used to. In particular, you may find yourself trying to control a lot of factors (margins, paragraph spacing, etc.) that are easy to modify in a word processor, but difficult to adjust in LaTeX. In the beginning, don’t worry about trying to control the output; focus instead on getting your equations to typeset correctly. Also, expect to spend some time searching for documentation. While most everything you will want to do has been done already, it sometimes takes a while to hunt down the correct command. (Hint: If you absolutely must play with the margins, use the geometry package.)

Significant time savings occur with LaTeX because templates for most publications types have already been defined. Thus, if I want to publish an IEEE paper, I simply drop my document into an IEEE template. Same paper in ASME format? Simply change to the appropriate ASME template. Need advanced math formatting commands? Use the AMS package. While similar templates are typically available for Microsoft Word as well, I often find myself hunting from paragraph to paragraph in Word, trying to discover why the formating has gone askew midway through the document. This is rarely a problem in LaTeX. And to produce my dissertation? Simply use the appropriate thesis style (your university may have its own format).

On my XP system (yes, I’m a dinosaur), I’ve had good luck using MikTex as my LaTeX implementation. One of the nicest features about the MikTex software (other than it being free) is that, when it encounters a package name it does not have, it goes out on the net and attempts to find the package for you. This has frequently saved me from having to install such code manually. While any text editor will work to generate LaTeX documents, I’ve always used WinEdt. Although WinEdt is not free, I’ve not regretted the \$30 it cost me for a student license, as it integrates quite nicely with MikTeX.

If you are interested in learning more about using LaTeX, there is some decent documentation on getting started available from the LaTeX project site, as well as the WikiBooks site. When you see references to “LaTeX2e,” this simply indicates the current version of the LaTeX program. Similarly, “LaTeX3” refers to the next generation of the LaTeX software. Learning LaTex is initially frustrating, but you’re an engineering grad student. You’re not the type to choose the easy path. So download the software and give LaTeX a try. I suggest starting with a study sheet of equations for an upcoming exam. You’ll learn how to construct equations without needing to worry about paragraph formatting.

[Hint: Find an equation you like in Wikipedia? Right click on the equation and access the image properties. The associated text will be the LaTeX code used to generate the equation.]

Categories

## Secret Tools of the Engineering Grad Student, Part 1: Desktop Search

Each engineering specialty makes use of certain software packages. For instance, in my area of automatic controls, just about everyone uses Matlab; those studying other disciplines make use of other topic-specific packages. However, certain tools (software and otherwise) will prove beneficial to just about any engineering grad student who must carry out research and produce a dissertation at the conclusion of their studies. However, these tools are rarely mentioned as key technologies for surviving as an engineering grad student. Over the next several posts, I will identify some tools that I had to discover on my own as I marched toward a PhD degree. Today’s category is desktop search.

You will undoubtedly collect a lot of information on your computer as a grad student. This will include papers, notes, programs, and presentations. Regardless of the software you use to produce or store such information, a good search program will help you quickly access data when you need it. During the course of my research, I have stored thousands of documents in various file formats. Often times I can remember an author’s name, or a keyword, but cannot recall which document contains a particular quote or data item. A search program allows you to quickly identify the information you need, regardless of where it is located on your computer’s hard drive.

An admitted Luddite, I still use Windows XP as my operating system, so I can’t speak to whether Linux, Mac, Vista, or Windows7 users require an external search program. I’ve had good luck with X1 Search, which I started using back in 2004, when this program was named Yahoo! Desktop Search. Then, in 2006, the association with Yahoo! was terminated, but a free version of X1 remained available as X1 Client. Sadly, the last free version (5.6.3, Build 3453) is becoming difficult to find on the web anymore. Although X1 is no longer free, there are other free options in the desktop search category that should work just as well. Regardless of which desktop search program works best for your situation, you will save significant amounts of time by being able to rapidly search through your research documents and retrieve key bits of data.

Although I wasn’t surprised at my need to search journal articles, I have been amazed at how often I need to go back to find a section of software code that I had previously written. Over the course of the past several years, I’ve created thousands of lines of Matlab code, and I occasionally realize that I’m starting to rewrite an algorithm that I’ve already sorted out. So I open up my desktop search program, limit my search to Matlab files, and start typing in relevant keywords. I’m almost always guaranteed to find the needed code within a few minutes. If you’re an engineering grad student, you’ll likely get good use out of a desktop search client.

Categories

While trying to get more informed on how engineering education can be improved, I thought I’d post my “newbie” perspective on what subject material needs to be added to the core engineering curriculum. As illustrated above, there are at least six areas that I think deserve greater attention. These are, in no particular order:

• Software Skills: As I mentioned in Programming the Physical World, I think that software skills are going to become exponentially more important in coming years. I’m not talking about knowing a particular language syntax, per se, but rather an awareness of issues such as code storage (revision control), quality assurance (unit testing), and complexity reduction (refactoring). It’s far too easy to create software that gets the job done, but leaves gaping holes with regard to access, usability, and security. Just look at the constant stream of code updates from big players like Microsoft, Apple, and Adobe—these companies have access to world-class programmers, yet there remains an unending flow of corrections to fix previously undetected errors. Just this week, Microsoft admitted to a security bug that’s been in their code for 17 years! As we start programming the physical world, it won’t just be bits and bytes that are compromised. It could conceivably be bridges and electrical stations and chemical plants that are compromised as the result of poor programming practices. As with so many things related to engineering, a small mistake can lead to disastrous results. It seems to me that an instructional program like Software Carpentry would go far in helping engineers improve their software skills.
• Individual and Group Behavior: We train engineers to be great problem solvers, yet much of the difficulty in implementing solutions is not technical, but rather social. Further, we want engineers to operate devoid of emotion, and to think in a purely rational manner. Yet a quick glance at popular books like Predictably Irrational and Sway: The Irresistible Pull of Irrational Behavior indicates that most people operate in anything but a rational manner.  At the very least engineers should be aware of:
1. Their own limitations in perceiving and evaluating the world around them.
2. Human tendencies to respond in certain ways to external inputs; for example, our innate tendency to want to reciprocate favors, to be part of the majority, to be consistent in our actions, etc.
3. Methods used by marketers and politicians to sway both personal and group decision-making.

If engineers are going to be effective in advising society about our increasingly complex world, they need to be aware of human tendencies in evaluating information, and in responding to requests for action. I’d like to see a semester-long program like Software Carpentry address these issues. Primary texts for this class would be Influence by Robert Cialdini, and Yes!, 50 Scientifically Proven Ways to Be Persuasive by Noah Goldstein, Steve Martin, and Robert Cialdini. A text on negotiation skills might also be appropriate here.

• Technical Communications: If the preceding class on human behavior provides the strategy for effectively communicating an engineering perspective, then this class would be focused on the technique of delivering a targeted message. Engineers need to have a sense of how non-engineering audiences process information if they are going to counter the emotional appeal of most marketing campaigns. An investigation of information graphics would include texts ranging from Tufte’s classic book, The Visual Display of Quantitative Information, to the more casual Back of the Napkin. The Challenger Incident could serve as a case study in the importance of clearly deliniating the important engineering issues at hand.

Methods for presenting a clear, concise message would be covered, referencing texts such as Presentation Zen and slide:ology. Also included would be a discussion of presentation styles such as the Lessig and Takahashi methods, as well as the Pecha Chua and Ignite formats. An introduction to LaTeX may be appropriate as well, as few things are uglier than presentation slides showing equations that have been typeset using Microsoft products (IMHO).

• Risk Management: It is rare in most industrial settings to find individuals who can keep up with the mathematical skills of a fresh engineering graduate. So when an engineer is asked to make a calculation, the boss rarely wants to know how the calculation is performed. Rather, the boss wants to know if a particular product or process will operate in a desired manner. However, given the variability in all materials and methods, there is never an exact answer to such a question.

For some engineering problems, such as elevator construction, there will be a safety factor that is specified by code. However, no particular safety factor is given for most industrial tasks; an engineer must determine the appropriate safety factor for each situation. To do so effectively, an engineer must be cognizant of the risks that are inherent with his or her assumptions, and know how to convey the risk of those assumptions to others, who will likely possess less technical knowledge. This is especially critical given that all of us usually make poor estimates of inherent risk. It appears that Virginia University’s Center for Risk Management of Engineering Systems is attempting to address some of these issues.

Update: A possible text for this material is Judgment under Uncertainty: Heuristics and Biases. Referenced in this post by John Cook.

• Physical Problem Solving: Engineering problems would take forever to solve if each engineer had to develop their own theory of calculus. Yet we leave engineers to come up with new designs without giving them any hint as to how the work of prior generations could help them solve their problems. If the engineer doesn’t stumble upon the connection to prior work by happenstance, then each new design effort is simply an educated guess.

Inventor Genrich Altshuller and his colleagues studied the trends found in Russian patent filings starting in 1946. They developed a theory known as TRIZ, which translates from Russian as an acronym for “the theory of solving inventor’s problems.” The TRIZ methodology offers users a means for examining “new” problems in terms of existing solutions, thus often leading to quicker results. Although much of the TRIZ theory has been extended by private firms that keep their methods close to the vest, there do exist some open-source resources for learning this approach. There are also numerous books on this subject, including one by TRIZ developer Genrich Altshuller himself. Instruction in the TRIZ method could be enormously beneficial in improving the effectiveness of tomorrow’s engineers.

• Design Thinking: If the prior class defines how to produce a technical solution, this topic seeks to identify how to successfully implement a human solution. There is usually a large disparity between what people say they want or need, and what they actually use, do, or buy. Thus design thinking, in essence, is a focus on identifying human needs. As noted in a recent post by Stanford professor Bob Sutton, design thinking was developed by engineers. It is now being incorporated into other areas of study, including medical schools and MBA programs. However, many engineering schools fail to introduce their students to even the basics of design thinking. In addition to instructional material available from Stanford’s d.school website, there a lot of information available from the website of design leader IDEO. Perhaps books like The Art of Innovation and Change by Design could serve as reference texts.

So what is going to be thrown out of the core engineering curriculum to permit these courses to be taught? My current thought is that there must be a way to more quickly bring students up-to-speed. Perhaps the “lecture, study, homework, test” cycle of traditional education can be improved upon. If so, I bet the solution will rely heavily on the six skills areas outlined above.

Categories

## Programming the Physical World

One of the first articles that inspired me to start this blog was an article by Greg Wilson stating

Instead of software design becoming more like “real” engineering, we’re about to see the latter become more like the former.

To see what he considers “real” engineering, we need only reference his post of two weeks later, Without the Hot Air, in which he notes that

…almost none of what we call “software engineering” is actually engineering. I’ve worked with enough civil, mechanical, and electrical engineers to know how important back-of-the-envelope reality checks are to their disciplines. Other than figuring out how many servers you need to meet a service level agreement, I don’t know if such reality checks are even possible for software construction.

Having identified a fundamental difference between software and engineering design, Mr. Wilson correctly predicts (IMHO) that “real” engineers will inevitably become more like software designers in the future, rather than visa-versa. This will occur, he surmises, because new manufacturing methods, such as rapid prototyping and desktop manufacturing, can be manipulated via easily modified code. In comparison, traditional manufacturing methods require slow and costly changes to molds and tooling. As a result, future engineers looking to optimize mechanisms and processes (beyond the level possible with mass production) will increasingly turn to these newer technologies. In turn, they will need much stronger software skills, and will therefore turn to their software-centric colleagues for advice.

Five years from now, I predict that software designers who’ve been griping about never being given enough time or enough respect will be on the lecture circuit teaching their ID and IE counterparts how to be agile, live with chaos, and cope with design cycles measured in hours rather than months.

From what I’ve seen as a (rather elderly) grad student over the past five years, the programming skills of many engineering students are sorely lacking. I’d venture to say that the majority of mechanical engineering grad students with whom I’ve worked have no idea of how to use version control, or how to write a unit test. I am acutely aware of how easily a small programming error can alter the results of my research, and I suspect that a great many published articles unknowingly rely on faulty code.

Since I am studying in the area of feedback control, much of my programming work is in Matlab. Not a difficult language, and a heck of a lot easier to get started with than Java or C++. Still, while grading homework for an introductory grad-level controls class, I’ve come across some truly awful programming practices. This is not the fault of my fellow students. Engineering is not an easy discipline, and there never seems to be enough time to adequately cover the existing curriculum. As a result, engineering students are often never been exposed to the finer points of software construction. In many cases, programming skills are assumed but never taught—students are simply given a handout or two and expected to come up to speed on their own.

It would appear that Mr. Wilson has already recognized many of these same problems. He champions the Software Carpentry program, an effort to improve the software literacy of scientists and engineers. It is based on Python, rather than Matlab, but could probably be ported to a new language with few technical difficulties. (Finding the time to prepare for twenty-five hours of instruction is likely to be a much larger problem.) In any case, courses like this need to be a part of every engineering curriculum. Much of the physical world is going to be programmed, rather than fabricated, in the coming years.