April 27th, 2019Writing an Extension for Firefox
Sent by Brian Strassberg
One of the best things about Firefox and Thunderbird is that they have a well defined extension mechanism. If there’s some feature you feel is completely missing, you can go ahead and add it. It’s relatively easy to do — you don’t have to fiddle about with a C compiler because extensions are mostly written in a combination of XML and ECMAScript.
I’ve recently been getting up to speed with the mechanics of writing an extension for Firefox and Thunderbird. I thought it might be a good idea to share what I’m learning in my blog. Hopefully the information might be useful to others trying to learn how to write Mozilla extensions. In this blog, I’ll take a look at installing a really simple extension into Firefox that adds a “Hello World” menu item to the Tools menu.
It doesn’t do anything useful yet, but over subsequent blogs, I’ll introduce more advanced and useful techniques.
Creating contents.rdf
contents.rdf
is a Resource Description Framework (RDF) file that describes the contents of an extension. RDF is an XML grammar that provides a data model that can be easily processed by an application. You don’t need to know much about RDF to write simple extensions, but if you’re interested, you can get more information at the W3C.
To get started, create a directory called content
. As its name suggests, this will contain the main content of your extension. contents.rdf
should live inside this directory. You should end up with a directory structure something like this:
c:myextensions +- helloworld +- content +- contents.rdf
Here’s the code for contents.rdf
.
<?xml version="1.0"?> <RDF:RDF xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:chrome="http://www.mozilla.org/rdf/chrome#"> <RDF:Seq about="urn:mozilla:package:root"> <RDF:li resource="urn:mozilla:package:helloworld“/> </RDF:Seq> <RDF:Description about=”urn:mozilla:package:helloworld” chrome:displayName=”Hello World” chrome:author=”Brian Duff” chrome:authorURL=”http://modev.dubh.org/helloworld” chrome:name=”helloworld” chrome:extension=”true” chrome:description=”A simple demonstration firefox extension.“> </RDF:Description> <RDF:Seq about=”urn:mozilla:overlays”> <RDF:li resource=”chrome://browser/content/browser.xul”/> </RDF:Seq> <RDF:Seq about=”chrome://browser/content/browser.xul”> <RDF:li>chrome://helloworld/content/helloworld-Overlay.xul</RDF:li> </RDF:Seq> </RDF:RDF>
The important parts of the file (and the parts that would usually change for each extension) have been highlighted in bold. First, we provide a package for our extension. This just distinguishes it from other extensions. For our simple extension, we choose the package helloworld
:
<RDF:Seq about="urn:mozilla:package:root"> <RDF:li resource="urn:mozilla:package:helloworld“/> </RDF:Seq>
Next, we provide a description of our extension:
<RDF:Description about="urn:mozilla:package:helloworld” chrome:displayName=”Hello World” chrome:author=”Brian Duff” chrome:authorURL=”http://modev.dubh.org/helloworld” chrome:name=”helloworld” chrome:extension=”true” chrome:description=”A simple demonstration firefox extension.“> </RDF:Description>
Next, we tell mozilla which parts of the product we want to extend. All of the user interface elements of Firefox and Thunderbird are described in a user interface definition language called XUL. Collectively, these user interface components are known as “chrome”. You can extend most of the user visible parts of the two products. In this case, we want to extend the main browser interface of Firefox, defined in chrome://browser/content/browser.xul
.
Here’s how:
<RDF:Seq about="urn:mozilla:overlays"> <RDF:li resource="chrome://browser/content/browser.xul"/> </RDF:Seq>
Now we’ve described what we want to extend, we have to provide a XUL file that actually installs our custom user interface into the browser window. We will define this later in a separate XML file called helloworld-Overlay.xul. We must tell mozilla where this file is and what it extends:
<RDF:Seq about="chrome://browser/content/browser.xul"> <RDF:li>chrome://helloworld/content/helloworld-Overlay.xul</RDF:li> </RDF:Seq>
We’ve completed the first step of creating an extension. The next task is to describe the user interface elements we want to install into the main window.
Overlaying User Interface Elements
XUL is the XML User interface Language. XUL provides a mechanism called dynamic overlays that allows you to modify the user interface elements of a window or control without having to modify the original XUL files. This way, the definition of extension user interface is de-coupled from the XUL files used to define the main interface elements in Firefox and Thunderbird.
We start of by creating helloworld-Overlay.xul
. This should live in the same directory as contents.rdf
.
<?xml version="1.0"?> <overlay id="helloworldOverlay" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> <menupopup id="menu_ToolsPopup"> <menuitem label="Hello World" position="1" /> </menupopup> </overlay>
This simple overlay installs a “Hello World” menu item at the top of the Tools menu. Our menu item is defined inside a menupopup
element. In XUL, a menupopup
represents a container of menu items, for example a popup menu or the drop down of a main menu. Here, we put our item inside a menupopup
with the id menu_ToolsPopup
. This id, menu_ToolsPopup
, is a predefined in browser.xul
and corresponds to the drop down part of the Tools menu.
Creating an Install Manifest
Recent versions of Firefox and Thunderbird have a new extension manager which can be used to easily install and manage extensions. To tell this extension manager about your extension, you must write another RDF file called install.rdf. This file should be at the same level in the directory tree as the contents directory, i.e. you should have a structure like this:
c:myextensions +- helloworld +- install.rdf +- content +- contents.rdf +- helloworld-Overlay.xul
Here’s the code for the install manifest with the interesting parts highlighted:
<?xml version="1.0"?> <RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:em="http://www.mozilla.org/2004/em-rdf#"> <Description about="urn:mozilla:install-manifest"> <em:name>Hello World</em:name> <em:id>{12a1584b-2123-473d-8752-e82e74e3cb1b}</em:id> <em:version>0.1</em:version> <em:targetApplication> <Description> <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id> <em:minVersion>0.9</em:minVersion> <em:maxVersion>1.0</em:maxVersion> </Description> </em:targetApplication> <em:file> <Description about=”urn:mozilla:extension:file:helloworld.jar“> <em:package>content/</em:package> </Description> </em:file> </Description> </RDF>
First, we provide a description of the extension. This information will be displayed in Firefox’s extension manager:
<em:name>Hello World</em:name> <em:id>{12a1584b-2123-473d-8752-e82e74e3cb1b}</em:id> <em:version>0.1</em:version>
The content of the em:id element is a globally unique identifier (GUID). This is used to distinguish your extension from every other extension. When writing your own extensions, you should aways generate a new GUID for each distinct extension you write. Andy Hoskinson provides a GUID generator web service you can use for this.
Next, we describe which application we are extending:
<em:targetApplication> <Description> <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id> <em:minVersion>0.9</em:minVersion> <em:maxVersion>1.0</em:maxVersion> </Description> </em:targetApplication>
Each extensible application released by Mozilla has its own GUID: you must specify the correct one here for the application you are extending. In this example, we’re using the GUID for Firefox. We also describe the minimum and maximum versions of Firefox this extension will work with.
Finally, we tell the extension manager which files to install. Later, I’ll describe how we package the extension up so that it can be automatically installed into Firefox:
<em:file> <Description about="urn:mozilla:extension:file:helloworld.jar“> <em:package>content/</em:package> </Description> </em:file>
Packaging an Extension Installer
Our extension is now complete. But to make it easy for users to install the extension, we should package it up in such a way that Firefox can install it easily. To do this, we bundle our files up into an XPI (Cross platform installer) file. An XPI file is just a normal zip file with files organized in a special way. Our XPI file should contain the following structure:
helloworld.xpi +- install.rdf +- chrome/ +- helloworld.jar
helloworld.jar is another zip file containing all the files we created in the content directory:
helloworld.jar +- content/ +- contents.rdf +- helloworld-Overlay.xul
You can easily use this information to create helloworld.xpi using your favorite zip tool. Alternatively, you can use a build utility like Ant to assemble the files correctly. Here’s an example Ant buildfile I used:
<?xml version="1.0"?> <project name="helloworld" default="createxpi"> <target name="createjar"> <zip destfile="helloworld.jar" basedir="." includes="content/**" /> </target> <target name="createxpi" depends="createjar"> <zip destfile="helloworld.xpi"> <zipfileset dir="." includes="helloworld.jar" prefix="chrome" /> <zipfileset dir="." includes="install.rdf" /> </zip> </target> </project>
If you create this buildfile named build.xml
and place it at the same level as install.rdf
, you will be able to just run ant
in this directory to generate your .xpi. Once you have an .xpi file, it can be easily installed using File->Open… in Firefox.
Download the source code (24KB ZIP file).
Links:
Top 10 Firefox Extensions to Improve your Productivity
Top Firefox 2 config tweaks
20 must-have Firefox extensions
How to Make Firefox Look Exactly Like Internet Explorer
April 25th, 2019Google Search gets a facelift
A little nip-and-tuck has gone on at Google Search recently. As we mentioned yesterday in the Googleholic, Google has been testing a slight rework for their search interface and we had a Javascript workaround to see it.
The rework is now evident when visiting Google.com. Nothing too major has gone on and it still closely resembles your favorite search location, but with some added freshness. Along the top of the page when logged in, users are now presented with a list of Google services along with their Google Account services including Web, Images, Video, News, Maps, Mail and a drop down to reach Calendar, Docs, Groups, Blogs, Books, Patents, Notebook, Web History and My Account.
A little freshness has been added to the styling of the page, where a few slight tweaks have been made. There is now a gradient box above the results for an added feeling of depth surrounding the Results numbers. Google has now also pushed the page listing on the bottom to align on the left instead of the center, and added a Google search box, again in a gradient box at the bottom under the results. It’s nice to see these subtle changes, they add a refreshing little perk to the Search site and give it a more polished feel.
April 25th, 2019Samsung’s 120GB disk = 120GB iPods?
http://www.engadget.com/

