Software

Various software projects. Jump links within this page follow:

[HTML]
Newton: MEMS ECAD

[HTML]
visitors.php: Web Dev

© Copyright Notice

Personal use of this material is permitted, though citation is required. However, permission to reprint or republish this material for advertising or promotional purposes or for creating new collective works for resale or redistribution to servers or lists, or to reuse any copyrighted component of this work in other works must be obtained directly from the author. If NEWTON is downloaded a license agreement will pop up, which requires acceptance for download.

Newton: MEMS ECAD

[ZIP] NEWTON v1.0
NEWTON is a library-based CAD tool with an analytical synthesis engine which has been developed to support the direct synthesis of the physical design of RF-MEMS resonators based on process parameters and performance metrics. NEWTON provides accuracy comparable to finite element analysis while requiring a fraction of the computation and design time. Currently, NEWTON can synthesize clamped-clamped beam and free-free beam microresonators. The synthesized physical design is output in CIF and can be validated with a finite element simulator.

[PDF] Michael S. McCorquodale, James L. McCann, and Richard B. Brown, "Newton: A Library-Based Analytical Synthesis Tool for RF-MEMS Resonators," Asia and South Pacific Design Automation Conference, Yokohama, Japan 2006.

[JPG] NEWTON in action synthesizing a 10MHz clamped-clamped beam microresonator. The application is platform independent and simply requires a local installation of Perl, Perl/Tk and Mathematica.

[GIF] Scanning electron micrograph of the fabricated clamped-clamped beam microresonator based on the synthesis output from NEWTON.

visitors.php: Web Dev

I am often asked how I built the (visitors.php) page. It's original and not from a template. Consequently, I needed to conceive an architecture for it. I'm not a professional web developer (just a hobbyist), but the goals of this effort follow:

As I considered these goals and possible architectures, I quickly realized the limitations of certain common languages used on the web. Here is a brief summary:

A diagram of the code is shown below:

[PNG]

So with this in mind, what essentially occurs is that when the home page (index.php) is hit, PHP code in that file pulls the IP address from the user and uses the PHP API from (ipgeolocation.io) to geolocate the user. This is a commercially available geolocator with a free developer version limited to 30k hits per month. Moving on, the PHP code opens a local file on the server (hostipdb.txt) and writes to it in a standard format that I defined. If you select the link, you can see the trivial format of the database which is simply a list of sequential entries for each visitor. The (index.php) returns data to the user, but nothing client-specific is visible to the user at this point.

Next, when the user hits the visitors page (visitors.php) the DB is opened by PHP code and entries are parsed and sorted into useful arrays. For example, there are arrays of the IP addresses, city, country, geolocation and date. The PHP code goes on to sort the data from the arrays. I don't know if my sorting algorithm is optimal, but it is a bit elegant and parses out bots, search engines, crawlers and so on while organizing the data from the entries by time of visit and number of visits. In hindsight, I probably could've done the sorting when index.php is hit, which is a change I might make.

Now the PHP code transfers its variables to Javascript variables. This is required to use the Javascript Google Maps API. Two functions are defined. One is to set a marker in the map for the current visitor. The other is to read the DB and set markers for the top 50 visitors and color-code the markers based on the number of visits.

So what is the point? Well, given that I have had so many inquiries into how I did this, if someone wanted to take the code, bundle it in a more generic and distributable manner, I would be happy to collaborate on that. All I ask for is credit because I thought this would be really easy, but I spent more time on it than I thought would be required. It could also serve as an elegant lesson in coding because it includes PHP, Javascript, HTML and API calls. A student could quickly learn the differences amongst server-side code, client-side code and cloud API calls. Feel free to contact me if interested.