Set JPG file timestamp from EXIF with imagemagick

One-liner to update file timestamp from EXIF for all files in a directory. I had to fix a bunch of pictures after copying them with Ubuntu file manager application which updates the ‘modified’ timestamp to current date/time on copy.

for i in *.JPG; do touch -t `identify -format "%[EXIF:DateTime]" $i | perl -n -e 'chomp; s/^(\d+):(\d+):(\d+) (\d+):(\d+):(\d+)$/$1$2$3$4$5.$6/ && print` $i; done

How to re-assign pins in gEDA

gEDA/gschem symbols have pre-assigned pin numbers, which only work with one particular package pinout. You can work around this in several ways. One possible way is to create a symbol for each individual model of the component. Works fairly well, since you typically only use a few different models of the same type of component in your designs. I bet you don’t have more than half a dozen different low-power transistors that you pick from. Once you get a stock of one model, you keep using them until either they go EOL or your needs change.

Still, it can get onerous if you work on many different designs with different requirements, or you frequently change components based on cost. Wouldn’t it be easier to use the same symbol and just change pins and device model as needed?

Unfortunately, gEDA does not yet have a way to reassign pins within the design without creating new components. Nor it is possible to share a component drawing across different layouts/packages. Embedding symbols into the schematic does not help either – if you try to edit an embedded symbol and then go back to the schematic, you will be prompted to save the original symbol. Which is actually a bit counterintuitive, in my opinion.

However, there is a way to re-assign pins without creating new components or modifying existing ones. gEDA has a way to define element arrays, such as logic gates or transistors, by specifying that the element is one of many in the same package, with the pins of each individual component in the array assigned to different leads in the package. You specify how many components are in the array via numslots attribute, which particular component is represented by this component via slot attribute, and define the package leads this component is attached to via slotdef attribute.

This allows us to to reassign pins in a discrete component without creating a new one, using an edge case that an individual component in a package can be thought of an array with one slot by setting numslots=1, slot=1, and slotdef=1:n,n,n . Here n,n,n are package lead numbers in the order of pinseq attributes assigned to pins. For example, slotdef=1:5,8,11 will assign pinseq=1 to pinnumber=5, pinseq=2 to pinnumber=8, and pinseq=3 to pinnumber=11, pinnumber representing a package lead with the specific number. You can check which pinseq numbers are assigned to pins by selecting “Down symbol” from the right-click menu. Netlist will use pin assignments from the slotdef attribute instead of the original pinnames.

Tascam 238 Owner’s Manual

Time to perform some public service. I’ve been looking for an online copy of an Owner’s manual for Tascam Syncaset 238 8-track cassette recorder for quite some time, only to find a bunch of shady operations that published PDF documents with links inside, which led to endless loops of ad-filled pages or some other nonsense. So I scanned the paper manual that I had and now you can have it in electronic form, too:, along with an addendum page that lists specifications for the Tascam 238S (Dolby S) version.


Microsoft + Nokia?

It would be the beginning of the end for both.

Automating your browser-based …

Automating your browser-based testing using WebDriver – Google TechTalk

Going to How to write Clean, T…

Going to How to write Clean, Testable code



Off to the start line!

Off to the start line!

Looking into the future, every…

Looking into the future, everything looms large and important; peering into the past – small and surprisingly unexciting.

The best Ubuntu Linux ever

The best Ubuntu Linux ever
was released last Sunday. Free download at