Oh Samsung, you and your obsession with the “world’s biggest” puts even Jersey girls to shame. Chalk-up two more this morning with the world’s highest capacity 1.8- and 2.5-inch hard disk drives. We already knew they were working a 250GB version of their 2.5-inch, SATA 1.5Gbps (and PATA) SpinPoint M5 spinning at 5,400rpm. It’ll bring an 8MB cache, 24dB whine when idle, 2W power consumption, and 12-ms average seek time when it hits later in the month. According to Samsung, that makes this the largest 2.5-inch disk in a 9.5-mm profile — whatever. The newly announced 1.8-inch SpinPoint N2 however, brings a world’s first 120GB capacity to portable handheld devices like UMPCs (pictured) and perhaps — if Sammy is real lucky — future iPods. As such, the N2 spins at 3,600rpm or 4,200rpm with a 15-ms average seek and sub-1W power consumption to help keep your portable device, portable. Production of the 1.8-incher begins in July although we’re pretty sure they’re already providing samples to OEMs. Hear that Apple? Your 80GB iPod is starting to smell a bit stale. At least toss in a 100GB Toshiba disk for all those movies you’re trying to sell us.
April 25th, 2019Google Releases It’s Own MySQL Patches
http://google-code-updates.blogspot.com/
Though you may think of us as simply a company with a big search index, Google uses MySQL, the open source relational database, in some of the applications that we build that are not search related.
We think MySQL is a fantastic data storage solution, and as our projects push the requirements for the database in certain areas, we’ve made changes to enhance MySQL itself, mainly in the areas of high availability and manageability.
We would love for the some of these changes to be merged with the official MySQL release, but until then we felt strongly that anyone should have access to them, thus we have released the changes with a GPL license for the MySQL community to use and review.
What have we added and enhanced?
The high availability features include support for semi-synchronous replication, mirroring the binlog from a master to a slave, quickly promoting a slave to a master during failover, and keeping InnoDB and replication state on a slave consistent during crash recovery.
The manageability features include new SQL statements for monitoring resource usage by table and account. This includes the ability to count the number of rows fetched or changed per account or per table. It also includes the number of seconds of database time an account uses to execute SQL commands.
More details:
- SemiSyncReplication - block commit on a master until at least one slave acknowledges receipt of all replication events.
- MirroredBinlogs - maintain a copy of the master’s binlog on a slave
- TransactionalReplication - make InnoDB and slave replication state consistent during crash recovery
- UserTableMonitoring - monitor and report database activity per account and table
- InnodbAsyncIo - support multiple background IO threads for InnoDB
- FastMasterPromotion - promote a slave to a master without restart
The current patches are for version 4 of MySQL, with version 5 support coming shortly.
We look forward to hearing from the large MySQL community.
April 25th, 2019Mark Cuban: The Maturity of Web 2.0 and The HDTV is the PC
http://www.blogmaverick.com/
Its fun to watch all the discussion, hyperbole and hopes associated with Apple TV. Once again Apple has come out with a well designed, functional product. Unfortunately for Apple, it may be too little too late.
Lets face some facts. The era of the desktop PC being the home for exciting change and enhancement are long gone. I wrote this for the first time 2 years ago, and nothing has changed since then.
Then in January of this year, I asked why people are so concerned about getting internet video from PCs to HDTVs , rather than taking traditional video from existing sources and distributing it to PCs. Basically saying that its a lot easier to get from TV to PC via any number of existing DVR and other devices than the other way around.
Yet Apple and others still seem to think that simplifying internet video through a PC to a device to an HDTV is the way to go. Is this the future of home entertainment.
Please. Its shuffling deck chairs on the Titanic. Its a waste of time.
There is an old saying that when you have a hammer, everything looks like a nail. Right now the hammer is internet video and everyone wants to find a way to make it the future. Its old news people. Its a mature product in a mature environment.
Now don’t get me wrong. Youtube, despite its copyright problems that could shut it down (i had to slip that in there :), has been a marketing miracle. They have done the completely unexpected and aggregated 10s of millions of monthly users. The same could be same of Myspace. They deserve a ton of credit for what they have accomplished. But the operative word is marketing. Embedded music and video was a catalyst for both. How long has the opportunity to embed videos in an html page been around, 8 years ? No original technology, but a new application of old features is what great ideas and great marketing thrive on.
That is what has made Web 2.0 so interesting. Web 2.0 isnt about technology. Its about ideas implemented around simple applications that have been around for years. The maturity of the technology makes the implementation of ideas simple. That is the key to success in Web 2.0. The technology always works. It may sound crazy to some, but thats the reality. The internet as a connectivity utility and the browser are mature application platforms.
So where will the change come ? What will the be the host for new applications ? Its right in front of our faces, literally. Its the HDTV that you will be buying in the future.
Remember when you would buy a new PC every couple years to keep up and you would buy a new TV every decade ? Well thats about to reverse itself. You no longer feel the need to get the latest and greatest desktop PC, but you are about to get in the habit of upgrading your TV every couple years as new and original features and applications are developed for it.
Dont agree ? Think about the last analog set you bought and what it looked like, could do and cost and compare it to the new HDTV you either just bought or are considering buying. Which has experienced the greatest technological change. The leap from your last analog TV to your next TV or your last PC to your current or next PC ?. The price performance of HDTVs are going to continue at the pace we saw for PCs in the late 90s and early 2000s. In 3 years the mainstream TV will be 70″ and cost less than $1500. In 5 years, it could be 100″ for $2500 dollars . Yes, you will make room for it. You will redesign the family room or your bedroom to make room.
The price performance curve will drive competition for incremental features as well.
We are getting to the point where features that would have been added to PCs in the past will be added to your HDTV. Advances in wireless technology will be more important to your new TV than your desktop PC once your TV has an IP address and internet connectivity, which is right around the corner.
New and unique applications will be developed for your TV ahead of your PC once every HDTV has a browser built in starting in 18 - 24 months.
If you want to see where exciting software is being developed, its not web 2.0. Its being developed for OCAP, Directv and Dish Networks interactive platforms among many. You probably didnt even realize that many of these development platforms are already being built into HDTVs and applications are starting to be released for them.
Its time for everyone to realize that the internet is old news. Its a mature utility, which is the greatest compliment you can give it. The desktop PC is old news. File it next to DVD players: useful and boring with obsolescence right around the corner. Web 2.0 is pleasingly boring.
If the question is “Whats Next “, the answer begins with “Watch TV”
April 25th, 2019BLOG for Google!
http://www.attorneysonlineincblog.com/
By Amanda Snowden
Inarguably, one of the most popular search engines is Google.com. Those law firms that market themselves via the Internet put a lot of time and interest in trying to find out how to appeal to Google because of the large audience that Google has.Now, before you start thinking that you have “cracked the code” and can outsmart Google, you should know that 99.9% of the time, Google is all ready ahead of you. Now, that is not to say that you can’t still give Google what it wants; it just means that you have to work with what Google gives you. And, fortunately, Google likes BLOGs. Why? I am so glad you asked.
Google puts a lot (and I mean a LOT) of weight to fresh content on a website. Sure your website looks great, but Google’s supercomputers aren’t interested in your colors or graphics – they only look at your text. And if you text was written five years ago and hasn’t changed, than Google may assume it is dated and no longer relevant. However, by posting relevant information on a regular basis to your BLOG (and we are talking a couple of paragraphs), you are giving Google something new to look at (which Google loves). Your BLOG will be given priority over static, dated websites every day of the week.
Your BLOG will probably have a lot of links (usually more than a typical website). While outbound links (where you invite people to go see another website) are nice, the thing that Google likes best are inbound links (where other people are invited to come to your site). For example, as a Dallas attorney, you may have a link to the Dallas Bar Association on your BLOG. That is great for the Dallas Bar Association, Google really wants to know that other people found your BLOG and have a link coming from their site TO yours. It makes sense – if people are willing to create a link to your site, there must be something important or relevant there.
The programming that goes into a BLOG is made for other programs to read – including Google. Any time that you can make it easy for Google, it is probably in your website’s best interest.
Search engines probably have a million other reasons that they love BLOGs, but this is just a few that you should consider when deciding whether to get a BLOG up and running. If it’s good enough for Google, it’s good enough for me!
April 25th, 2019Linux Kernel and the Real-Time Technology
http://news.softpedia.com/
Tim Burke, the director of emerging technologies with Red Hat talked at the Linux/Open Source on Wall Street conference that took place on April 23, about Red Hat initiative of developing the Linux kernel by changing almost 1.2 million lines of code and working on the patches which ensure a proper observing of the processes hierarchy for a better stability.
He also mentioned that the Red Hat community runs severe tests over the code before adding it to the kernel so that it is highly improbable to generate any fatal errors. Many projects driving real-time requirements involve messaging, and the target of these real-time capabilities is to foresee in response time and to ensure that the highest priority processes run first.
“The key challenge of getting this done is to remove ‘black holes’ in the Linux kernel […] There can also be downsides to real time, one of which is that average throughput might decrease. Real-time capabilities do not solve all the world’s problems. But, on the positive side, recompilation is not required” - Burke said.
John O’Hara, chairman of the AMQP (Advanced Message Queuing Protocol) working group, shared his view over the AMQP open standard for middleware benefits. AMQP has been in development for more than three years before going public on June 20, 2006. According to O’Hara, the AMQP protocol layering is network friendly, the infrastructure data is binary, it is independent of JMS (Java Message Service) and multivendor interoperable.
If you have ever experienced data loss on your computer, please put your hand up in the air now. Keep your hand raised, if the data you lost were so critical, that it almost made you pull the hair out of your scalp. Most of us who have been using computers for an extended amount of time have probably more than likely experienced hard drive failures or complete death, at least one time before.
But why does it keep happening and why does it seem to happen so often? We cannot really blame it on the hard drive companies, as they are restricted by certain technological constraints. At the same time though, consumer demand for storage capacity and speed is increasing and that adds extra pressure and stress, on current mechanical drive technology, as spindle speeds increase and transfer speeds get faster and faster. You are not likely to experience hard drive death if you go out and buy a drive today, but after long periods of use or without adequate cooling, you should probably start preparing for disaster.
As hard drives become bigger and bigger (Hitachi has a 1TB drive on the market now), they also become heavier. Add four 750GB Seagate drives to your case and you are talking over 3kg (or about 7 pounds) of extra weight. With more platters being squeezed inside regular 3.5-inch hard drives to increase capacity and provide faster transfer speeds, the drives are operating at higher temperatures – and it does not take a rocket scientist to figure out heat is the worst enemy of any electrical component. We do not need to mention (crap, too late!) IBM’s previous and quite shocking “Deathstar” range of drives several years ago, of which almost all died consistently after only about 2,000 hours when used without active cooling.
Several years ago companies started releasing USB pen drives which have reinvented the way stored data could be transported. USB pen drives (and other flash products, such as memory cards used in your digital camera) use NAND non-volatile flash memory, which is able to store and retain data even without power, making this type of memory very versatile. Pen drives were expensive at first release but now you can pick up a 1GB drive for just a few dollars, and flash memory prices are constantly decreasing. Not too long ago, some smart chap had the idea of replacing the aging hard disk drive bound with problems such as heat, size, weight, noise and mechanical failure with solid state technology. Instead of using a hard drive with moving parts, why not create a new type of drive, which is solid state and more reliable, using flash memory chips?
It has been said that, within the next ten years, SSD (Solid State Drives) will replace the aging hard drive, and in the interim HDD / SSD hybrids are likely to increase in popularity as the storage technology of choice. Today we get our first look at SSD technology as we check out Team Group’s 16GB 2.5-inch notebook solid state disk. At 16GB the drive is not a monster when it comes to total storage capacity, but as we take a look at this pre-production product it should give us a good introduction to the potential of SSD technology.
April 23rd, 20196 Degrees of Computer Science
Saved From http://compsci.ca/blog/6-degrees-of-computer-science/
A common confusion among high school seniors interested in computers has to do with too many, often similar, options available for pursuit in higher education. What is the difference between Computer Engineering, Software Engineering, and why is neither the same as obtaining a Computer Science degree? I have put together a graph of programs related to computer science education. Ultimately either will allow for a computer career such as a programmer, but each option also offers a unique flavour. It is essential to pick out where one fits best on this academic gradient, in order to ensure the best University experience.
Computer Science
The most familiar name, Computer Science is the pillar degree of the IT world. Available with a plethora of options and minors, there’s an aura of customizability around this major, but such difficult choices are usually not required until the 2nd year of study.
Computer Science is recognized as an independent discipline with an inherently mathematical nature. Its activity ranges from theoretical areas such as the theory of automata, system organization and logic design, formal languages and computability theory to applied areas such as scientific computing, programming languages, bioinformatics, software management, and computer systems.
This is where one gets to design algorithms, mathematically figure out their efficiencies, and actually gets to write out code to implement the said algorithms in practice. For those who enjoy figuring out just how the code works, and generally code monkey around - this should be the program of choice.
Software Engineering
Probably the closest program to Computer Science, this major will also fetch an Iron Ring for those graduating in Canada. If Computer Science is about writing code, then Software Engineering is thinking about writing the said code.
The technical requirements of these software engineers include a strong foundation in mathematics, natural sciences, and computer science; a broad education in software engineering and design; an understanding of computers and networks; a better appreciation for all aspects of the software engineering life cycle; and the use of methodologies and tools.
The curriculum requirements are not all technical. Industry is also asking for graduates who have facility across several disciplines. Software engineering graduates need to have substantial communications, business, and reasoning skills. Graduates should be able to work in groups; make presentations to technical and non-technical audiences; write coherent well-reasoned reports; and assess the social, technical, legal, and commercial implications of the technology they help to create.
Not quite the same level of involvement with the code. Software Engineering is more abstract, more “larger picture” focused. Lack of Pointer kung-foo is made up with non-technical skills such as communication and presentations. Management material education.
Computer Engineering
In many ways similar to Software Engineering, the Computer Engineering discipline deals with design of specialized type of software, and incorporates more hardware material into studies.
Computer Engineers apply algorithmic and digital design principles to design, build, and test computer software or hardware components used for information processing, communication, and storage – typically embedded in larger engineered systems and in distributed, networked environments. Application areas include communication, automation and robotics, power and energy, health care, business, security, entertainment, and many others.
For those lucky enough to have taken Computer Engineering in high school, this is it. Here you get to design your circuit board, and program it too! Lower level coding, but for actually physical gadgets. Pretty cool.
Electrical Engineering
A yet lower level approach, Electrical Engineering would be most similar to Computer Engineering, but with a heavier focus on hardware than software components of study.
Electrical Engineers apply electronic and electromagnetic/optical design principles to design, build, and test analog or digital devices, circuits, and systems – for processing, communication, and storage of information; distribution, conversion, and storage of energy; and process automation or robotics. Application areas include communication, manufacturing, power and energy, health care, computing, security, entertainment, and many others.
Someone has to push those electrons faster! Hardware level optimization really pushes the limits of critical systems, and for some this low level computing is where it’s at. A typical EE program still includes enough programming courses and is a similar enough discipline to allow one to write software.
Mechatronics Engineering
Mechatronics Engineering is an interesting program as it tries to integrate every other discipline from the above chart. Described as a mix of Software, Hardware, Mechanical parts, and lots of Math, there was still room to include a couple of programming courses into the program’s schedule. At the expense of elective courses.
Mechatronics engineering is an integrated approach to the design of computer controlled electro-mechanical systems. Mechatronic applications are pervasive in our everyday lives, so much so that we often take them for granted. Familiar examples of mechatronic systems include automotive anti-lock braking systems (ABS), SLR cameras, and aerospace “fly-by-wire” systems. These mechatronic designs are much more than simply the addition of a microcontroller to an existing mechanical system – their complete and properly integrated redesign is what makes them successful. An integrated design philosophy has been incorporated into the development of this program.
The broad scope will likely be appealing for those interested in picking up on a lot of new and varying material. Very management material course, as the education promises a middle ground that will unite all the other disciplines that are deemed to be unable to communicate well with each other.
After completing a year of Mechatronics Engineering, I have decided that I am much more interested in just the code and programming part, so now I’m in pursuit of a Computer Science degree instead.
Math / Physics
There’s also an option to ditch the computers all together, and pursue the pure logic, theory, and problem solving with the underlying Math. Computer Science is inherently mathematical in nature, and to some there is an appeal in this direction of problem solving by numbers, theory, and without limitations and bounds of programming languages.
Applied Mathematics is motivated mathematics, or mathematics to a purpose. It reflects the belief that there exists a basic order and harmony in the universe which may be described by the logical structures of mathematics. Thus, it is no coincidence that some of the greatest mathematicians of the past were also interested in engineering and physics.
A major in Physics also offers a similar level of fulfillment, though with a slightly different focus. Obviously either choice offers a minor in Computer Science to fine-tune the desired dose of exposure to actual programming.
In Conclusion…
Minors and options provide a fine gradient of choice between related programs. An undergraduate degree is a 4 or 5 year pursuit, so it’s best to consider all of the available options and excel in a field of interest and passion for the subject.
So what are you interested in?